Zmazať
Príspevkov: 12
• Stránka 1 z 1
Re: Semafór s dvomi stavmi
@ martinius96
Semafór super pre deti na hranie
Prosím prečo ak spravíte projekt a dáte si námahu používate delay ?
Fukcia delay zastavuje celý procesor a nereaguje na žiaden iný príkaz.
Celé sa to dá pekne spraviť cez funkciu millis.
Viem je tu strašne málo hotových projektov, tak sa zíde všetko funkčné
Semafór super pre deti na hranie

Prosím prečo ak spravíte projekt a dáte si námahu používate delay ?
Fukcia delay zastavuje celý procesor a nereaguje na žiaden iný príkaz.
Celé sa to dá pekne spraviť cez funkciu millis.
Viem je tu strašne málo hotových projektov, tak sa zíde všetko funkčné

Ďakujem za pomoc posjirka, Diego, Xeram a barado 

- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Re: Semafór s dvomi stavmi
ahoj, tento projekt sme tvorili ako úplne prvý na praxi pri mojom prvom strete s Arduinom... najprv sme si spravili script bez tlačidla, ten základný stav, neskôr sme dodali do obvodu tlačidlo, a script ostal, iba sa k nemu dorobilo if, a - snímač a druhý stav.
Tú funkciu, ktorú spomínaš som ešte neskúšal, no určite skúsim, vďaka za tip 


Re: Semafór s dvomi stavmi
@ martinius96 pohoda, len píš hotové projekty, to sa vždy zíde 

Ďakujem za pomoc posjirka, Diego, Xeram a barado 

Re: Semafór s dvomi stavmi
tady bych zrovna použil delay stejně jako původce programu. Funkce millis je asice čistší řešení, ale málo kdo se zabývá tím co bude po přetečení a znulování millis .....
Projekt chválím a palec nahoru.
Projekt chválím a palec nahoru.
Re: Semafór s dvomi stavmi
No to je pravda millis sa nuluje raz za 50 dní 

Ďakujem za pomoc posjirka, Diego, Xeram a barado 

- westhuserlt
- Príspevky: 20
- Registrovaný: Štv 25. Dec 2014 18:17:17
Re: Semafór s dvomi stavmi
Ahoj, nakonec sem vzal tento příklad, a zapojil ho podle tohoto schématu, s použitím A-Nano.
http://img24.cz/images/28113185579979066280.jpg
Je to vše v pořádku? Tlačítko na poruchový stav sem nezapojil, neexsituje. Bude to fungovat?
http://img24.cz/images/28113185579979066280.jpg
Je to vše v pořádku? Tlačítko na poruchový stav sem nezapojil, neexsituje. Bude to fungovat?
Re: Semafór s dvomi stavmi
Áno, bude to fungovať.
PS: delay() vs. millis()
V tomto prípade je použitie delay() podľa mňa určite namieste.
Delay funkcia tiež využíva v príncípe to isté čo millis. Jednoducho ide o cyklus, ktorý využíva počítadlo pre mikrosekundy odvodené od toho istého prerušenia ako počítadlo pre millis. Nejde o zastavenie procesora, len o cyklus. To isté je funkcia loop. Ak teda ide len o zotrvanie v nejakom stave, keď nie je nič iné na práci použitie delay je veľmi efektívne a jednoduché.
V otázke nulovania počítadla pre millis:
Millis nie je funkcia určená práve pre "timekeeping". Vo väčšine prípadov sa využije na zistenie rozdielu časov a nato je postačujúca. Nevadí ani to, že sa nuluje, rozdiel bude v poriadku, teda ak časový interval nepresiahne tých cca 50 dní. Taký prípad by som ale určite už neriešil použitím millis.
@martinius96
Neber to v zlom ale trochu lepšie štruktúrovaný kód by určite prispel k jeho čitateľnosti.
PS: delay() vs. millis()
V tomto prípade je použitie delay() podľa mňa určite namieste.
Delay funkcia tiež využíva v príncípe to isté čo millis. Jednoducho ide o cyklus, ktorý využíva počítadlo pre mikrosekundy odvodené od toho istého prerušenia ako počítadlo pre millis. Nejde o zastavenie procesora, len o cyklus. To isté je funkcia loop. Ak teda ide len o zotrvanie v nejakom stave, keď nie je nič iné na práci použitie delay je veľmi efektívne a jednoduché.
V otázke nulovania počítadla pre millis:
Millis nie je funkcia určená práve pre "timekeeping". Vo väčšine prípadov sa využije na zistenie rozdielu časov a nato je postačujúca. Nevadí ani to, že sa nuluje, rozdiel bude v poriadku, teda ak časový interval nepresiahne tých cca 50 dní. Taký prípad by som ale určite už neriešil použitím millis.
@martinius96
Neber to v zlom ale trochu lepšie štruktúrovaný kód by určite prispel k jeho čitateľnosti.
Re: Semafór s dvomi stavmi
@martinius96 ešte by dobre padlo spraviť k tomu zelenú vlnu aspoň pre 10 semafórov 
To len srandujem samozrejme

To len srandujem samozrejme

Ďakujem za pomoc posjirka, Diego, Xeram a barado 

