Ciao a tutti, sto cercando di realizzare un circuito semplicissimo così strutturato.... 2 led, 1 deviatore (o pulsante, è uguale). In condizioni normali, quindi pulsante aperto 1 led lampeggia e l'altro sta spento, quando chiudo il pulsante il led che prima lampeggiava diventa acceso fisso e il secondo led idem, si accende fisso ma dopo un piccolo intervallo dal primo. Ho già provato a scrivere il codice senza millis e nessun problema, eccolo qua:
#define LED1 13
#define LED2 12
#define BUTTON 7
int val = 0;
int vecchio_val = 0;
int stato = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
val = digitalRead(BUTTON);
if ((val == HIGH) && (vecchio_val == LOW)){
stato = 1 - stato;
delay(15);
}
vecchio_val = val;
if (stato == 1) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(500);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
delay(500);
}
else {
digitalWrite(LED1, HIGH);
delay(800);
digitalWrite(LED2, HIGH);
}
}
@pablos
Il codice da Te proposto é inacettabie. O usi delay o non lo usi. Non ha senso che usi un delay(1500); combinato con un delay fatto con millis().
Riprova.
Ciao Uwe
Dai su, non si può usare un minimo di sarcasmo in questo forum!!!!!!! L'ho provato adesso, intanto ovviamente (a parte gli scherzi) grazie infinite per la scrittura completa dello sketch e non di "indizi", così posso ragionare realmente sul codice e carpirne il funzionamento... In effetti è raro trovare una risposta completa al primo tentativo, anche se capisco che in effetti gli "indizi" sono stimolanti per la crescita personale di chi chiede l'aiuto... come ti dicevo l'ho appena provato, appena lanciato il led A lampeggia ed il B sta spento, come gli do l'ingresso il led A si fissa e dopo il delay si fissa anche il B. Il fatto è che pare non torni alla situazione iniziale con il rilascio del pulsante!
nytro81:
Raga io vorrei un aiuto, non complicarmi la vita!!!!!!!!!
ma.... sperando di aver "capito bene"
un led che lampeggia e uno spento con un interruttore che sta nella posizione aperta
appena l'interruttore si chiude
il led lampeggiante diventa diventa fisso e dopo un pò di tempo si accende fisso anche l'altro led,
se l'interruttore viene messo nella posizione aperta si riparte da capo un led lampeggia e uno spento,
uwefed:
è quello che ho capito anch io.
la mia proposta:
#define LED1 13
#define LED2 12 #define BUTTON 7
int stato_button = 0; // stato pressione pulsante
unsigned long time1 = millis();
unsigned long time2 = millis();
unsigned int lampeggio1 = 500; // tempo per lampeggio LED 1
unsigned int ritardo2 = 1000; // ritardo accensione LED 2
void loop()
{
if (digitalRead(BUTTON)==1) //Pulsante premuto
{
if ( stato_button == 0 ) // primo ciclo col pulsante premuto
{
stato_button = 1;
time2 = millis(); // memorizza tempo per il ritardo
digitalWrite(LED1, HIGH); // accende LED1
}
if ( stato_button == 1 ) // accende LED2 con ritardo
{
if (millis() - time2 > ritardo2) // controllo se ritardo é giá passato.
{
digitalWrite(LED2, HIGH); // accende LED2
}
}
}
else // pulsante non premuto o rilasciato
{
if ( stato_button == 1 ) // primo ciclo con pulsante rilasciato
{
digitalWrite(LED2, LOW); // spegne LED 2
stato_button = 0;
time1 = millis(); // memorizza tempo per il lampeggio
digitalWrite(LED1, LOW); // lampeggio parte con LED1 spento
}
if (millis() - time1 > lampeggio1) // controllo se tempo lampeggio é passato
{
digitalWrite(LED1, !digitalRead(LED1)); // inverte stato LED1
time1 = millis();
}
}
}
(compila senza errori con IDE0022. Non ho provgato su un Arduino.)
Ciao Uwe