Salve a tutti;
io dovrei controllare la temperatura di un box modulandola ogni 10 secondi, mentre dovrei muovere ogni ora un servo che mi apre una presa d'aria. Il programma che ho pensato di creare è questo, ma essendo tutto in loop, il controllo della temperatura viene effettuato la prima volta, poi il ciclo va avanti e aspetta il delay di un ora del motore prima di effettuare il secondo controllo, dovrei praticamente dividere in 2 blocchi indipendenti le 2 operazioni. Volevo capire quali funzioni dovrei usare.
Ecco il programma:
#include <Servo.h>
Servo myservo; //
const int gradi = 38; // gradi da impostare
const int PINout = 13; // pin di uscita
const int PINin = 0; // pin analogico usato
int pos = 0; // Variabile posizione del servo motore
int pos2 = 180; // Variabile seconda posizione servo motore
int led1 = 13; // Led rosso posizione 0
int led2 = 12; // Led verde posizione 180
int rele = 3; // Contatto relè
void setup() {
Serial.begin (9600);
myservo.attach(9); // attivi il pin digitale 9 collegato al servo motore
pinMode (led1, OUTPUT); //led rosso
pinMode (led2, OUTPUT); //led verde
pinMode (rele, OUTPUT); //OFF RELE
pinMode (PINout, OUTPUT); //resistenza
}
unsigned long STARTINGTIME = 20000; //GESTIONE TIMER
const unsigned long TIMEOUT = 0; //GESTIONE TIMEOUT (2000Ms = 2 Sec)
void loop()
//controllo temperatura
{
int value = analogRead(PINin);
Serial.print(value);
Serial.print(">");
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10;
Serial.print (celsius);
Serial.print ("degrees Celsius, ");
if (celsius < gradi)
{
digitalWrite(PINout, HIGH);
Serial.println("Resistenza spenta");
delay(10000);
}
else (celsius > gradi);
{
digitalWrite(PINout, LOW);
Serial.println("Resistenza accesa");
delay(10000);
}
//controllo servomotore
{
for (pos = 0; pos <= 180; pos += 1) // Servo passa da 0 a 180 incrementando di 1 step ogni valore scritto nella riga delay
{
myservo.write(pos); // il servo torna nella posizione di origine scritta sulla variabile "pos"
delay(5); // velocitàtra uno passo e l'altro
}
if (myservo.attach(9) == 0); //Se il servo motore è in posizione 0
{
digitalWrite(led1, HIGH); // Luce del led rosso si accende
digitalWrite(led2, LOW); // Luce del led verde si spegne
delay(10000); // Tempo di fermo tra una rotazione e l'altra
}
for (pos = 180 ; pos >= 0; pos -= 1) // Servo passa da 180 a 0 incrementando di 1 step ogni valore scritto nella riga delay
myservo.write(pos2); // il servo torna nella posizione di origine scritta sulla variabile "pos2"
delay(5); // velocitàtra uno passo e l'altro
if (myservo.attach(9) == 180); // Se il servo motore è in posizione 180
{
digitalWrite (led2, HIGH); // Luce del led rosso si spegne
digitalWrite(led1, LOW); // luce del led verde si accende
digitalWrite (rele, LOW); // La bobina del relè viene disseccitata, spegnendo il motore
}
{
delay(10000); // Tempo di fermo tra una rotazione e la prossima
}
digitalWrite (rele, HIGH); // Riattivo la bobina del relè e riporto la corrente al motore
myservo.detach(); // disattiva il servo motore
}
}