- westhuserlt
- Príspevky: 20
- Registrovaný: Štv 25. Dec 2014 18:17:17
Re: Semafór s dvomi stavmi
Trochu odbočím... existuje nějaká redukce na propojení A-Nano a displeje z Nokie X3 ?
Re: Semafor Ceta / Chodci
Člen martinius96 vymazal pôvodný semafor s funkciou delay, tak tu prihodím pre "katov" semafor s millis
V setupe som nechal dellay ako príklad.
Či pretečie millis po 50 dňoch aj ak je pripojený k Arduinu RTC to neviem
int Chodec = 7;
int Auto_Cervena = 2;
int Auto_Oranzova = 3;
int Auto_Zelena = 6;
int Chodec_Cervena = 9;
int Chodec_Zelena = 11;
long unsigned time_1 = 0;
long unsigned time_2 = 0;
long unsigned time_3 = 0;
long unsigned time_4 = 0;
long unsigned time_5 = 0;
float cas_1 = 3000;
float cas_2 = 6000;
float cas_3 = 16000;
float cas_4 = 19000;
float cas_5 = 22000;
void setup() {
pinMode (Auto_Cervena, OUTPUT);
pinMode (Auto_Oranzova, OUTPUT);
pinMode (Auto_Zelena, OUTPUT);
pinMode (Chodec_Cervena, OUTPUT);
pinMode (Chodec_Zelena, OUTPUT);
pinMode(Chodec,INPUT_PULLUP);
digitalWrite (Chodec_Cervena, 1);
digitalWrite (Auto_Cervena, 1);
delay (5000);
digitalWrite (Auto_Oranzova, 1);
delay (3000);
digitalWrite (Auto_Cervena, 0);
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Zelena, 1);
}
void loop() {
if(digitalRead(Chodec) == LOW) {
time_1 = millis();
time_2 = millis();
time_3 = millis();
time_4 = millis();
time_5 = millis();
digitalWrite (Auto_Zelena, 0);
digitalWrite (Auto_Oranzova, 1);
}
if(millis() > (time_1 + cas_1) && time_1) {
time_1 = 0;
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Cervena, 1);
}
if(millis() > (time_2 + cas_2) && time_2) {
time_2 = 0;
digitalWrite (Chodec_Cervena, 0);
digitalWrite (Chodec_Zelena, 1);
}
if(millis() > (time_3 + cas_3) && time_3) {
time_3 = 0;
digitalWrite (Chodec_Cervena, 1);
digitalWrite (Chodec_Zelena, 0);
}
if(millis() > (time_4 + cas_4) && time_4) {
time_4 = 0;
digitalWrite (Auto_Oranzova, 1);
}
if(millis() > (time_5 + cas_5) && time_5) {
time_5 = 0;
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Cervena, 0);
digitalWrite (Auto_Zelena, 1);
}
}

V setupe som nechal dellay ako príklad.
Či pretečie millis po 50 dňoch aj ak je pripojený k Arduinu RTC to neviem

int Chodec = 7;
int Auto_Cervena = 2;
int Auto_Oranzova = 3;
int Auto_Zelena = 6;
int Chodec_Cervena = 9;
int Chodec_Zelena = 11;
long unsigned time_1 = 0;
long unsigned time_2 = 0;
long unsigned time_3 = 0;
long unsigned time_4 = 0;
long unsigned time_5 = 0;
float cas_1 = 3000;
float cas_2 = 6000;
float cas_3 = 16000;
float cas_4 = 19000;
float cas_5 = 22000;
void setup() {
pinMode (Auto_Cervena, OUTPUT);
pinMode (Auto_Oranzova, OUTPUT);
pinMode (Auto_Zelena, OUTPUT);
pinMode (Chodec_Cervena, OUTPUT);
pinMode (Chodec_Zelena, OUTPUT);
pinMode(Chodec,INPUT_PULLUP);
digitalWrite (Chodec_Cervena, 1);
digitalWrite (Auto_Cervena, 1);
delay (5000);
digitalWrite (Auto_Oranzova, 1);
delay (3000);
digitalWrite (Auto_Cervena, 0);
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Zelena, 1);
}
void loop() {
if(digitalRead(Chodec) == LOW) {
time_1 = millis();
time_2 = millis();
time_3 = millis();
time_4 = millis();
time_5 = millis();
digitalWrite (Auto_Zelena, 0);
digitalWrite (Auto_Oranzova, 1);
}
if(millis() > (time_1 + cas_1) && time_1) {
time_1 = 0;
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Cervena, 1);
}
if(millis() > (time_2 + cas_2) && time_2) {
time_2 = 0;
digitalWrite (Chodec_Cervena, 0);
digitalWrite (Chodec_Zelena, 1);
}
if(millis() > (time_3 + cas_3) && time_3) {
time_3 = 0;
digitalWrite (Chodec_Cervena, 1);
digitalWrite (Chodec_Zelena, 0);
}
if(millis() > (time_4 + cas_4) && time_4) {
time_4 = 0;
digitalWrite (Auto_Oranzova, 1);
}
if(millis() > (time_5 + cas_5) && time_5) {
time_5 = 0;
digitalWrite (Auto_Oranzova, 0);
digitalWrite (Auto_Cervena, 0);
digitalWrite (Auto_Zelena, 1);
}
}
Ďakujem za pomoc posjirka, Diego, Xeram a barado 

Príspevkov: 12
• Stránka 1 z 1