Sziasztok!
A prellhez kezdtem írni egy időzítési problémát, mert akkor még nem láttam, hogy lesz ilyen témájú tanfolyam levél.
A megoldandó feladat volt (magamnak találtam ki nem házi feladat volt >> gombnyomással bekapcsolni egy villogó ledet, nem delay-el
TEHÁT: gépkocsi index, vagy fényképezőgép intervallum időzítés jelleggel működjön.
Az interneten található kódok általában gombnyomásra bekapcsolnak valamit "folyamatosra", vagy folyamatosan villogtatnak. De fenti kódot nem találtam készen.
Ami a programozást nehezítette:
Egy adott gombnyomásra át lehetett váltani egy változót >> ON állásba, és a loop-ban lehetett figyelni, hogy akkor kapcsolja be az időzítő ciklust ha e változó értéke ON vagy 1 vagy true vagy ilyesmi.
De innentől kezdve (bekapcsolás után) minden loop ciklusban igaz maradt a feltétel tehát nem lehetett kikapcsolni.
Végül precíz zárójelezéssel és megfelelő if és if else ciklusokkal sikerült megoldani.
A végeredményt megosztom hátha jól jön valakinek, vagy tud valaki profitálni belőle!
Megjegyzes:
elapsedMillis könyvtár kelleni fog >> letölthető.
Illetve a nalam levo lcd keyboard egyedi ezért alábbi kódban x valtozo gombnyomasi erteke eltero lehet mas panelek eseteben
#include <elapsedMillis.h> // Ez a könyvtár kell a történethez ha rákeresel letoltheto
elapsedMillis timer0; //eltelt ido beirasa a timer0 valtozoba >> unsigned long timer tipusu valtozo
expoIdo = 500;
interval = 5000;
int onOff = 0; //bekapcs-kikapcs hoz a valtozo
void setup() {
pinMode(A0, INPUT); //LCD keyboard gombnyomas erzekeles
digitalWrite(A0, HIGH); //Belso felhuzo ellenallas bekapcs
pinMode(13, OUTPUT); // 13-as labon a led, ami villogni fog
timer0 = 0; // timer0 nullara allitasa inditas utan
}
void loop() {
int x; //x valtozo megadasa
x = analogRead (0); //x valtozo olvasasa a 0-as analog labon, itt lehet az LCD Keyboard gombnyomasait erzekelni
if(onOff==1){ //Ha az onOff valtozo erteke egyenlo 1 tehat be van kapcsolva a rendszer
if (timer0 > (interval)) { // Ez az idozites, interval ertekevel idozit
timer0 -= (interval);
digitalWrite(13, HIGH); //13aas labon a led bekapcs
delay(expoIdo); //Egy kis delay hogy exponaljon a gep >> expoIdo ertekevel kesleltet
digitalWrite(13, LOW); //13-as lab kikapcs
}
}
//-------------------------
if (x < 3) {
lcd.print ("None "); //Ez a nincs lenyomva gomb esete
}
// --------- SELECT 20 ------------------------
else if (x < 20) { // Ez a select gomb lenyomasa az !en panelem! eseteben >> shield-enkent eltero lehet az x utani ertek
if(onOff==0){ //Ha ki van kapcsolva kapcsoljon be
onOff = 1;
delay(300);
timer0 = 0; // es bekapcsolasnal nullazza timer0-at
}
else if (onOff ==1){ //Ha be van kapcsolva akkor meg kapcsoljon ki
onOff =0;
delay(300);
}
}
Utóirat:
egy jóval összetettebb kódot írtam abból szedtem ki most a fentieket, lehet pár zárójel nincs a helyén
60 napos tanfolyam - # 16 - Időzítés
-
- DrótVégénSzéndarab
- Hozzászólások: 25
- Csatlakozott: 2015. május 19. kedd, 0:37
Re: 60 napos tanfolyam - # 16 - Időzítés
Sajnos nincs olyan fórum, ahol a kiküldött anyagokkal kapcsolatban lehet kérdezni, ezért most itt teszem.
A 13-as PWM leckében szerepel egy ilyen sor: //delay(3);
Nem kellett volna elhagyni a kettős per jelet?
A 13-as PWM leckében szerepel egy ilyen sor: //delay(3);
Nem kellett volna elhagyni a kettős per jelet?
Re: 60 napos tanfolyam - # 16 - Időzítés
Tessék nyitni fórumot...
// -> REMark vagy megjegyzés...
Amúgy a tanfolyam kérdéseire kb. 35 fórum van:
viewforum.php?f=34
// -> REMark vagy megjegyzés...
Amúgy a tanfolyam kérdéseire kb. 35 fórum van:
viewforum.php?f=34