Non é un buon stile di programmazioone di "parcheggiare" il controller in un loop infinito e tirarlo fuori con un reset.
Puoi nello stesso modo mettere il cosdice che devi eseguire in una if nel loop() che controlla se hai schiacciato un tasto. Il vantaggio é ch l' arduino risponde molto piú velocemente al pulsante che il Reset.
Non ho capito bene quello che intendi, ancora sono molto scarso !
Comunque ti posto il sorgente, e magari mi spieghi cosa devo modificare ...
const int buttonPin = 6; // Pin del pulsante
int buttonState = 0; // Variabile pulsante
void setup() {
pinMode(8, OUTPUT); // LED
pinMode(9, OUTPUT); // LED
pinMode(10, OUTPUT); // LED
pinMode(buttonPin, INPUT); // Pulsante
}
void loop(){
buttonState = digitalRead(buttonPin); // Legge il valore del pulsante
if (buttonState == LOW) { // Se il pulsante da valore basso, non premuto
digitalWrite(8, LOW); // LED Spento
digitalWrite(9, LOW); // LED Spento
digitalWrite(10, LOW); // LED Spento
}
else { // Se il pulsante da valore alto, premuto
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(10, HIGH); // Accendi LED
delay(30000); // LED acceso per 30 secondi
digitalWrite(10,LOW); // Si spegne il LED
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(9, HIGH); // Accendi LED
delay(29000); // LED acceso per 29 secondi
digitalWrite(9, LOW); // Si spegne il LED
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(8, HIGH); // Accendi LED
delay(1000); // LED acceso per 1 secondo
while(1){}
}
}
Funziona alla perfezione, solo che se vedi alla fine ho dovuto mettere il comando while per bloccare il loop ...
Ora il tasto reset mi serviva semplicemente per far ripartire il loop quando mi serviva !
Però non ho capito cosa intendi dire tu nella risposta sopra ...
Il led 8 resta acceso per l# infinito non per 1 secondo.
al posto di
"while(1){}"
metti una variabile a 1 per esempio
"restartstatus = 0;"
poi dicciamo che hai messo un pulsante sul piedino 2 che mette l'entrata a H quando viene premuto.
come prima funzione nel
"loop(){"
controlli se il pulsante di restart é premuto e metti la variabile restartstatus su 1.
poi metti if(restartstatus ==1)
{
qua metti tutto il codice del Loop()
}
È fatta.
const int buttonPin = 6; // Pin del pulsante
const int restart =2; // pulsante per fare ripartire il codice
int buttonState = 0; // Variabile pulsante
int restartstatus =1;
void setup() {
pinMode(8, OUTPUT); // LED
pinMode(9, OUTPUT); // LED
pinMode(10, OUTPUT); // LED
pinMode(buttonPin, INPUT); // Pulsante
pinMode(restart, INPUT); // Pulsante
}
void loop(){
if (digitalRead(restart)==1)
{
restartstatus =1;
}
buttonState = digitalRead(buttonPin); // Legge il valore del pulsante
if (restartstatus==1)
{
if (buttonState == LOW) { // Se il pulsante da valore basso, non premuto
digitalWrite(8, LOW); // LED Spento
digitalWrite(9, LOW); // LED Spento
digitalWrite(10, LOW); // LED Spento
}
else { // Se il pulsante da valore alto, premuto
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(10, HIGH); // Accendi LED
delay(30000); // LED acceso per 30 secondi
digitalWrite(10,LOW); // Si spegne il LED
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(9, HIGH); // Accendi LED
delay(29000); // LED acceso per 29 secondi
digitalWrite(9, LOW); // Si spegne il LED
noTone(11);
tone(7, 400, 1000); // Indicare pin buzer (7), tonalità (400), tempo (1000)
digitalWrite(8, HIGH); // Accendi LED
delay(1000); // LED acceso per 1 secondo
restartstatus = 0;
}
}
}
if (buttonState == LOW) { // Se il pulsante da valore basso, non premuto
percui deduco a pulsante non premuto livello LOW percui non puó essere usato la resistenza pullup interna. Oltre questo il codice non la attiva.
Ciao Uwe
Hai ragione tu. Si parlava di pulsante di reset ed io davo per scontato che lo collegasse direttamente al pin di reset, non avevo neanche guardato con attenzione il codice. Invece no, usa un pin generico per cui è sicuramente necessaria.