Go Down

Topic: Aiuto conversione delay -> millis (Read 299 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