Hirdetés
- Az Enermax tényleg nem viccel, ha az új tápjának garanciaidejéről van szó
- Egybegép lesz vagy ház? A Corsair sem tudja eldönteni.
- A Qwertykeys új klaviatúrái szépek, igényesek és sokrétűek
- Összement a mosásban az ASUS új VGA-inak PCI Express 5.0 csatlakozója
- Billentyűzet-választó: mechanikus vs membrános – kinek melyik a jobb?
- 3D nyomtatás
- És akkor a memóriapánik után beköszöntött a HDD-pánik
- A Qwertykeys új klaviatúrái szépek, igényesek és sokrétűek
- Bluetooth hangszórók
- HiFi műszaki szemmel - sztereó hangrendszerek
- Billentyűzet-választó: mechanikus vs membrános – kinek melyik a jobb?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen billentyűzetet vegyek?
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Melyik tápegységet vegyem?
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
gordonfreemN
addikt
válasz
Tankblock
#17729
üzenetére
Lehet rájöttem mire gondoltál, vagy ha nem is, olyan ötletet adtál, amivel megoldottam egy utolsó számomra zavaró jelenséget: bár működőképes volt a panel, mégis ha elég gyorsan nyomkodtam a mode gombot, akkor volt a mode változó 2 értékének 0-ra történő írásakor a ledek váltásában némi késleltetés.
A következő módosítással sikerült (már csak a loop-ot teszem be, a többi változatlan):void loop()
{
//vmod beállítása----------------------------------------------------------------------------------------
buttonstate_m = digitalRead(button_m); //gomb állapot kiolvasása
if (buttonstate_m != lastbuttonstate_m) //gombnyomás történt? Gomb állapota változott az előzőhöz képest?
{
delay(50); //ha történt változás az előző állapothot képest, várj 50ms-ot
if (buttonstate_m == 0) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor
{
if (vmod < 2) {
vmod++; //növelje vmod változó értékét eggyel
}
else {
vmod = 0;
}
timer = millis(); //timer változó legyen millis aktuális értékével feltöltve
}
}
lastbuttonstate_m = buttonstate_m; //gomb előző állapotát írja be a gomb aktuális állapotának
if ((millis() - timer) > 5000) { //ha millis értéke mínusz timer értéke nagyobb mint 5sec (azaz eltelt 5mp)
EEPROM.update(0, vmod); //tegye eepromba a vmod változó értékét, ha az változott
}
//vset beállítása------------------------------------------------------------------------------------------
if (vmod == 0) {vset = vset_in;}
if (vmod == 1) {vset = vset_out;}
if (vmod == 2) {vset = vset_cb;}
buttonstate_s = digitalRead(button_s);
if (buttonstate_s != lastbuttonstate_s)
{
delay(50);
if (buttonstate_s == 0)
{
vset++;
timer = millis();
}
}
switch (vset) {
case 0:
digitalWrite(set_led1, 1);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 0);
break;
case 1:
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 1);
digitalWrite(set_led3, 0);
break;
case 2:
if (vmod == 0) {
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 1);}
else if (vmod == 1 || vmod == 2){vset = 0;}
break;
default:
vset = 0;
break;
}
lastbuttonstate_s = buttonstate_s; //gomb előző állapotát írja be a gomb aktuális állapotának
//bemenet kiválasztása----------------------------------------------------------------------------------------
if (vmod == 0 && vset == 0) { //ha vmod nulla, akkor a bemenet beállítása történik és vset_in felveszi az aktuális vset értéket
vset_in = 0; //bemeneti változó beállítása
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 1); //bemeneti 1-es relé kiemenet HIGH
digitalWrite(in_relay2, 0); //bemeneti 2-es relé kiemenet LOW
digitalWrite(in_relay3, 0); //bemeneti 3-mas relé kiemenet LOW
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);} //csak ha set gombnyomás történik akkor az 1-es relé resetje LOW
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);} //csak ha set gombnyomás befejeződött akkor az 1-es relé resetje HIGH
}
if (vmod == 0 && vset == 1) {
vset_in = 1;
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 1);
digitalWrite(in_relay3, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
if (vmod == 0 && vset == 2) {
vset_in = 2;
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 0);
digitalWrite(in_relay3, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
//kimenet kiválasztása---------------------------------------------------------------------------------------
if (vmod == 1 && vset == 0) {
vset_out = 0;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 0);
digitalWrite(out_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
if (vmod == 1 && vset == 1) {
vset_out = 1;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 0);
digitalWrite(out_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
//áramköri lap kiválasztása-----------------------------------------------------------------------------------
if (vmod == 2 && vset == 0) {
vset_cb = 0;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 1);
digitalWrite(cb_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
if (vmod == 2 && vset == 1) {
vset_cb = 1;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 1);
digitalWrite(cb_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
//EEPROM írása------------------------------------------------
if ((millis() - timer) > 5000) {
EEPROM.update(1, vset_in); //tegye EEPROM-ba a vset_in változó értékét, ha az változott
EEPROM.update(2, vset_out); //tegye EEPROM-ba a vset_out változó értékét, ha az változott
EEPROM.update(3, vset_cb); //tegye EEPROM-ba a vset_cb változó értékét, ha az változott
}
//--------------------------------------------------------------------------------------------------------
//Serial.println(buttonstate_s);
}
A mode változónál kivettem a switch case-t és egy egyszerű if-el helyettesítettem
Új hozzászólás Aktív témák
- I7-8700-RTX 4060, csere érdekel.
- Samsung Galaxy S23 8/256GB fekete
- Kezdő Gamer PC-Számítógép! Csere-Beszámítás! I7 3930K / 32GB DDR3 / RX 480 8GB / 500GB SSD!
- Dell Latitude 7210 2-in-1 12" FHD touch, i7 10610U, 16GB RAM, 512GB SSD, jó akku, számla, 6 hó gar
- Playstation 5 lemezes / PS5 base (disc) edition
- Új, Aktiválatlan iPhone 14 (128 GB) (rendelhető)
- Bomba ár! Lenovo ThinkPad L390 - i5-8GEN I 8GB I 256SSD I 13,3" FHD I HDMI I Cam I W11 I Gari!
- Telefon felvásárlás!! Apple Watch SE/Apple Watch SE 2 (2022)
- Apple iPhone 15 128GB, Kártyafüggetlen, 1 Év Garanciával
- Fém, összecsukható és kihúzható fotó állvány eladó
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

ekkold

