Mosc
February 12, 2012, 1:11pm
1
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:
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);
}
ciao
qui trovi come far lampeggiare un led col millis, inserici un read del pin pulsante e il gioco è fatto
ciao
Mosc
February 12, 2012, 2:27pm
3
pablos:
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
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:
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);
}