Go Down

Topic: Aiuto conversione delay -> millis (Read 320 times) previous topic - next topic

Mosc

Salve a tutti, sto facendo dei piccoli circuitini per capire Arduino.

Ho fatto un circuito in cui alla pressione di un pulsante due led incominciano a lampeggiare e quando lo premo nuovamente si fermano. Questo "teoricamente" perchè ho usato delay, e giustamente se premo il pulsante mentre il programma è in delay non melo riconosce...
Qualcuno mi potrebbe spiegare come potrei convertire le due funzioni delay con millis?
Ho fatto delle prove ma non funziona...


Ecco lo Sketch:

Code: [Select]
int led1 = 11;
int led2 = 10;
int puls = 12;
int newstato = 0;
int vecchiostato = 0;
int statoled;


void setup() {
  pinMode( led1, OUTPUT);
  pinMode( led2, OUTPUT);
  pinMode( puls, INPUT);
  Serial.begin(9600);
 
  digitalWrite( led1, LOW);
  digitalWrite( led2, LOW);
}

void loop() {
 
  newstato = digitalRead( puls );
 
  if ( newstato == 1 && vecchiostato == 0)
  {
    statoled = 1 - statoled;
  }
 
  vecchiostato = newstato;
 
 
  if ( statoled == 1)
  {
   
    digitalWrite( led2, HIGH);
    digitalWrite( led1, LOW);
    delay(1000);
   
    digitalWrite( led1, HIGH);
    digitalWrite( led2, LOW);
    delay(1000);
  }
 

  Serial.print( newstato );
  Serial.print("      ");
  Serial.print( vecchiostato );
  Serial.print("      ");
  Serial.println( statoled );
 
  delay(50);
}

pablos

#1
Feb 12, 2012, 02:57 pm Last Edit: Feb 12, 2012, 02:59 pm by pablos Reason: 1
ciao
http://arduino.cc/en/Tutorial/BlinkWithoutDelay

qui trovi come far lampeggiare un led col millis, inserici un read del pin pulsante e il gioco è fatto

ciao
no comment

Mosc


ciao
http://arduino.cc/en/Tutorial/BlinkWithoutDelay

qui trovi come far lampeggiare un led col millis, inserici un read del pin pulsante e il gioco è fatto

ciao


Si lo avevo anche visto...
Alla fine l'ho "accroccato" un pò così, ma non mi piace molto  :smiley-roll:

Code: [Select]
void lampeggio()
{

 
  if(time - tempoled1 > interval) {
    tempoled1 = time;   


    if (statoled1 == LOW)
    {
      statoled1 = HIGH;
      statoled2 = LOW;
    }
      else
    {
      statoled1 = LOW;
      statoled2 = HIGH;
    }


    digitalWrite(led1, statoled1);
    digitalWrite(led2, statoled2);
  }

}


Questo lo sketch completo:

Code: [Select]
int led1 = 11;
int led2 = 10;
int puls = 12;
int newstato = 0;
int vecchiostato = 0;
int statoled;
unsigned long tempoled1 = 0;
unsigned long tempoled2 = 0;
int interval = 1000;
unsigned long time;
int statoled1 = LOW;
int statoled2 = HIGH;


void setup() {
  pinMode( led1, OUTPUT);
  pinMode( led2, OUTPUT);
  pinMode( puls, INPUT);
  Serial.begin(9600);
 
  digitalWrite( led1, LOW);
  digitalWrite( led2, LOW);
}

void loop() {
 
  newstato = digitalRead( puls );
 
  if ( newstato == 1 && vecchiostato == 0)
  {
    statoled = 1 - statoled;
  }
 
  vecchiostato = newstato;
 
  time = millis();
 
  if ( statoled == 1)
  {
      lampeggio();
  }
 
  Serial.print( newstato );
  Serial.print("      ");
  Serial.print( vecchiostato );
  Serial.print("      ");
  Serial.println( statoled );
 
  delay(50);
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy