-
GAMEPOD.hu
Okos Otthon összefoglaló
Új hozzászólás Aktív témák
-
krisztián28
csendes tag
Szia!
Nagyon köszönöm a segítséget!!! Tökéletesen működik így, hogy átírtam egy másik lábra
Nagy az öröm!!!Ha valakit érdekel feltöltöm a működő kódot, hátha valaki hasznát veszi !
Az eredeti kód nem az én szüleményem! Innen származik!
Az átalakított programban egy arduino nano RS485-ön kommunikál a központtal ami szintén egy arduino nano ami usb-n van csatlakoztatva egy raspberry pi-re. A gomb megnyomásakor a rákötött led szalag fokozatosan (fadel-ve) bekapcsol 100%-ra, következő gombnyomásra fokozatosan lekapcsol 0%-ra. Ha hosszan tartod nyomva a gombot akkor pedig lehet fényerőt szabályozni. Domoticz alatt is tökéletesen működik ott is lehet ki -be kapcsolni és a csúszkán (át kell állítani dimmerre) is lehet szabályozni a fényerőt. A programban jelenleg összesen 2 db különálló led szalagot lehet szabályozni 2 db nyomógombbal./*
Board Transmit Receive PWM Unusable
----- -------- ------- ------------
Arduino Uno 9 8 10
Arduino Mega 46 48 44, 45
*/
#define SN "eloszoba led"
#define SV "1.0"
#define MY_DEBUG
#define MY_NODE_ID 6
#define MY_RS485
#define MY_RS485_DE_PIN 10
#define MY_RS485_BAUD_RATE 9600
#include <OneButton.h>
#include <MySensors.h>
#define CHILD_ID_LIGHT1 1
#define CHILD_ID_LIGHT2 2
#define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
#define FADE_DELAY2 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
#define LED1_PIN 6 //led szalag
#define LED2_PIN 5 //led szalag
#define BUTTON1_PIN 3 //nyomógomb
#define BUTTON2_PIN 4 //nyomógomb
byte ledLevel;
boolean ledDimWay;
byte ledLevel2;
boolean ledDimWay2;
OneButton button1(BUTTON1_PIN, HIGH); //a 3-as lábat kell GND-re húzni! nyomógomb
OneButton button2(BUTTON2_PIN, HIGH); //a 3-as lábat kell GND-re húzni! nyomógomb
void setup()
{
pinMode(BUTTON1_PIN, INPUT_PULLUP);
button1.attachClick(click1);
button1.attachDuringLongPress(press1);
button1.attachLongPressStart(pstart1);
button1.attachLongPressStop(pstop1);
request(CHILD_ID_LIGHT1, V_DIMMER); // Pull the gateway's current dim level - restore light level upon sendor node power-up
pinMode(BUTTON2_PIN, INPUT_PULLUP);
button2.attachClick(click2);
button2.attachDuringLongPress(press2);
button2.attachLongPressStart(pstart2);
button2.attachLongPressStop(pstop2);
request(CHILD_ID_LIGHT2, V_DIMMER); // Pull the gateway's current dim level - restore light level upon sendor node power-up
}
void presentation()
{
sendSketchInfo(SN, SV);
present(CHILD_ID_LIGHT1, S_DIMMER, "előszoba világítás1"); // Register the LED Dimmable Light with the gateway
present(CHILD_ID_LIGHT2, S_DIMMER, "előszoba világítás2"); // Register the LED Dimmable Light with the gateway
}
void loop()
{
button1.tick();
button2.tick();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void receive(const MyMessage &message)
{
if (message.type == V_LIGHT || message.type == V_DIMMER) {
if (message.sensor == 1){
int requestedLevel = atoi(message.data); // Retrieve the power or dim level from the incoming request message
requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 ); // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
requestedLevel = requestedLevel > 100 ? 100 : requestedLevel; // Clip incoming level to valid range of 0 to 100
requestedLevel = requestedLevel < 0 ? 0 : requestedLevel; // Clip incoming level to valid range of 0 to 100
setLED(requestedLevel);
}
if (message.sensor == 2){
int requestedLevel2 = atoi(message.data); // Retrieve the power or dim level from the incoming request message
requestedLevel2 *= ( message.type == V_LIGHT ? 100 : 1 ); // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
requestedLevel2 = requestedLevel2 > 100 ? 100 : requestedLevel2; // Clip incoming level to valid range of 0 to 100
requestedLevel2 = requestedLevel2 < 0 ? 0 : requestedLevel2; // Clip incoming level to valid range of 0 to 100
setLED2(requestedLevel2);
}
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------
void setLED(byte level)
{
int delta = (level - ledLevel) < 0 ? -1 : 1; //Fade LED to set level
while (ledLevel != level)
{
ledLevel += delta;
analogWrite(LED1_PIN, (int)(ledLevel / 100. * 255) );
delay(FADE_DELAY);
}
MyMessage lightMsg(CHILD_ID_LIGHT1, V_LIGHT);
MyMessage dimmerMsg(CHILD_ID_LIGHT1, V_DIMMER);
send(lightMsg.set(ledLevel > 0));
send(dimmerMsg.set(ledLevel));
}
void setLED2(byte level2)
{
int delta = (level2 - ledLevel2) < 0 ? -1 : 1; //Fade LED to set level
while (ledLevel2 != level2)
{
ledLevel2 += delta;
analogWrite(LED2_PIN, (int)(ledLevel2 / 100. * 255) );
delay(FADE_DELAY);
}
MyMessage lightMsg2(CHILD_ID_LIGHT2, V_LIGHT);
MyMessage dimmerMsg2(CHILD_ID_LIGHT2, V_DIMMER);
send(lightMsg2.set(ledLevel2 > 0));
send(dimmerMsg2.set(ledLevel2));
}
void writeToLED()
{
analogWrite(LED1_PIN, map(ledLevel,0,100,0,255));
}
void writeToLED2()
{
analogWrite(LED2_PIN, map(ledLevel2,0,100,0,255));
}
void click1() {setLED(ledLevel>0 ? 0 : 100); }
void pstart1() {ledDimWay = ledLevel<100; }
void press1() {if(ledDimWay && ledLevel<100) ledLevel++; if(!ledDimWay && ledLevel>5) ledLevel--; writeToLED(); delay(25); }
void pstop1() {setLED(ledLevel); }
void click2() {setLED2(ledLevel2>0 ? 0 : 100); }
void pstart2() {ledDimWay2 = ledLevel2<100; }
void press2() {if(ledDimWay2 && ledLevel2<100) ledLevel2++; if(!ledDimWay2 && ledLevel2>5) ledLevel2--; writeToLED2(); delay(25); }
void pstop2() {setLED2(ledLevel2); }Használjátok egészséggel!
Mindenkinek köszönöm a segítséget!
Szép estét!