Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Scurgere catre hazna

De la 24V la 5V DC?

Deducere TVA

Intalnire cu un tip de pe tinder ...
 Open WRT nu sincronizeaza ceasul ...

salariu plafonat

sistem actionare electrica pentru...

Sfaturi achizitie auto ~10k€
 ICC/ICM soft monitorizare si cont...

Recomandare ipad

Ce fel de disc pentru acest circu...

Windows 11 24H2 pe release?
 Intrebare motor auto

Opel Astra K

Romania - tara formelor fara fond?

Probleme sistem audio mașina
 

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

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

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