Pages: [1]   Go Down
Author Topic: Aiuto conversione delay -> millis  (Read 290 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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);
}
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: February 12, 2012, 08:59:08 am by pablos » Logged

no comment

Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
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);
}
Logged

Pages: [1]   Go Up
Jump to: