problema monitor seriale

Buongiorno a tutti!

Sono Lorenzo, sono un principiante e ho un problema con il monitor seriale :frowning:

Ho inserito questi codici che comprendono:

-un timer (tramite la libreria swRTC)

-un servomotore, da azionare ad un orario stabilito

-un pulsante in modo tale da azionare il servomotore anche fuori dall’orario stabilito

-un Buzzer passivo per suonare ad un orario preciso (prima dell’azionamneto del servomotore)

Il mio grosso problema è che funziona, ma dal momento in cu il buzzer suona (ad esempio alle 21.55.00) nel monitor seriale i secondi successivi vengono raddoppiati, non seguendo più il conteggio normale dell’orario. Allego foto nel post

NB: i codici del timer li ho trovati in vostri precedenti post e li ho un po’ modificati , mi scuso in anticipo per il disordine

#include <pitches.h>
#include <swRTC.h>
#include <Servo.h>
Servo myservo;
swRTC rtc; //create a new istance of the lib

int buzzer = 8;
byte minuti;
byte ora;
byte secondi;
int button = 7;


void setup() {
 Serial.begin(9600); //choose the serial speed here
 rtc.stopRTC(); //stop the RTC
 rtc.setTime(21,59,35); //set the time here
 rtc.setDate(16,9,2013); //set the date here
 rtc.startRTC(); //start the RTC
myservo.attach(9);  // attaches the servo on pin 9 to the servo object
pinMode(button, INPUT); 
pinMode(buzzer,OUTPUT);
}

void loop(){
 secondi = rtc.getSeconds();
 minuti = rtc.getMinutes();
 ora = rtc.getHours();
 
 Serial.print(F("Ora attuale     "));
 Serial.print(ora);
 Serial.print(F(" : "));
 Serial.print(minuti);
 Serial.print(F(" : "));
 Serial.println(secondi);
 delay(1000);

if(ora == 21 && minuti == 59 && secondi == 55){
tone(buzzer,1000,200);  
          
}
 
 if(ora == 22 && minuti == 00 && secondi == 00){   // qui imposto l'ora dell'attivazione del servo
 myservo.write(90);                  // QUI IMPOSTO I GRADI DEL SERVO
 delay(1000);                        // ritardo imposto
 myservo.write(180);              
 delay(1000);
 myservo.write(90);

 }
 
 if(digitalRead(button)==HIGH) {
 myservo.write(90);                 
            

  }
 if(digitalRead(button)==LOW) {
 myservo.write(180);                  
              

  }
}

Arduino Uno ? Ci sono solo 3 timer. Uno lo usa la tone(), uno la delay() e millis() e uno il servo. Se usi la swRTC presumo quella sfrutta un timer e visto il risultato presumo sfrutta lo stesso timer della tone()

https://forum.arduino.cc/index.php?topic=73496.0 Come scrive Leo della sua libreria: "La libreria usa un interrupt basato sull'overflow del contatore incrementato dal timer 2" Ovvero lo stesso timer della tone()

Qui info sui timer: https://arduino-info.wikispaces.com/Timers-Arduino

nid69ita: Arduino Uno ? Ci sono solo 3 timer. Uno lo usa la tone(), uno la delay() e millis() e uno il servo. Se usi la swRTC presumo quella sfrutta un timer e visto il risultato presumo sfrutta lo stesso timer della tone()

https://forum.arduino.cc/index.php?topic=73496.0 Come scrive Leo della sua libreria: "La libreria usa un interrupt basato sull'overflow del contatore incrementato dal timer 2" Ovvero lo stesso timer della tone()

Qui info sui timer: https://arduino-info.wikispaces.com/Timers-Arduino

Ciao Nid, ti ringrazio un sacco per queste informazioni a me ignote!

Quindi per aggirare questo problema ho provato ora a mettere un buzzer attivo con il codice in HIGH ad un orario (21:59:55) e LOW all'interno della codinzione che fa scattare il servo (22:00:00). Quindi in quei 5 secondi il buzzer suona e poi scatta il servo, non incasinandomi il timer:

if(ora == 21 && minuti == 59 && secondi == 55){
digitalWrite(buzzer,HIGH);
}

if(ora == 22 && minuti == 00 && secondi == 00){   // qui imposto l'ora dell'attivazione del servo
digitalWrite(buzzer,LOW);
myservo.write(90);                  // QUI IMPOSTO I GRADI DEL SERVO
delay(1000);                        // ritardo imposto
myservo.write(180);              
delay(1000);
myservo.write(90);
}

[u]Mi pare[/u] di aver visto in rete una libreria per avere una Tone() senza l'uso di timer.

nid69ita: [u]Mi pare[/u] di aver visto in rete una libreria per avere una Tone() senza l'uso di timer.

Hai perfettamente ragione, ho cercato e ho subito trovato una discussione a riguardo:

https://forum.arduino.cc/index.php?topic=235774.0

Ho inserito subito la libreria (con un motievetto ancora più bello :D)

ti ringrazio, alla prossima!!!!