6 Link: http://aero.piffa.net
16 // Configurazione parametri: variabili GLOBALI
29 int pos = 0; // variable to store the servo position
30 const byte servoPIN =9 ;
31 const byte middle = 90; // Centratura servo
32 const int spausa = 10; // Pausa movimenti servo
33 const byte sx = 10; // Min SX
34 const byte dx = 170; // Maz DX
35 Servo myservo; // Non c'e' bisogno di extern se e' dichiarato in questo scope
38 const byte trigPIN = 11;
39 const byte echoPIN= 12;
40 const byte ledPIN = 13;
43 const int minDistance = 10;
45 ////////////////////////
49 // Abilita i PINs come OUTPUTS e attacca un servo
58 pinMode(servoPIN, OUTPUT);
59 myservo.attach(servoPIN); //la libreria servo deve essere sempre inclusa
61 pinMode(trigPIN, OUTPUT);
62 pinMode(echoPIN, INPUT);
63 pinMode(ledPIN, OUTPUT);
70 digitalWrite(in1,LOW);
71 digitalWrite(in2,HIGH);
72 analogWrite(enA,speedA);
75 void forwardA(byte speedA) {
77 digitalWrite(in1,LOW);
78 digitalWrite(in2,HIGH);
79 analogWrite(enA,speedA);
84 digitalWrite(in2,LOW);
85 digitalWrite(in1,HIGH);
86 analogWrite(enA,speedA);
89 void backwardA(byte speedA) {
91 digitalWrite(in2,LOW);
92 digitalWrite(in1,HIGH);
93 analogWrite(enA,speedA);
98 digitalWrite(enA,LOW);
103 // Avanzamento motore
104 digitalWrite(in3,LOW);
105 digitalWrite(in4,HIGH);
106 analogWrite(enB,speedB);
109 void forwardB(byte speedB) {
110 // Avanzamento motore
111 digitalWrite(in3,LOW);
112 digitalWrite(in4,HIGH);
113 analogWrite(enB,speedB);
118 digitalWrite(in4,LOW);
119 digitalWrite(in3,HIGH);
120 analogWrite(enB,speedB);
123 void backwardB(byte speedB) {
125 digitalWrite(in4,LOW);
126 digitalWrite(in3,HIGH);
127 analogWrite(enB,speedB);
132 digitalWrite(enB,LOW);
138 // Drive ahead: funzione composita
143 // Drive backward: funzione composita
168 myservo.write(pos++);
176 myservo.write(pos--);
183 while (pos > middle) {
184 myservo.write(pos--);
187 while (pos < middle) {
188 myservo.write(pos++);
195 boolean distanceCheck() {
196 // Verifica se la distanza di un oggetto e' minore di minDistance
197 digitalWrite(trigPIN, LOW); // Prepare for ping
198 delayMicroseconds(2); //
199 digitalWrite(trigPIN, HIGH); // Send a ping
200 delayMicroseconds(10); //
201 digitalWrite(trigPIN, LOW); // Set down ping
202 duration = pulseIn(echoPIN, HIGH);
203 //distance = (duration / 2) / 29.1; // Speed is ~300m/s,
204 // so it takes ~29.1 milliseconds for a cm.
205 distance = (duration / 58.2); // Atmegas are not found of divisions
206 // Distance is half of (out + back)
208 Serial.print("Distanza oggetto: ");
209 Serial.println(distance);
211 if (distance < minDistance) { // This is where the LED On/Off happens
219 int distanceMonitor() {
220 // Ritorna la distanza di un oggetto in cm
221 digitalWrite(trigPIN, LOW); // Prepare for ping
222 delayMicroseconds(2); //
223 digitalWrite(trigPIN, HIGH); // Send a ping
224 delayMicroseconds(10); //
225 digitalWrite(trigPIN, LOW); // Set down ping
226 duration = pulseIn(echoPIN, HIGH);
227 //distance = (duration / 2) / 29.1; // Speed is ~300m/s,
228 // so it takes ~29.1 milliseconds for a cm.
229 distance = (duration / 58.2); // Atmegas are not found of divisions
230 // Distance is half of (out + back)