Il programma funziona ma la velocità del ciclo del programma è molto lento.
#include <Servo.h>
#include <Narcoleptic.h>
/*
Libreria che permette di mandare in standby il microcontrollore
nei momenti di inattività (delay), risparmiando parecchia energia.
Si può eventualmente anche non utilizzare (in tal caso va sostituita
l'ultima istruzione Narcoleptic.delay(15) con delay(15).
*/
Servo myservo;
int Value;
int Center=90;
/*
La variabile Center rappresenta il valore di centratatura
del servo a rotazione continua. Nel mio caso è 105, di solito è 90.
Con questo valore il servo deve restare fermo.
*/
void setup() {
Serial.begin();
myservo.attach(9); // Collega il servo al PIN 9
}
void loop() {
int sensorValue = analogRead(A0); // Legge il valore del sensore LDR di sinistra
int sensorValue2 = analogRead(A1); // Legge il valore del sensore LDR di destra
Value=(sensorValue-sensorValue2)/10;
/*
Calcola la differenza tra i due sensori e li divide per 10,
in questo modo una differenza di 10 equivale a 1, una differenza
di 53 equivale a 5 e cosi via
*/
if (Value==0) myservo.detach(); else myservo.attach(9);
/*
Se la differenza è uguale a 0 scollega il servo altrimenti lo
collega (serve per risparmiare energia)
*/
if (Value>10) Value=100;
if (Value<-10) Value=-100 ;
/*
Limita la differenza massima tra -10 e + 10
(per evitare una velocità eccessiva)
*/
Serial.println(Value); // Debug - Visualizza il valore sulla seriale
myservo.write(Center+Value);
/*
Se il valore di Value è positivo, sposta il Servo a DX, se è negativo a SX.
La velocità è direttamente proporzionale al valore assoluto di Value
*/
delay(15);
/*
Invece che usare un semplice delay, usiamo questo, così risparmiamo energia.
Si può eventualmente sostituire con delay(15).
*/
}