Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...

Dupa renuntarea la aparat dentar

pelerinaj in Balcik
 

Arduino-blink led fara delay()

- - - - -
  • Please log in to reply
6 replies to this topic

#1
dan3s2020

dan3s2020

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 30.01.2014
Ce este gresit?

int led1=8;
int led2=9;
int led3=12;
int led4=13;
void setup() {
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(9600);
}
int dif1=0;
int st1=LOW;
int st2=LOW;
int st3=LOW;
int st4=LOW;
unsigned long time;
void loop() {
time=millis();
if((time-dif1)>=500){
    if(st1==LOW){

    }else{st1=LOW;}
  digitalWrite(led1,st1);

}
if((time-dif1)>=(1000)){
    if(st2==LOW){
   st2=HIGH;
    }else{st2=LOW;}
  digitalWrite(led2,st2);

  }
if((time-dif1)>=(1500)){
    if(st3==LOW){
   st3=HIGH;
    }else{st3=LOW;}
  digitalWrite(led3,st3);

  }
if((time-dif1)>=2000){


    if(st4==LOW){
   st4=HIGH;
    }else{st4=LOW;}
  digitalWrite(led4,st4);

  }
  dif1=time;
}

voiam ca ledurile sa se aprinda unu dupa altu la interval de 500ms si apoi sa se stinga la fel. Dar nu se intampla mai nimic asemanator,ma poate ajuta cineva?

#2
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004
1. Incepe cu un singur LED.
2. Neavand vreun delay pe acolo, s-ar putea ca diferenta ta sa nu ajunga asa de sus (la 500). "Miros" eu ca dif1=time sau time=millis() tre' pus in vreun IF... Si ca mai tre' o citire temporara de millis...
3. Incepe cu pasul 1 Posted Image

Edited by dexterash, 19 April 2016 - 20:27.


#3
dan3s2020

dan3s2020

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 30.01.2014

View Postdexterash, on 19 aprilie 2016 - 20:25, said:

1. Incepe cu un singur LED.
2. Neavand vreun delay pe acolo, s-ar putea ca diferenta ta sa nu ajunga asa de sus (la 500). "Miros" eu ca dif1=time sau time=millis() tre' pus in vreun IF... Si ca mai tre' o citire temporara de millis...
3. Incepe cu pasul 1 Posted Image

da ai dreptate,am copiat prost,pusese dif1=time in ultimu IF.am facut cu un led insa...

eu intelegeam ca time ajunge de la 0ms la 500ms fara sa execute nimic apoi sa faca prinum IF ,se aprinde primul led,apoi ajunge la 1s si se aprinde al doilea,ajunge la 1,5s se aprinde al 3lea ,la 2 s al patrulea si Dif1=2sec. Apoi o ia de la capat si incearca 2000-2000=500 (F) si ajunge la 2500-2000=500 (A) si incepe si stinge ledurile pana la al 4lea si tot asa... poate am inteles gresit functia millis().. Imi poti explica ce?

#4
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004
millis doar citeste "milisecundele" curente (nu retin exact de cand, am impresia ca de la pornire/powerup).

tu ar trebui sa ai ceva de genul acesta (in mare):

last_millis=millis();
loop (){
  current_millis=millis();
  if ((current_millis-last_millis)>500){
	 last_millis=current_millis;
	 _schimba_stare_led;
  }
}



Pentru 2 leduri as face asa:

last1_millis=millis();
last2_millis=last1_millis;

loop (){
  current_millis=millis();
  if ((current_millis-last1_millis)>500){
	 last1_millis=current_millis;
	 _schimba_stare_led_1;
  }

if ((current_millis-last2_millis)>1000){
	 last2_millis=current_millis;
	 _schimba_stare_led_2;
  }
}


Posibil sa ma bata logica, dar sper ca nu prea tare. Posted Image

Edited by dexterash, 19 April 2016 - 20:47.


#5
dan3s2020

dan3s2020

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 30.01.2014

View Postdexterash, on 19 aprilie 2016 - 20:46, said:

millis doar citeste "milisecundele" curente (nu retin exact de cand, am impresia ca de la pornire/powerup).

tu ar trebui sa ai ceva de genul acesta (in mare):

last_millis=millis();
loop (){
current_millis=millis();
if ((current_millis-last_millis)>500){
	 last_millis=current_millis;
	 _schimba_stare_led;
}
}



Pentru 2 leduri as face asa:

last1_millis=millis();
last2_millis=last1_millis;

loop (){
current_millis=millis();
if ((current_millis-last1_millis)>500){
	 last1_millis=current_millis;
	 _schimba_stare_led_1;
}

if ((current_millis-last2_millis)>1000){
	 last2_millis=current_millis;
	 _schimba_stare_led_2;
}
}


Posibil sa ma bata logica, dar sper ca nu prea tare. Posted Image

Se aprinde al doilea led la 1s si se stinge,celalalt nimic.

#6
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004
Mai verifica un pic codul scris, mai pune un led etc... Si vezi ca in prima bucata de cod data de tine ai o oroare:
  if(st1==LOW){
	  //aici trebuie o comanda care cam lipseste...//
	 }else{st1=LOW;}
  digitalWrite(led1,st1);



#7
dan3s2020

dan3s2020

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 30.01.2014
ba nu.merge, nu faceam eu nimic aici:
"if((time-dif1)>=500){
    if(st1==LOW){
    }else{st1=LOW;}
  digitalWrite(led1,st1);
}"

Multumesc

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate