60 napos tanfolyam - # 16 - Időzítés

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Válasz küldése
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

60 napos tanfolyam - # 16 - Időzítés

Hozzászólás Szerző: photogyulai »

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 :-)
bujan52
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2015. július 16. csütörtök, 1:51

Re: 60 napos tanfolyam - # 16 - Időzítés

Hozzászólás Szerző: bujan52 »

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 napos tanfolyam - # 16 - Időzítés

Hozzászólás Szerző: Robert »

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
Válasz küldése