Hirdetés

2024. május 10., péntek

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-12-13 05:08:33

LOGOUT.hu

Okos Otthon összefoglaló

Összefoglaló kinyitása ▼

Hozzászólások

(#4288) krisztián28 válasza ghck (#4286) üzenetére


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 :C :C :C
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! :)

Copyright © 2000-2024 PROHARDVER Informatikai Kft.