Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
sfat achizitie telefon pana in 20...

Stoc Smart CAM TV

Ce corzi de chitara sa cumpar?

Galaxy A54 compass defect?
 Cum conectez un switch WIFI la 60...

Cumparare AC Gree [Buget maxim 30...

Telekom

Ce e aratarea asta ?
 Probleme timonerie schimbator sau...

Numar strada gresit in contractul...

Centrala Ariston Cares Premium 24...

La multi ani @Klasse!
 La multi ani @shmecherul!

pareri ipad 6-2018- flip

Cum au aparut supermarketurile in...

Campanii mincinoase Carrefour
 

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