- Gurulunk, WAZE?!
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- lezso6: Nem látszik a kurzor Chrome alatt a beviteli mezőkben?
- gban: Ingyen kellene, de tegnapra
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- hdanesz: Hyundai Ioniq 28kWh - Első benyomások - második felvonás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- stefi68: AnySoft Keyboard (magyarul)
-
LOGOUT
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 gomb
const int button_s = A1; //set gomb
bool 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 ír
vset_in = EEPROM.read(1); //"set_in" tárolt értéket a vset változóba ír
vset_out = EEPROM.read(2); //"set_out" tárolt értéket a vset változóba ír
vset_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 0
if ((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á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
{
vmod++; //növelje vmod változó értékét eggyel
timer = millis(); //timer változó legyen millis aktuális értékével feltöltve
}
}
switch (vmod) {
case 0: //ha értéke null
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
break;
case 1: //ha értéke egy
digitalWrite(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őek
vmod = 0; //akkor vmod értéke legyen null
break;
}
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(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(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á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 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
Hirdetés
- ACER Aspire 3 15,6" FHD IPS // 11 GEN // MX350 2GB VGA // 8GB DDR4 // WIN11 // 256GB Nvme SSD
- HP Elitebook 840 G6, 14" FULL HD IPS, I7-8665U CPU, 16GB DDR4, 256GB NVMe SSD, WIN 11, 1 év garancia
- HP Elitebook 840 G6, 14" FULL HD IPS, I7-8665U CPU, 16GB DDR4, 256GB NVMe SSD, WIN 11, 1 év garancia
- MacSzerez.com - iPhone 13 Mini / 128GB / Kék / Új gyári Apple akkumulátor! / Garancia!
- MSI GP66 Leopard 10UE 15.6" FHD IPS i7-10870H RTX 3060 16GB 512GB NVMe magyar vbill gar
- Samsung Galaxy A41 64GB Kártyafüggetlen, 1Év Garanciával
- Azonnali készpénzes Intel i3 i5 i7 i9 8xxx 9xxx processzor felvásárlás személyesen / csomagküldés
- Bomba ár! Lenovo IdeaPad V110 - i3-6GEN I 4GB I 128GB SSD I 15,6" I HDMI I Cam I W10 I Garancia!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
- AKCIÓ! "ÚJ" Microsoft Surface 5 13,5 notebook - i5 1235U 8GB RAM 256GB SSD Intel Iris Xe IGP 27% áfa
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged