millis mind idözitök...

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

millis mind idözitök...

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

Szeretném resetelni a beállittot időn belül pl 10sec idő allat megnyomom a button2 akkor újra kezdje a számolást a 10sec ami void Timer_reset() nem igazán müködik zavaros!
Még annyi kérdésem lenne ez a típusú millis függvény 47 nap után túl csordulhat e ki lehet kompenzálni hogy ne tegye?
Próbáltam wdt megoldásokkal de nálam egyik példa sem igazán müködöt valami (bootloader) probléma van uno...nano nem !
köszönöm!

Kód: Egész kijelölése

----------------------
int wirePin = 13;

int button = 3;
int button2 = 5;


long t1, t_kovetkezo1;

void setup() {
pinMode(wirePin, OUTPUT);
pinMode(button, INPUT);
pinMode(button2, INPUT);

t_kovetkezo1=millis();

Serial.begin(9600);
//digitalWrite(wirePin, HIGH);
}

void loop() {

Serial.println(t_kovetkezo1);

Timer_counter1();

// if(digitalRead(wirePin)){Timer_counter1();}

if(digitalRead(button)){ digitalWrite(wirePin, HIGH);}


if(digitalRead(button2)){ Timer_reset();}

}

void Timer_counter1()
{
t1=millis();
if( t1 > t_kovetkezo1 )
{
t_kovetkezo1=t1+10000;

delay(10);

digitalWrite(wirePin, LOW);

}

}


void Timer_reset()
{
t1=millis();

// t_kovetkezo1=t1+10000;

 t_kovetkezo1 == 0;



delay(10);


}
Admin: Kérlek használd a hejjes-sírás ellenőrzőt. És a mondatok írásjeleit is.
A code nyomógombot már megnyomtam helyetted...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

