From b577488bbd3bbd9d7d02bdc1f0393d3a90483cf9 Mon Sep 17 00:00:00 2001 From: lexa Date: Sat, 14 Nov 2020 18:00:14 +0300 Subject: [PATCH] Night light to dimmer & percent extsens --- ExtSens/src/main.cpp | 2 +- MidRoomNLight/src/main.cpp | 96 +++++++++++++------------------------- 2 files changed, 33 insertions(+), 65 deletions(-) diff --git a/ExtSens/src/main.cpp b/ExtSens/src/main.cpp index 1efeddb..d445731 100644 --- a/ExtSens/src/main.cpp +++ b/ExtSens/src/main.cpp @@ -53,7 +53,7 @@ void loop() { send(msgMillis.set(cRun)); sensorValue = analogRead(BATTERY_SENSE_PIN); v = sensorValue * 0.004659498; - batteryPcnt = (v * 100) / 4.2; + batteryPcnt = (v-3 * 100) / 1.2; sendBatteryLevel(batteryPcnt); send(msgVolts.set(v, 2)); //} diff --git a/MidRoomNLight/src/main.cpp b/MidRoomNLight/src/main.cpp index 6d83674..fc96644 100644 --- a/MidRoomNLight/src/main.cpp +++ b/MidRoomNLight/src/main.cpp @@ -1,62 +1,21 @@ #include -/* - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2019 Sensnology AB - * Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Example sketch showing how to control physical relays. - * This example will remember relay state after power failure. - * http://www.mysensors.org/build/relay - */ - -// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_RF24 -//#define MY_RADIO_NRF5_ESB -//#define MY_RADIO_RFM69 -//#define MY_RADIO_RFM95 - -// Enable repeater functionality for this node -//#define MY_REPEATER_FEATURE - #include -#define RELAY_PIN 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) -#define NUMBER_OF_RELAYS 1 // Total number of attached relays -#define RELAY_ON 1 // GPIO value to write to turn on attached relay -#define RELAY_OFF 0 // GPIO value to write to turn off attached relay +#define RELAY_PIN 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) +//MyMessage msgLev(1, V_DIMMER); +uint16_t lightLevel; +bool lightOn = false; void before() { - for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { - // Then set relay pins in output mode - pinMode(pin, OUTPUT); - // Set relay to last known state (using eeprom storage) - digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); - } + pinMode(RELAY_PIN, OUTPUT); + lightLevel = loadState(0); } void setup() @@ -67,12 +26,8 @@ void setup() void presentation() { // Send the sketch version information to the gateway and Controller - sendSketchInfo("Relay", "1.0"); - - for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { - // Register all sensors to gw (they will be created as child devices) - present(sensor, S_BINARY); - } + sendSketchInfo("Night Light", "2.0"); + present(0, S_DIMMER, "Dimmer"); } @@ -83,16 +38,29 @@ void loop() void receive(const MyMessage &message) { - // We only expect one type of message from controller. But we better check anyway. - if (message.getType()==V_STATUS) { - // Change relay state - digitalWrite(message.getSensor()-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF); - // Store state in eeprom - saveState(message.getSensor(), message.getBool()); - // Write some debug info - Serial.print("Incoming change for sensor:"); - Serial.print(message.getSensor()); - Serial.print(", New status: "); - Serial.println(message.getBool()); + switch(message.getType()){ + case V_STATUS: + if(message.getBool() == true) { + analogWrite(RELAY_PIN, lightLevel); + lightOn = true; + } + else { + analogWrite(RELAY_PIN, 0); + lightOn = false; + } + Serial.print("Incoming change for sensor:"); + Serial.print(message.getSensor()); + Serial.print(", New status: "); + Serial.println(message.getBool()); + break; + case V_PERCENTAGE: + saveState(0, message.getUInt()); + lightLevel = message.getUInt(); + if(lightOn) analogWrite(RELAY_PIN, lightLevel); + Serial.print("Incoming change for dimmer:"); + Serial.print(message.getSensor()); + Serial.print(", New value: "); + Serial.println(message.getUInt()); + break; } }