Hirdetés
- Vége a dalnak: leállt az iPhone Air gyártása
- Miért fárad gyorsabban az iPhone akku, mint az androidos?
- Amazfit Helio Strap – képernyőmentesen
- Rossz hírek a Galaxy S26-ok teléjét illetően
- Xiaomi 15T - reakció nélkül nincs egyensúly
- Milyen okostelefont vegyek?
- Xiaomi 15T Pro - a téma nincs lezárva
- Google Pixel topik
- Yettel topik
- Sony Xperia 1 V - kizárólag igényeseknek
-
Mobilarena
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
Sziasztok. Próbálkozok az első programom megírásával. Tulajdonképp működik, de azért közszemlére teszem, lehet e bármit elegánsabban megoldani.
#include <EEPROM.h>const int mode_led1 = A2;const int mode_led2 = A3;const int mode_led3 = A4;const int set_led1 = 11;const int set_led2 = 12;const int set_led3 = 13;const int in_relay1 = 4;const int in_relay2 = 5;const int in_relay3 = 6;const int out_relay1 = 7;//const int out_relay2 = 8;const int cb_relay1 = 9;//const int cb_relay2 = 10;const int reset_relay_cb = 1;const int reset_relay_out = 2;const int reset_relay_in = 3;const int button_m = A0; //mode gombconst int button_s = A1; //set gombbool buttonstate_m;bool buttonstate_s;bool lastbuttonstate_m;bool lastbuttonstate_s;byte vmod;byte vset;byte vset_in;byte vset_out;byte vset_cb;unsigned long timer;void setup(){//Serial.begin(9600);pinMode(mode_led1, OUTPUT);pinMode(mode_led2, OUTPUT);pinMode(mode_led3, OUTPUT);pinMode(set_led1, OUTPUT);pinMode(set_led2, OUTPUT);pinMode(set_led3, OUTPUT);pinMode(in_relay1, OUTPUT);pinMode(in_relay2, OUTPUT);pinMode(in_relay3, OUTPUT);pinMode(out_relay1, OUTPUT);//pinMode(out_relay2, OUTPUT);pinMode(cb_relay1, OUTPUT);//pinMode(cb_relay2, OUTPUT);pinMode(reset_relay_in, OUTPUT);pinMode(reset_relay_out, OUTPUT);pinMode(reset_relay_cb, OUTPUT);pinMode(button_m, INPUT);pinMode(button_s, INPUT);buttonstate_m = 1;buttonstate_s = 1;lastbuttonstate_m = 1;lastbuttonstate_s = 1;digitalWrite(set_led1, 1);digitalWrite(set_led2, 1);digitalWrite(set_led3, 1);digitalWrite(mode_led1, 1);digitalWrite(mode_led2, 1);digitalWrite(mode_led3, 1);delay(500);vmod = EEPROM.read(0); //"mode" tárolt értéket a vmod változóba írvset_in = EEPROM.read(1); //"set_in" tárolt értéket a vset változóba írvset_out = EEPROM.read(2); //"set_out" tárolt értéket a vset változóba írvset_cb = EEPROM.read(3); //"set_out" tárolt értéket a vset változóba ír//az eeprom vmod, vset_in stb tartalom legelőször 255 lesz, ha e változók eepromtartalma nem 0,1 vagy 2, akkor legyen 0if ((vmod < 0) || (vmod > 2)) {vmod = 0;}if ((vset_in < 0) || (vset_in > 2)) {vset_in = 0;}if ((vset_out < 0) || (vset_out > 1)) {vset_out = 0;}if ((vset_cb < 0) || (vset_cb > 1)) {vset_cb = 0;}//bekapcsoláskor a ki-be és schematik választók (relék) beállítása az eltárolt értékre-----------------------------------------------if (vset_in == 0) {digitalWrite(in_relay1, 1);digitalWrite(in_relay2, 0);digitalWrite(in_relay3, 0);digitalWrite(reset_relay_in, 0);delay(20);digitalWrite(reset_relay_in, 1);}if (vset_in == 1) {digitalWrite(in_relay1, 0);digitalWrite(in_relay2, 1);digitalWrite(in_relay3, 0);digitalWrite(reset_relay_in, 0);delay(20);digitalWrite(reset_relay_in, 1);}if (vset_in == 2) {digitalWrite(in_relay1, 0);digitalWrite(in_relay2, 0);digitalWrite(in_relay3, 1);digitalWrite(reset_relay_in, 0);delay(20);digitalWrite(reset_relay_in, 1);}if (vset_out == 0) {digitalWrite(out_relay1, 1);digitalWrite(reset_relay_out, 0);delay(20);digitalWrite(reset_relay_out, 1);}if (vset_out == 1) {digitalWrite(out_relay1, 0);digitalWrite(reset_relay_out, 0);delay(20);digitalWrite(reset_relay_out, 1);}if (vset_cb == 0) {digitalWrite(cb_relay1, 1);digitalWrite(reset_relay_cb, 0);delay(20);digitalWrite(reset_relay_cb, 1);}if (vset_cb == 1) {digitalWrite(cb_relay1, 0);digitalWrite(reset_relay_cb, 0);delay(20);digitalWrite(reset_relay_cb, 1);}timer = 0;}void loop(){//vmod beállítása----------------------------------------------------------------------------------------buttonstate_m = digitalRead(button_m); //gomb állapot kiolvasásaif (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-otif (buttonstate_m == 0) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor{vmod++; //növelje vmod változó értékét eggyeltimer = millis(); //timer változó legyen millis aktuális értékével feltöltve}}switch (vmod) {case 0: //ha értéke nulldigitalWrite(mode_led1, 1);digitalWrite(mode_led2, 0);digitalWrite(mode_led3, 0);break;case 1: //ha értéke egydigitalWrite(mode_led1, 0);digitalWrite(mode_led2, 1);digitalWrite(mode_led3, 0);break;case 2: //ha értéke kettődigitalWrite(mode_led1, 0);digitalWrite(mode_led2, 0);digitalWrite(mode_led3, 1);break;default: //ha értéke bármi más mint az előzőekvmod = 0; //akkor vmod értéke legyen nullbreak;}lastbuttonstate_m = buttonstate_m; //gomb előző állapotát írja be a gomb aktuális állapotánakif ((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éketvset_in = 0; //bemeneti változó beállításadigitalWrite(in_relay1, 1); //bemeneti 1-es relé kiemenet HIGHdigitalWrite(in_relay2, 0); //bemeneti 2-es relé kiemenet LOWdigitalWrite(in_relay3, 0); //bemeneti 3-mas relé kiemenet LOWif (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);} //csak ha set gombnyomás történik akkor az 1-es relé resetje LOWdelay(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(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(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(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(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(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(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áltozottEEPROM.update(2, vset_out); //tegye EEPROM-ba a vset_out változó értékét, ha az változottEEPROM.update(3, vset_cb); //tegye EEPROM-ba a vset_cb változó értékét, ha az változott}//--------------------------------------------------------------------------------------------------------//Serial.println(buttonstate_s);}
A működése:
Ez egy be és kimenetválasztós előerősítő lenne majd.
vmod kiválasztja, hogy be vagy kimenet
vset a be vagy kimeneten belül kiválasztja, hogy melyik (0,1,2 ami pl be esetén hasamraütök, TV, CD, PC).
nem szeretném, hogy elfelejtse a beállított értékeket kikapcsolás után, mivel nem szeretnék minden bekapcsolást azzal kezdeni, hogy beállítom a be és kimeneteket amiket épp használnék - ezért az eepromos huncutság.
Illetve amikor beállítom a bemenetet, majd a kimenetet, aztán mégis visszaléptetem a mod-dal a bemeneti választásra, akkor a visszajelző LED (digitalwrite-ok a switch-ben) a bemenet aktuális allapotát jelezze, ne pedig maradjon ott, ahova a kimenetkor állítottam.
Új hozzászólás Aktív témák
- Forza sorozat (Horizon/Motorsport)
- Micro Four Thirds
- Lexus, Toyota topik
- Horgász topik
- Gaming notebook topik
- Vége a dalnak: leállt az iPhone Air gyártása
- Arc Raiders
- Kerékpárosok, bringások ide!
- Miért fárad gyorsabban az iPhone akku, mint az androidos?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- ÁRGARANCIA! Épített KomPhone Ultra 7 265KF 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 14 Pro Max 128GB Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3913, 100% Akkumulátor
- GYÖNYÖRŰ iPhone 14 128GB Red -1 ÉV GARANCIA -Kártyafüggetlen, MS3678, 100% Akkumulátor
- AKCIÓ! MSI MAG 325CQRXF QHD VA 240Hz 1ms monitor garanciával hibátlan működéssel
- HIBÁTLAN iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3240, 100% Akksi
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
ekkold