És mi a kérdés és mi a probléma? Csak az veszett el a szövegben....
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Robert írta:És mi a kérdés és mi a probléma? Csak az veszett el a szövegben....
Timer_reset() rész nem müködik mert nem tudom ujra inditani button2 amikor nyomom akor Timer_counter1(); nulláznia kellene de csak lefut 10sec és kész!:(

Neten van egy marék fügvény millis 47 napon tulcsordulásra de melyik ami jó is lehet szerinted???
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Robert írta:És mi a kérdés és mi a probléma? Csak az veszett el a szövegben....
Timer_reset() rész nem müködik mert nem tudom ujra inditani button2 amikor nyomom akor Timer_counter1(); nulláznia kellene de csak lefut 10sec és kész!:(

Monostabil álapot lene a cél.....button1 indit 10sec de ez ujra vagy közben nullátná a button2 ha beavatkozik!

Neten van egy marék fügvény millis 47 napon tulcsordulásra de melyik ami jó is lehet szerinted???
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

Timer_reset() rész nem müködik mert nem tudom ujra inditani button2 amikor nyomom akor Timer_counter1(); nulláznia kellene de csak lefut 10sec és kész!:(
Monostabil álapot lene a cél.....button1 indit 10sec de ez ujra vagy közben nullátná a button2 ha beavatkozik!
Rajzolj a működésre folyamat ábrát. És érdemes egy külön jelzőbitet tartani arra, hogy épp milyen státuszban van a monostabil. Így könnyebben végig tudsz rajta menni.
Neten van egy marék fügvény millis 47 napon tulcsordulásra de melyik ami jó is lehet szerinted???
Mindegyik jó, de én a beépítettet hazsnálom. A 47 napos túlcsordulás mindben ott van. Sőt egy rakás függvény a

Kód: Egész kijelölése

eltelt_ido = most() - korábban_levo_ido
összefüggést hazsnálja. Na akkor a korabban_levo_ido legyen a túlcsordulás előtti 4 mp, majd túlcsordul és 1-től számol.
Ekkor eltelt_idő = 15 - nagyonsok -> -nagyonsok az eredmény.
Erre _semelyik_ függvényed nincs felkészülve az LCD-kezeléstől kezdve azt SD kártyán át az időzítésekig.
Megoldás: ha lefagy a program használj watchdogot. Az a lefagyáskor újraindítja a chipet.
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Igy kellene hogy müködjön a feltételek.......

http://users.atw.hu/jeges2009/_private/ ... iagram.jpg
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

wdt kapcsolatban.....
Ennek valami olyasmit kellene produkálni mind ha reset gombot nyomkodnám UNO be nyomás után fel villana 13 pin ledje de semmi ilyesmi nem történik....
Hogyan tudnám elenörizni hogy valoban a lenti kod resetel e?
#include <avr/wdt.h>
uint8_t res = 0;
/*
Threshold value Constant name Supported on
15 ms WDTO_15MS ATMega 8, 168, 328, 1280, 2560
30 ms WDTO_30MS ATMega 8, 168, 328, 1280, 2560
60 ms WDTO_60MS ATMega 8, 168, 328, 1280, 2560
120 ms WDTO_120MS ATMega 8, 168, 328, 1280, 2560
250 ms WDTO_250MS ATMega 8, 168, 328, 1280, 2560
500 ms WDTO_500MS ATMega 8, 168, 328, 1280, 2560
1 s WDTO_1S ATMega 8, 168, 328, 1280, 2560
2 s WDTO_2S ATMega 8, 168, 328, 1280, 2560
4 s WDTO_4S ATMega 168, 328, 1280, 2560
8 s WDTO_8S ATMega 168, 328, 1280, 2560
*/
void setup() {
// put your setup code here, to run once:
wdt_enable(WDTO_500MS); // ujraindul 500ms mulva
}

void loop() {
// put your main code here, to run repeatedly:
// vagy:
res = 1; // Wachdog Reset aktiwállása
if(res == 1) wdt_enable(WDTO_15MS); // ujraindul minden 15ms mulva
// lekapcsolja:
wdt_disable();

// WDT timert ujra inditja:
wdt_reset();
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

1, amit küldtél az _nem_ folyamatábra
Súgó:
http://progalap.elte.hu/downloads/seged ... _lap1.html


2, A wdt-hez minta:
http://folk.uio.no/jeanra/Microelectron ... chdog.html
De neked fagyásvédelem kell, nem programozott újraindítás
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Robert írta:1, amit küldtél az _nem_ folyamatábra
Súgó:
http://progalap.elte.hu/downloads/seged ... _lap1.html


2, A wdt-hez minta:
http://folk.uio.no/jeanra/Microelectron ... chdog.html
De neked fagyásvédelem kell, nem programozott újraindítás
folyamatábrát nem tukok csinálni.....

amit rajzoltam lényeget tartalmaza szerintem...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

Sajnálom. Nem látom a programozási elvárást/logikát. :( Így még a feladatot sem értem..... Időlefutás szerűen...
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Na jó akor leirom fizikai példával!

button2=mozgásérzékelö " void Timer_reset()"
lámpa bekapcsolva maradási idö =10s "Timer_counter1();"
mozgási idö = véletlenszerü

ha mozgás van egyszer lámpa bekapcsolási idö max 10sec van több mozgás 10 sec mindig ujra indul lámpa bekapcsolás folyamatos!

Diohéjba enyit probáltam volna csak elmondani a rajzal és a logikai részel!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

Gyakorkatilag:
- a PIR utolsó érzékelt mozgása után még 10 sec világítás legyen.

Kövesd végig a programodban, mikor hol mennyi a t1_kovetkezo erteke.

Kód: Egész kijelölése

----------------------
int wirePin = 13;
int button = 3;//bekapcsoló nyomogomb
int button2 = 5;//mozgaserzekelo

long t1, t_kovetkezo1;

void setup() {
pinMode(wirePin, OUTPUT);
pinMode(button, INPUT); //igaz van kulso felhuzoellenallas?
pinMode(button2, INPUT);//igaz van kulso felhuzoellenallas?

t_kovetkezo1=millis();  //Itt van a 0 pozíció. De minek kell?

Serial.begin(9600);
//digitalWrite(wirePin, HIGH);
}

void loop() {

Serial.println(t_kovetkezo1);

Timer_counter1();

// if(digitalRead(wirePin)){Timer_counter1();}

if(digitalRead(button)){ digitalWrite(wirePin, HIGH);}
if(digitalRead(button2)){ Timer_reset();}

}

void Timer_counter1()
{
t1=millis();
if( t1 > t_kovetkezo1 )   //itt a hiba! Ez _mindig_ igaz!
{
t_kovetkezo1=t1+10000; //Itt minden esetben toilod 10 seccel az időt!

delay(10);

digitalWrite(wirePin, LOW);

}

}


void Timer_reset()
{
t1=millis();

// t_kovetkezo1=t1+10000;

 t_kovetkezo1 == 0;



delay(10);


}

http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Ha tudnám a megoldást itt kérdezgetnék???
Ez én irtam kodot amit most fel komenteztél enek mi értelme?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

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

Megtanulni akarod, hogy hol a hiba és miért megy rosszul, vagy sültgalambként a kész megoldást?
Ez utóbbit nem adhatok. Az előbbi a kommenttel pedig a hibára mutat rá.
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

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

Robert írta:Megtanulni akarod, hogy hol a hiba és miért megy rosszul, vagy sültgalambként a kész megoldást?
Ez utóbbit nem adhatok. Az előbbi a kommenttel pedig a hibára mutat rá.
Meg meg de nem egyhelybe toporogva ez nem tanulási mod nálam..........

megoldas végül kiss segitségel lett:

void Timer_reset()
{
t_kovetkezo1=millis()+10000;
}
Válasz küldése