Advertisement
TolentinoCotesta

Inseguitore

May 4th, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1.   #include <Servo.h>
  2.   Servo servo;
  3.   #define servoPin 3
  4.   #define photoPin A0
  5.   #define toll 10
  6.   #define sampl 1
  7.   long pos = 90;
  8.   long pVal;
  9.   int angle;  
  10.  
  11. void setup()
  12. {
  13.   servo.attach(servoPin);
  14.   servo.write(90);
  15.   pinMode(photoPin, INPUT);
  16.   Serial.begin(9600);
  17. }
  18.  
  19.  
  20. // Versione modificata della funzione built-in di arduino
  21. // In questo modo se il valore eccede i limiti min e max non vado fuori scala
  22. long myMap(long x, long in_min, long in_max, long out_min, long out_max){  
  23.   if (x > in_max)
  24.     return out_max;
  25.   if (x < in_min)
  26.     return out_min;
  27.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  28. }
  29.  
  30. void loop()
  31. {
  32.  
  33.   for(int i=0; i<10; i++)
  34.   {
  35.     pVal += analogRead(A0);
  36.     delay(sampl);
  37.   }
  38.   pVal /= 10;
  39.  
  40.   // mappiamo il valore letto su A0 in gradi cosi da avere un raffronto diretto con il servo
  41.   // Il valore restituito è quindi indicativo dell'angolo incidente della luce
  42.   // non è strettamente necessario, ma fa più figo :D puoia anche giocare sui valori per "tarare" il sistema.
  43.   // Con la fonte luminosa parallela ai sensori immagino che avrai qualche problema nel determinare la posizione
  44.   angle = myMap(pVal, 0, 1023, 0, 180);
  45.  
  46.  
  47.   if(angle > 85)
  48.   {    
  49.      pos--;    
  50.   }
  51.  
  52.   if(angle < 95)
  53.   {
  54.     pos++;
  55.   }
  56.  
  57.  
  58.  
  59.   // una riga sola al posto del doppio if (che rimane cmq nella funzione)
  60.   // il programma ne guadagna in leggibilità
  61.   pos = myMap(pos, 0, 180, 0, 180);
  62.  
  63.   servo.write(pos);
  64.  
  65.   Serial.print("pVal: ");
  66.   Serial.println(pVal);
  67.  
  68.   Serial.print("Angle: ");
  69.   Serial.println(angle);
  70.  
  71.   Serial.print("pos: ");
  72.   Serial.println(pos);
  73.  
  74.   // solo per visualizzare sulla seriale in modo meno caotico
  75.   delay(500);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement