- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Azonnali alaplapos kérdések órája
- Milyen billentyűzetet vegyek?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Külső merevlemezek - USB, eSATA, FireWire HDD
- Szünetmentes tápegységek (UPS)
- Milyen egeret válasszak?
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Milyen házat vegyek?
- Apple MacBook
-
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
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
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Windows 10
- Azonnali alaplapos kérdések órája
- Milyen billentyűzetet vegyek?
- Otthoni hálózat és internet megosztás
- Airsoft
- Megújult a PROHARDVER!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Subaru topik
- További aktív témák...
- Sony FE 28-70 mm F3.5-5.6 OSS
- PS5 Slim Disc 1TB 2026.10.08 GARANCIA
- Bomba Ár! Dell Latitude 3190 - Intel N4120 I 4GB I 128GB SSD I 11,6" HD I Cam I W11 I Garancia!
- Bomba Ár! Dell Latitude 3190 - Intel N4120 I 4GB I 64GB SSD I 11,6" HD I Cam I W11 I Garancia!
- Bomba ár! Dell Latitude E6520 - i7-2760QM I 8GB I 256SSD I Nvidia I HDMI I 15,6" HD+ I W10 I Gari!
- HP Rack szerverek és tartozékok egyben vagy külön-külön
- Telefon felváráslás!! Xiaomi 13T, Xiaomi 13T Pro, Xiaomi 14T, Xiaomi 14T Pro
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 4060 8GB GAMER PC termékbeszámítással
- Realme 8i 64GB / Normál állapotban / 12 hónap jótállással
- AKCIÓ! Acer Predator Triton Neo 16 15 notebook - Ultra 9 185H 32GB RAM 2TB SSD RTX 4070 WIN11
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest