Untitled
unknown
plain_text
15 days ago
4.4 kB
9
Indexable
// Liceo Virgilio Marone #include <Servo.h> // includiamo la libreria con i comandi per controllare i servomotori Servo myServo; // create servo object to control a servo // pin sensore #define alimentazioneSensore 12 #define lettura A0 #define BUZZER_PIN 3 // livelloLiquidoue per memorizzare il livello dell'acqua int livelloLiquido = 0; // Limite inferiore e superiore ottenuti in funzione della calibrazione int limiteInferiore = 410; int limiteSuperiore = 450; // Dichiarazione pin a cui connettiamo il LED byte ledRosso = 11; byte ledGiallo = 10; byte ledVerde = 9; int angle = 0; //variabile che indica l'angolazione del servo void setup() { // Impostiamo il pin digitale 12 come OUTPUT pinMode(alimentazioneSensore, OUTPUT); // Impostiamo a LOW il +Vcc del sensore digitalWrite(alimentazioneSensore, LOW); // Impostiamo i pi a cui connettiamo i LED come OUTPUT pinMode(ledRosso, OUTPUT); pinMode(ledGiallo, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); //anche il buzzer myServo.attach(7); // attaches the servo on pin 7 to the servo object angle=0; //angolo che indica la diga chiusa angle = map(angle, 0, 1023, 0, 180); myServo.write(angle); // sets the servo position according to the scaled value // impostiamo la velocità della porta seriale Serial.begin(9600); } void loop() { // rileviamo la lettura del sensore int livello = leggiSensore(); if (livello == 0) { Serial.println("Livello acqua: Vuoto"); Serial.print("Livello acqua: "); Serial.println(livello); Serial.println("--------------------"); noTone(BUZZER_PIN); angle=0; angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myServo.write(angle); digitalWrite(ledRosso, LOW); digitalWrite(ledGiallo, LOW); digitalWrite(ledVerde, LOW); } else if (livello > 0 && livello <= limiteInferiore) { Serial.println("Livello acqua: Basso"); Serial.print("Livello acqua: "); Serial.println(livello); Serial.println("--------------------"); noTone(BUZZER_PIN); angle=0; angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myServo.write(angle); digitalWrite(ledRosso, HIGH); digitalWrite(ledGiallo, LOW); digitalWrite(ledVerde, LOW); } else if (livello > limiteInferiore && livello <= limiteSuperiore) { Serial.println("Livello acqua: Medio"); Serial.print("Livello acqua: "); Serial.println(livello); Serial.println("--------------------"); noTone(BUZZER_PIN); angle=0; angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myServo.write(angle); digitalWrite(ledRosso, LOW); digitalWrite(ledGiallo, HIGH); digitalWrite(ledVerde, LOW); } else if (livello > limiteSuperiore) { Serial.println("Livello acqua: Alto"); Serial.print("Livello acqua: "); Serial.println(livello); Serial.println("--------------------"); tone(BUZZER_PIN, millis()%1000+200); digitalWrite(ledRosso, LOW); digitalWrite(ledGiallo, LOW); digitalWrite(ledVerde, HIGH); angle=90; angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myServo.write(angle); // sets the servo position according to the scaled value delay(100); // waits for the servo to get there } delay(1000); } // Funzione che permette la lettura del livello dell'acqua int leggiSensore() { digitalWrite(alimentazioneSensore, HIGH); // Attiva il sensore - viene fornita alimentazione delay(50); // breve attesa di 50 ms prima di effettuare la lettura livelloLiquido = analogRead(lettura); // Legge il valore e lo si memorizza nella variabile livelloLiquido digitalWrite(alimentazioneSensore, LOW); // Togliamo alimentazione al sensore return livelloLiquido; // invia alla funzione chiamante il valore letto }
Editor is loading...
Leave a Comment