Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   739 / 839
(#) sdrlab válasza Massawa hozzászólására (») Jún 17, 2022 /
 
Egy kis korrekció: nem az a lényeg, hogy a mérendő jel stabil e, hanem hogy az ADC eredménye az e?!!
Ha igen, zajt kell hozzáadni. Ezt vagy a bemenethez, magához a jelhez adod hozzá, vagy azt meghagyod eredetiben, és a referenciát zajosítod el. A végeredmény ugyanaz: zajos ADC értékek....
(#) sdrlab válasza Skori hozzászólására (») Jún 17, 2022 /
 
Ha ezek a billegések, nem kvázi fehér zaj eloszlást mutatnak, akkor ez nem elég a túlmintavételezés helyes működéséhez! Oda az kell, hogy a statisztikai jellege egyenletes eloszlást mutasson, máskülönben lépcsők lesznek továbbra is az eredményben(és itt nem a legutolsó bit lépcsőjére gondolok)
(#) asch válasza Josi777 hozzászólására (») Jún 17, 2022 / 3
 
> A másik hibát pedig maga az ADC produkálja. Nem preciziós ADC van benne és nem is lineáris.

Az ADC-vel kapcsolatban nagyon fontos kérdés az, hogy a csip köré épített áramkör milyen. Emiatt gyengébb "netes forrásokra" nem érdemes hivatkozni, ha tudni akarjuk a pontosságot, akkor az adatlaphoz kell fordulni, illetve ha nem hiszünk neki akkor mérni kell, de rendesen megtervezett áramkörben, nem demo boardon.

Bár kicsit más példa, de érzékelteti a véletlenszerű netes források használhatóságát, hogy az ATMEGA328P csip fogyasztásáról többféle legenda keringett a neten, és egyszer vettem a fáradságot és megmértem amennyire tudtam az eszközeimmel. Sikerült reprodukálnom a netes pesszimista eredményeket, amik a gyári adattól nagyságrendileg rosszabbak voltak.

De elkövettem azt a hibát, hogy nem kötöttem be az összes lábat. Amint bekötöttem az AREF lábat is az adatlap szerint, abban a pillanatban a fogyasztás nagyságrendeket csökkent, és az adatlap szerinti lett (amennyire az ilyen kis értéket mérni tudtam az eszközeimmel).

Ebből arra a következtetésre jutottam, hogy a fórumtalálatok eredményeit szintén hibás áramkörökre alapozva osztották meg. Persze nem adtak hozzá áramköri rajzot, vagy mérési jegyzőkönyvet csak odadobtak egy számot, hogy szerintük a csip nem annyit fogyaszt, mint az adatlap szerint, hanem nagyságrendileg többet, ennyit és ennyit. Így keletkeznek a pletykák.

Tehát ha fogyasztást vagy analóg pontosságot mérünk, akkor nem önmagában a csipet mérjük, hanem a csipet és az áramkört! Ha egy kezdő egy kutyaütő áramkörrel gyenge ADC pontosságot tapasztal, az nem jelenti azt, hogy maga a csip rossz.

Nem akarom védeni az ESP32-t, nem ismerem egyáltalán, csak azért szóltam hozzá, hogy szerintem tisztességes mérések nélkül Internet szóbeszédre hivatkozva ezek megalapozatlan állítások.
(#) Skori válasza sdrlab hozzászólására (») Jún 17, 2022 /
 
Ezt le lehet tesztelni a gyakorlatban, és kiderül mennyire egyenletes az eloszlás. Ha nem tökéletesen egyenletes a zaj eloszlása, akkor az eredmény nyilván rosszabb lesz, mint ideális esetben. Ugyanakkor nagy valószínűséggel jobb jobb lesz, mint túlmintavételezés nélkül.
Végülis a kérdés, hogy arra feladatra amire használni kellene, elegendő-e vagy sem.
(#) vorosj válasza asch hozzászólására (») Jún 20, 2022 / 1
 
Sajnos az ESP32 ADC konvertere valóban gyengén sikerült. Három különböző hibája van, ebből kettő csökkenthető szoftveres kompenzálással, a harmadik nem.

Egyik hiba a nem lineáris jelleg, a magasabb tartományban jelentősen görbül a feszültség vs ad value fgv. Ezt lehet szoftveresen javítani.

A következő hiba az, hogy zavarja a saját wifi rádiója. Mikor ad, mást mér. Gondos szűréssel sem védhető ki, az sem világos, hogy nagyfrekvenciás zavar okozza, vagy hőlökés a chipen belül. Ez is javítható szoftveresen - nem mér mikor ad.

A harmadik hiba sajnos nem kivédhető. Kapacitív elvű SAR konvertere van, és pontatlan az egyik kondenzátor értéke. Ez azt eredményezi, hogy mikor az ennek megfelelő bit változik, ugrik több egységet az érték. A végeredmény egy fűrészfog szerű hiba.

Összességében jóval gyengébb eredményt ad, mint egy rendes, jól sikerült 10 bites ADC.
(#) vorosj válasza vorosj hozzászólására (») Jún 20, 2022 /
 
Az ADC hibáival saját project fejlesztése során találkoztam. Az lett a vége, hogy beépítettem mellé egy STM32-t, minden mérést az végez, az ESP32 pedig a WiFi-t kezeli.

Próbáltam keresgélni, hogy az újabb változatokban, pl. a RISC-V magos c3-ban javítottak-e az ADC-n. Sajnos nem találtam adatot. Nem meglepő, nagyon munkaigényes korrekt módon letesztelni.
A hozzászólás módosítva: Jún 20, 2022
(#) Kovidivi válasza elactrofan hozzászólására (») Jún 21, 2022 / 1
 
Szegény Elactrofan 2 oldalon keresztül olvasta a veszekedést, de senki sem segít neki.
Képzeljétek el, 10bit-tel is el lehet 1mA-es felbontást érni, 5A-ig. Mégpedig a kulcsszó: átlagolás. ha van egy pici zaj a mért jelen (márpedig mindig van), akkor a 10bitből egyből 11 vagy 12bit lesz, és megjelennek a kicsi áramértékek is. Megfelelő kalibrációval pedig a pontosság is meglesz (nagyjából). A kínai labortápok pontossága is kb. 1-5% között van... Kijelzi az 1mA-t is, aztán vagy annyi folyik, vagy nem.
Az átlagolást érdemes állíthatóra programozni, mert minél több mintát veszünk, annál tovább tart a mérés, lehet már 32db is tökéletes eredményt ad. Vagy ahogy Attila86 írta a weboldalán: vett mondjuk 100db mintát, a 10 legkisebbet és 10 legnagyobbat eldobta, a többit átlagolta. Az arányokat majd kikísérletezi mindenki magának. De ha valaki az 5V-ot akarja mint referencia felhasználni, az inkább csak 0.1A-es lépésekben mérjen 0-5A között! Inkább legyen a belső 1.1V-os, vagy egy TL494 a referencia.
(#) Josi777 válasza Kovidivi hozzászólására (») Jún 21, 2022 /
 
Amit említesz, az a statisztikai átlagolás, ami egyfajta digitális szűrés. De az ADC pontatlanságát az sem képes korrigálni. Egy érték még nem válik pontossá attól, hogy sok tizedesjegyet tartalmaz. Nem lehet a 10 bitesből 11 vagy 12 biteset csinálni! Gondold át a működését és rájössz, hogy miért nem.
(#) icserny válasza Josi777 hozzászólására (») Jún 21, 2022 / 1
 
(#) Josi777 válasza icserny hozzászólására (») Jún 21, 2022 /
 
Te amúgy érted az oversampling fogalmát és a működési elvét? Szerinted az átlagolás az analógiája?
És csak úgy mellékesen megjegyzem, hogy mivel már itt megkaptam azt, hogy ez egy hobbi fórum, ezért ne hivatkozzak magasabb szintű eljárásokra, mert csak összezavarja a kezdőket, így most azt is megkérdezem, hogy erről mi a véleményed?
(#) exabit válasza Kovidivi hozzászólására (») Jún 21, 2022 /
 
Én Josi777-tel értek egyet. Ha elolvasod az icserny hozzászólásában lévő Silicon Labs-os dokksit abban benne van hogy mikor működik az amit írtál.:
"The noise amplitude must be sufficient to cause the input signal to change randomly from sample to sample by amounts comparable to at least the distance between two adjacent codes (i.e., 1 LSB - please see Equation 5 in Appendix A).
The input signal can be represented as a random variable that has equal probability of existing at any value between two adjacent ADC codes."
Legalább annyi zajnak kell lennie hogy rángassa az ADC-t legalább egy digitet. Na ez az ami nincs meg gyakran.
(#) sargarigo válasza exabit hozzászólására (») Jún 21, 2022 /
 
Mellé tesz bármit ami zajt termel, és meg is van. Valamelyik doksi éppen írta is.
(#) sdrlab hozzászólása Jún 22, 2022 /
 
Ti szoktatok visszaolvasni legalább néhány hozzászólást, mielőtt hiányos hozzáértéssel rágjátok tovább a csontot?!!
Leírtuk nem sokkal korábban, mi a pontos feltétele a túlmintavételezésből adódó felbontásnövelésnek, ami matematikailag is levezethető! Tehát felesleges tovább csámcsogni ezen..., ott van egy beidézett doksi is, ami elég szépen leírja a fizikáját ennek. Tessék elolvasni, és értelmezni...
(#) zolee1209 válasza sdrlab hozzászólására (») Jún 22, 2022 /
 
Megelőztél...
(#) sargarigo válasza sdrlab hozzászólására (») Jún 22, 2022 /
 
Igazad van. Valóban nem olvastam most vissza. MeaCulpa
(#) Kovidivi válasza Josi777 hozzászólására (») Jún 23, 2022 /
 
A pontosság pedig attól fog függeni, hogy hogyan kalibrálod be, mihez, és milyen referenciát használsz. Én kétpont kalibrációt alkalmaztam, és kielégítö eredményt kaptam. 10bit-et simán lehet 11bitre növelni, de a 12bit sem akkora probléma, sokkal pontosabb lesz a mérésed, mint sok más kínai szerkezet! Ha viszont használsz egy 16bites ADC-t, ott meg ugye lefelé fogod a mért eredményt rontani (átlagolni), mivel nem akarsz 12.17554V-ot látni a kijelzön.
Szerinted nincs zaj a tápodon? 1bit zaj 5V-os referenciánál 5mV. Ha csak a kezeddel közelítesz az Arduinohoz, máris viszed az 50Hz-es brummot a rendszerbe. Nézd meg a 7805 saját zaját, már ott kapsz ingyen 40uV-ot (0.04mV). A hosszabbító, dc-dc konverterek, telefon, wifi, stb., mind szórja a zajt.
(#) gordonfreemN hozzászólása Jún 25, 2022 /
 
Sziasztok.
SetReset relét szeretnék működtetni arduino unoval egy NO nyomógombbal. Próbapanelen van összedobva.
Van ötletetek, hogy hogyan lehetne megoldani?
NC7SZ19 irányába indultam el, de egyetlen kimenet kevés lesz meglátásom szerint és mivel 1 kivételével az összes IO portot felhasználom (az analogoz is) így mcp23017-re is szükég lesz.
De még így sem egyértelmű, hogyan lenne a legfrappánsabb a kód.
A hozzászólás módosítva: Jún 25, 2022
(#) wbt válasza gordonfreemN hozzászólására (») Jún 26, 2022 /
 
A relé 2 tekercses vagy polaritásváltós? Kicsit egyszerűbb lenne, ha a kimaradt portod analóg lenne, ami persze működhet normál portként is.
(#) gordonfreemN válasza wbt hozzászólására (») Jún 26, 2022 /
 
Szerintem polaritásváltós, de az adatlapban nem találtam erre vonatkozó részt (csak azt, hogy "1 coil"). Nekem az IM41P típus van.
Analóg kimenet marad 1, az akkor pont jó.
A hozzászólás módosítva: Jún 26, 2022
(#) wbt válasza gordonfreemN hozzászólására (») Jún 26, 2022 /
 
"szerintem" Milyen sűrűn kell nyomogatni? Már hogy a plimpírozás periódusideje összemérhető-e a relé működési idejével?
(#) gordonfreemN válasza wbt hozzászólására (») Jún 26, 2022 /
 

bemenetválasztást fog megvalósítani (előerősítő). 50ms-ra állítottam a bounce lecsengését és jónak tűnt (a relé max 3ms).
Közben megnéztem és valóban 1 tekercses kivitel, 2 érintkezője van, nem 4.
A hozzászólás módosítva: Jún 26, 2022
(#) wbt válasza gordonfreemN hozzászólására (») Jún 26, 2022 /
 
Csak ötlet szinten (lehet bonyolítani mondjuk híd-ablakkomparátorokkal is..).
Állandósult állapotban a két kondi közepe féltápfesz. A PORT bemenet, méred ADC-vel, hogy középen van-e vagy kimozdult a középállásból (így 2 gomb is lehet ugyebár, iránytól függően). Ha gombnyomás történik, akkor a PORT-ot kimenetre állítod valamilyen szintre (neked kell majd tudni, mi kell) legyen mondjuk 0. Ekkor a kondik közepe megy 0V felé a tekercsen keresztül. A relé nem mozdul, mert 2.5V-ra (pdf szerint) érzéketlen. Ha kisült/töltődtek a kondik, akkor megfordítod a kimeneti szintet. Ekkor a relé kb. 5V-ot fog kapni, amire mozdul. Utána megint bemenetre kapcsolsz és vársz, míg középre nem kerül a fesz (tehát elengedték a gombot). A kondenzátorértékek, ellenállásértékek ex-hasra vannak, tehát kísérletezést kíván, de nagyságrendileg megfelelőek lehetnek. (csak egyszerű ötlet, nem vitaindító a kötögépeknek!) 4 tranzisztor hídba, megfelelő munkapontbeállítással is lehet... (fél tápon egyik sem vezet).

bi_rele.jpg
    
(#) gordonfreemN válasza wbt hozzászólására (») Jún 26, 2022 /
 
Köszönöm nagyon, de talán egyszerűbb a lentebb említett NC7SZ19 nem?
Csak a kód nem egyértelmű, hogyan progizzam le.
Lesz egy mód gomb és egy választó gomb.
A móddal kiválasztom, hogy ki vagy bemenet, a választó gomb meg azon belül, hogy 1, 2 vagy 3-mas bemenet vagy kimenet.
Ezekhez tartozik LED visszajelzés is. Amikor a mód mondjuk a bemeneten van és még az adott, mondjuk 1-es LED is jelez, akkor az NC7SZ19 "A" bemenete kap egy fix 1-et, az E(neg) bemenet kap logikai 0-át egy impulzus erejéig (ami pl 20ms és itt történik egy polaritás beállás a kimenetek közt) majd az "E" bemenet magasra vált, ekkor a kimenetei közt (Y0 és Y1) nem lesz potenciál különbség, azaz a relé nem fogyaszt. Amikor pedig ismét megnyomásra kerül a választó gomb, akkor a LED már nem jelez, onnan nem kap logikai 1-et az "A" bemenet és az "E" pedig ismét logikai 0-át egy impulzus erejéig, hogy visszaváltson (így megfordul a kimenetek közt a potenciál), majd ismét az "E" bemenet magasra vált, ekkor a kimenetei közt (Y0 és Y1) nem lesz potenciál különbség.
Na a gondot ennek az "E" bemenetnek a leprogramozása okozza, hogy impulzusszerűen működtessem azt az "A" bemenet függvényében.

ui.: természetesen amikor lépünk egy másik bemenetre (vagy kimenetre) akkor egy másik NC7SZ19-et kell majd vezérelnünk.

ui2.: használom még a többi portot is majd, csak e téma megértésében nincs jelentőssége.
Illetve fontos, hogy egy-egy gombbal működjön ez a fenti leírás mind a választás mind a mód esetén.
A hozzászólás módosítva: Jún 26, 2022

nc7sz.JPG
    
(#) wbt válasza gordonfreemN hozzászólására (») Jún 26, 2022 /
 
Jahhh, én elmentem az erdőbe, azt hittem a feladat a "hogyan kezeljünk 1 porton gombot+relét"
(#) gordonfreemN válasza wbt hozzászólására (») Jún 26, 2022 /
 
Bocsi, leírhattam volna hamarabb is részletesebben...
(#) gordonfreemN válasza Kera_Will hozzászólására (») Jún 26, 2022 /
 
Köszi a tippeket, már kapizsgálom mi a gond. Ez minden egyes léptetésnél (gombnyomásra változik a variable értéke) írni fogja az EEPROM-ot. Mi lenne, ha az eeprom.update parancsot egy bemeneti logikai szinttől tenném függővé? Arra gondolok, hogy amikor majd megnyomom a ki/bekapcs gombot, az nem csak a tápellátásért felelős áramkört iktatná ki, hanem egy optocsatolón kersztül adna egy bementi jelet a mikrovezérlőnek is, ami hatására megtörténne ez az eeprom.update, addig pedig nem. Így tényleg csak akkor írnám, amikor arra szükség van.
(#) Skori válasza gordonfreemN hozzászólására (») Jún 26, 2022 /
 
Olyan megoldás is létezik, hogy ha van kiírandó adat az EEPROM-ba, és eltelt egy bizonyos idő (mondjuk 10 másodperc) úgy hogy ezek az adatok nem változtak, csak akkor írja ki az EEPROM-ba. Így is fogja időnként írni az EEPROM-ot, de sokkal ritkábban, így az már nem okoz élettartam problémát. Az eeprom.update emlékeim szerint eleve ellenőrzi, hogy az adott területre mentett adat, és a kiírandó adat eltérő-e, és csak akkor ír ténylegesen, ha szükség van rá.
(#) gordonfreemN válasza Skori hozzászólására (») Jún 26, 2022 /
 
igen, akkor ír ha változik, ezt tisztáztuk korábban itt.
Viszont a várakozás is jó ötlet adott esetben, nálam is lehet, hogy jó lehet ez a megoldás is. Mivel egy előerősitő/bemenetválasztó lesz, nem tragédia, ha egyszer nem jegyzi meg az állapotot, de azért nagyrészt meglegyen. Még kiválasztom a megfelelő ki és bemenetet (ez az általad javasolt 10s-20s) addig figyelmen kívül hagyja a változást, aztán beírja. Ezzel némileg az áramszünet ellen is lehetne védekezni.
Gondolom nem csak simán egy delay lesz erre a megoldás, mert nekem attól szeret befagyni az arduino. Valószínűleg rosszul használom.
  1. #include <EEPROM.h>
  2. const int mode_led1 = A0; //piros led
  3. const int mode_led2 = A2; //piros led
  4. const int mode_led3 = A4; //piros led
  5. const int select_led4 = 8; //zöld led
  6. const int select_led5 = 10; //zöld led
  7. const int select_led6 = 12; //zöld led
  8.  
  9. const int in_relay1 = 4;
  10. const int in_relay2 = 5;
  11. const int in_relay3 = 6;
  12. const int out_relay1 = A1;
  13. const int out_relay2 = 9;
  14. const int sch_relay1 = 11;
  15. const int sch_relay2 = 13;
  16.  
  17. int reset_relay1 = 7;
  18. int reset_relay2 = A3;
  19. int reset_relay3 = A5;
  20.  
  21. const int button1 = 2; //mode gomb
  22. const int button2 = 3; //select gomb
  23. int buttonstate1;
  24. int buttonstate2;
  25. int lastbuttonstate1;
  26. int lastbuttonstate2;
  27. byte cm;
  28. byte cs;
  29.  
  30. void setup()
  31. {
  32.   Serial.begin(9600);
  33.   Serial.println("cm értéke");
  34.   pinMode(mode_led1, OUTPUT);
  35.   pinMode(mode_led2, OUTPUT);
  36.   pinMode(mode_led3, OUTPUT);
  37.   pinMode(select_led4, OUTPUT);
  38.   pinMode(select_led5, OUTPUT);
  39.   pinMode(select_led6, OUTPUT);
  40.   pinMode(in_relay1, OUTPUT);
  41.   pinMode(in_relay2, OUTPUT);
  42.   pinMode(in_relay3, OUTPUT);
  43.   pinMode(out_relay1, OUTPUT);
  44.   pinMode(out_relay2, OUTPUT);
  45.   pinMode(sch_relay1, OUTPUT);
  46.   pinMode(sch_relay2, OUTPUT);
  47.   pinMode(reset_relay1, OUTPUT);
  48.   pinMode(reset_relay2, OUTPUT);
  49.   pinMode(reset_relay3, OUTPUT);
  50.   pinMode(button1, INPUT);
  51.   pinMode(button2, INPUT);
  52.   buttonstate1 = 1;
  53.   buttonstate2 = 1;
  54.   lastbuttonstate1 = 1;
  55.   lastbuttonstate2 = 1;
  56.   digitalWrite(select_led4, 1);
  57.   digitalWrite(select_led5, 0);
  58.   digitalWrite(select_led6, 0);
  59.   delay(50);
  60.   digitalWrite(select_led4, 0);
  61.   digitalWrite(select_led5, 1);
  62.   digitalWrite(select_led6, 0);
  63.   delay(50);
  64.   digitalWrite(select_led4, 0);
  65.   digitalWrite(select_led5, 0);
  66.   digitalWrite(select_led6, 1);
  67.   delay(50);
  68.   digitalWrite(mode_led1, 1);
  69.   digitalWrite(mode_led2, 0);
  70.   digitalWrite(mode_led3, 0);
  71.   delay(50);
  72.   digitalWrite(mode_led1, 0);
  73.   digitalWrite(mode_led2, 1);
  74.   digitalWrite(mode_led3, 0);
  75.   delay(50);
  76.   digitalWrite(mode_led1, 0);
  77.   digitalWrite(mode_led2, 0);
  78.   digitalWrite(mode_led3, 1);
  79.   delay(50);
  80.   cm = EEPROM.read(0); //counter variable mode
  81.   cs = EEPROM.read(1); //counter variable select
  82.   //digitalWrite(reset_relay1, 1);
  83. }
  84. void loop()
  85. {
  86.   //cm (mode - piros) változó használata
  87.   buttonstate1 = digitalRead(button1); //gomb állapot kiolvasása
  88.   if (buttonstate1 != lastbuttonstate1) //gombnyomás történt? Gomb állapota változott az előzőhöz képest?
  89.   {
  90.     delay(50); //ha történt változás az előző állapothot képest, várj 50ms-ot
  91.     if (buttonstate1 == 0 && cm <= 2) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor
  92.     {
  93.       cm++; //növelje ca változó értékét egyel, kiindulóérték null
  94.     }
  95.   }
  96.   switch (cm) {
  97.     case 0: //ha értéke null
  98.       digitalWrite(mode_led1, 1);
  99.       digitalWrite(mode_led2, 0);
  100.       digitalWrite(mode_led3, 0);
  101.       break;
  102.     case 1: //ha értéke egy
  103.       digitalWrite(mode_led1, 0);
  104.       digitalWrite(mode_led2, 1);
  105.       digitalWrite(mode_led3, 0);
  106.       break;
  107.     case 2: //ha értéke kettő
  108.       digitalWrite(mode_led1, 0);
  109.       digitalWrite(mode_led2, 0);
  110.       digitalWrite(mode_led3, 1);
  111.       break;
  112.     default: //ha értéke bármi más mint az előzőek
  113.       cm = 0; //cm értéke legyen ismét egy
  114.       break;
  115.   }
  116.   //Serial.println(cm); //írja ki cm változó értékét
  117.   lastbuttonstate1 = buttonstate1; //gomb előző állapotát írja be a gomb aktuális állapotának
  118.   EEPROM.update(0, cm); //tegye eepromba a cm változó értékét, ha az változott
  119.   //---------------------------------------------------------------------------------------------------------
  120.   //cs (select - zöld) változó használata
  121.   buttonstate2 = digitalRead(button2); //gomb állapot kiolvasása
  122.   if (buttonstate2 != lastbuttonstate2) //gombnyomás történt? Gomb állapota változott az előzőhöz képest?
  123.   {
  124.     delay(50); //ha történt változás az előző állapothot képest, várj 50ms-ot
  125.     if (buttonstate2 == 0) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor
  126.     {
  127.       cs++; //növelje cs változó értékét egyel, kiindulóérték null
  128.     }
  129.   }
  130.   switch (cs) {
  131.       case 0: //ha értéke null
  132.         digitalWrite(select_led4, 1);
  133.         digitalWrite(select_led5, 0);
  134.         digitalWrite(select_led6, 0);
  135.         break;
  136.       case 1: //ha értéke egy
  137.         digitalWrite(select_led4, 0);
  138.         digitalWrite(select_led5, 1);
  139.         digitalWrite(select_led6, 0);
  140.         break;
  141.       case 2: //ha értéke kettő
  142.         digitalWrite(select_led4, 0);
  143.         digitalWrite(select_led5, 0);
  144.         digitalWrite(select_led6, 1);
  145.         break;
  146.       default: //ha értéke bármi más mint az előzőek
  147.         cs = 0; //cs értéke legyen ismét egy
  148.         break;
  149.   }
  150.   lastbuttonstate2 = buttonstate2; //gomb előző állapotát írja be a gomb aktuális állapotának
  151.   EEPROM.update(1, cs); //tegye eepromba a cs változó értékét, ha az változott
  152.   //--------------------------------------------------------------------------------------------------------
  153.   if (cm == 1 && cs == 1) { //ha piros/mode=1 akkor zöld/select=1-nél kapcsolja az in relé 1-t
  154.     //digitalWrite(in_relay1, 1);
  155.     digitalWrite(reset_relay1, 1);
  156.     //digitalWrite(in_relay2, 0);
  157.     //digitalWrite(in_relay3, 0);
  158.   }
  159.   //if (cm == 1 && cs == 2) { //ha piros/mode=1 akkor zöld/select=2-nél kapcsolja az in relé 2-t
  160.     //digitalWrite(in_relay1, 0);
  161.     //digitalWrite(in_relay2, 1);
  162.     //digitalWrite(in_relay3, 0);
  163.   //}
  164.   //if (cm == 1 && cs == 3) { //ha piros/mode=1 akkor zöld/select=3-nél kapcsolja az in relé 3-t
  165.     //digitalWrite(in_relay1, 0);
  166.     //digitalWrite(in_relay2, 0);
  167.     //digitalWrite(in_relay3, 1);
  168.   //}
  169.   //if (cm == 2 && cs == 1) { //ha piros/mode=2 akkor zöld/select=1-nél kapcsolja az out relé 1-t
  170.     //digitalWrite(out_relay1, 1);
  171.     //digitalWrite(out_relay2, 0);
  172.   //}
  173.   //if (cm == 2 && cs == 2) { //ha piros/mode=2 akkor zöld/select=2-nél kapcsolja az out relé 2-t
  174.     //digitalWrite(out_relay1, 0);
  175.     //digitalWrite(out_relay2, 1);
  176.   //}
  177.   //if (cm == 3 && cs == 1) { //ha piros/mode=3 akkor zöld/select=1-nél kapcsolja az sch relé 1-t
  178.     //digitalWrite(sch_relay1, 1);
  179.     //digitalWrite(sch_relay2, 0);
  180.   //}
  181.   //if (cm == 3 && cs == 2) { //ha piros/mode=3 akkor zöld/select=1-nél kapcsolja az sch relé 2-t
  182.     //digitalWrite(sch_relay1, 0);
  183.     //digitalWrite(sch_relay2, 1);
  184.   //}
  185. }

Egyébként most így néz ki a dolog. Kommentek itt-ott el vannak írva.
Van még két problémám, az egyik, hogy a
  1. digitalWrite(reset_relay1, 1);
rész a végén nem állítja be a kimenetet 1-re, azaz Vcc-re.
A másik, hogy miért van az, amikor ennek a kimenetnek szeretném figyelni a serial monitorban az állapotát, nem 1-et vagy nullát mutat, hanem láttam már 4-et, 19-et stb?
A hozzászólás módosítva: Jún 26, 2022
(#) gordonfreemN hozzászólása Jún 26, 2022 /
 
Van még két problémám, az egyik, hogy a
digitalWrite(reset_relay1, 1);
rész a végén nem állítja be a kimenetet 1-re, azaz Vcc-re.

Erre rájöttem... rossz kimenetet figyeltem.
(#) Skori válasza gordonfreemN hozzászólására (») Jún 26, 2022 / 1
 
Delay()-t ne használj. Amikor változnak a mentendő adatok, akkor mindig tárold a változás utolsó időpontoját (millis() függvény), és állíts be egy flag-et, hogy van mentendő változó. Amikor éppen van "szabadideje" a programnak, megnézi, hogy az utolsó változás óta eltelt-e a kívánt idő, és be van-e állítva a flag. Ha igen akkor törli a flag-et,és ment.
Következő: »»   739 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem