Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Servo.h>
- Servo servo;
- #define servoPin 3
- #define photoPin A0
- #define toll 10
- #define sampl 1
- long pos = 90;
- long pVal;
- int angle;
- void setup()
- {
- servo.attach(servoPin);
- servo.write(90);
- pinMode(photoPin, INPUT);
- Serial.begin(9600);
- }
- // Versione modificata della funzione built-in di arduino
- // In questo modo se il valore eccede i limiti min e max non vado fuori scala
- long myMap(long x, long in_min, long in_max, long out_min, long out_max){
- if (x > in_max)
- return out_max;
- if (x < in_min)
- return out_min;
- return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
- }
- void loop()
- {
- for(int i=0; i<10; i++)
- {
- pVal += analogRead(A0);
- delay(sampl);
- }
- pVal /= 10;
- // mappiamo il valore letto su A0 in gradi cosi da avere un raffronto diretto con il servo
- // Il valore restituito è quindi indicativo dell'angolo incidente della luce
- // non è strettamente necessario, ma fa più figo :D puoia anche giocare sui valori per "tarare" il sistema.
- // Con la fonte luminosa parallela ai sensori immagino che avrai qualche problema nel determinare la posizione
- angle = myMap(pVal, 0, 1023, 0, 180);
- if(angle > 85)
- {
- pos--;
- }
- if(angle < 95)
- {
- pos++;
- }
- // una riga sola al posto del doppio if (che rimane cmq nella funzione)
- // il programma ne guadagna in leggibilità
- pos = myMap(pos, 0, 180, 0, 180);
- servo.write(pos);
- Serial.print("pVal: ");
- Serial.println(pVal);
- Serial.print("Angle: ");
- Serial.println(angle);
- Serial.print("pos: ");
- Serial.println(pos);
- // solo per visualizzare sulla seriale in modo meno caotico
- delay(500);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement