-
GAMEPOD.hu
Okos Otthon összefoglaló
Új hozzászólás Aktív témák
-
krisztián28
csendes tag
válasz layerke #4283 üzenetére
Szia!
Abszolút igazad van!
Némileg módosítottam a programot, alább fel is töltöm...
Annyi a lényeg, hogy az első led tökéletesen működik, lehet dimmelni, ki és bekapcsolni (bekapcsoláskor és kikapcsoláskor is van fade-lése) nyomógombról és a domoticz alól is.
A második led viszont ha például megnyomom a második nyomógombot akkor a gomb hatására fade-lés nélkül bekapcsol majd újabb gombnyomásra fadelés nélkül kikapcsol. Dimmelni nem lehet hosszú gombnyomással. Domoticz alól pedig ha a virtuális gombra kattintok akkor csak az első ledet kapcsolja ki és be.
Úgy gondolom hogy amit a vázlaton kiemeltem részt, oda kellene még valamit beírni illetve duplikálni, csak azt nem tudom, hogy mit...#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 LED1_PIN 6 //led szalag
#define LED2_PIN 7 //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) {
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);
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------
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 level)
{
int delta = (level - ledLevel2) < 0 ? -1 : 1; //Fade LED to set level
while (ledLevel2 != level)
{
ledLevel2 += delta;
analogWrite(LED2_PIN, (int)(ledLevel2 / 100. * 255) );
delay(FADE_DELAY);
}
MyMessage light2Msg(CHILD_ID_LIGHT2, V_LIGHT);
MyMessage dimmer2Msg(CHILD_ID_LIGHT2, V_DIMMER);
send(light2Msg.set(ledLevel2 > 0));
send(dimmer2Msg.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); }
Új hozzászólás Aktív témák
- ArenaRacer Craftsman Gamer szék
- Magyar menüs Saeco Picobaristo OTC (HD8927) tejtartállyal
- Részletfizetés. Bontatlan. noblechairs EPIC székek azonnal . 24 / 36 hónap garancia . +36301300000
- Részletfizetés. Bontatlan. noblechairs ICON székek azonnal . Utolsó darab raktáron +36301300000
- Einhell CC-PO 90 polírozó, 240mm, 90W