Arduino schéma - arduino.sk

Zmazať

Kompletné projekty s návodom a zdrojovým kódom
Príspevky: 35
Registrovaný: Uto 23. Dec 2014 2:15:50

Zmazať

Poslaťod martinius96 » Str 24. Dec 2014 23:45:46

,,,
Naposledy upravil martinius96 dňa Str 21. Jan 2015 18:20:47, celkovo upravené 1

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Semafór s dvomi stavmi

Poslaťod kosice4 » Pia 26. Dec 2014 0:25:21

@ 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é :D
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 35
Registrovaný: Uto 23. Dec 2014 2:15:50

Re: Semafór s dvomi stavmi

Poslaťod martinius96 » Pia 26. Dec 2014 0:40:18

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 ;)

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Semafór s dvomi stavmi

Poslaťod kosice4 » Pia 26. Dec 2014 0:53:19

@ martinius96 pohoda, len píš hotové projekty, to sa vždy zíde :)
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Semafór s dvomi stavmi

Poslaťod posjirka » Pia 26. Dec 2014 15:57:42

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.

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Semafór s dvomi stavmi

Poslaťod kosice4 » Sob 27. Dec 2014 11:40:27

No to je pravda millis sa nuluje raz za 50 dní :)
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Semafór s dvomi stavmi

Poslaťod posjirka » Ned 28. Dec 2014 18:45:04

nikdy nevíš jak dlouho to má běžet vkuse :-)

Príspevky: 20
Registrovaný: Štv 25. Dec 2014 18:17:17

Re: Semafór s dvomi stavmi

Poslaťod westhuserlt » Str 31. Dec 2014 18:09:47

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?

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Semafór s dvomi stavmi

Poslaťod budvar10 » Pia 02. Jan 2015 9:36:56

Á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.

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Semafór s dvomi stavmi

Poslaťod kosice4 » Pia 02. Jan 2015 20:13:37

@martinius96 ešte by dobre padlo spraviť k tomu zelenú vlnu aspoň pre 10 semafórov :D
To len srandujem samozrejme :)
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 20
Registrovaný: Štv 25. Dec 2014 18:17:17

Re: Semafór s dvomi stavmi

Poslaťod westhuserlt » Sob 10. Jan 2015 10:04:26

Trochu odbočím... existuje nějaká redukce na propojení A-Nano a displeje z Nokie X3 ?

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Semafor Ceta / Chodci

Poslaťod kosice4 » Pia 21. Aug 2015 1:11:56

Člen martinius96 vymazal pôvodný semafor s funkciou delay, tak tu prihodím pre "katov" semafor s millis :lol:
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 :)

Späť na Hotové projekty