Collaudo robot sandit lg

3
#include <IRremote.h> //***** variabili usate dal ricevitore IR ***** // carica libreria IR - Ken Shirriff http://arcfn.com int RECV_PIN = 10; // Arduino pin D10 collegato a IR OUT IRrecv irrecv (RECV_PIN); // imposta il pin di ricezione dei dati decode_results results; // unsigned long code; // memorizza il codice ricevuto // i codic sono del telecomando marca LG // ai codici ricevuti aggiungere 0x + codice #define UP 0x11 #define KEY_UP 0x9986485A #define DOWN 0x22 #define KEY_DOWN 0x1C6A919C #define LEFT 0x33 #define KEY_SX 0x4EBA0422 #define RIGHT 0x44 #define KEY_DX 0x5EA08104 #define STOP 0x55 // comando stop #define KEY_STOP 0xCA9582FA // codice del tasto STOP //***** variabili usate dal sonar #define ECHO 12 // Arduino pin D12 - SRF04 pin 4 #define TRIG 11 // Arduino pin D11 - SRF04 pin 3 unsigned long echo_time = 0; // tempo di ritorno dell'echo sonar in us #define DISTANCE_CM echo_time / 48 // calcola la distanza in centimetri unsigned long go_sonar = 0; // timer per accensione a tempo boolean obstacle = 0; // memorizza se è stato avvicinato un ostacolo unsigned long max_distance = 30; // distanza massima a cui può avvicinarsi il robot in cm //***** variabili usate dai motori #define PIN_PWMA 5 // Arduino pin D3 PWM motore A #define PIN_DIRA 2 // Arduino pin D2 comando direzione motore A #define PIN_PWMB 9 // Arduino pin D3 PWM motore A #define PIN_DIRB 8 // Arduino pin D2 comando direzione motore A int velo_A = 0; // imposta la velocità del motore A int velo_B = 0; // imposta la velocità del motore B int dir_A = LOW; // imposta la direzione del motore A int dir_B = LOW; // imposta la direzione del motore B void setup() { irrecv.enableIRIn(); // attiva il ricevitore pinMode(ECHO, INPUT); // Arduino attiva ingresso pinMode(TRIG, OUTPUT); // Arduino attiva uscita pinMode(13, OUTPUT); // Arduino attiva uscita pin D13 led L

Transcript of Collaudo robot sandit lg

Page 1: Collaudo robot sandit lg

#include <IRremote.h>//***** variabili usate dal ricevitore IR ***** // carica libreria IR - Ken Shirriff http://arcfn.com int RECV_PIN = 10; // Arduino pin D10 collegato a IR OUT IRrecv irrecv (RECV_PIN); // imposta il pin di ricezione dei dati decode_results results; // unsigned long code; // memorizza il codice ricevuto

// i codic sono del telecomando marca LG // ai codici ricevuti aggiungere 0x + codice #define UP 0x11 #define KEY_UP 0x9986485A #define DOWN 0x22 #define KEY_DOWN 0x1C6A919C #define LEFT 0x33 #define KEY_SX 0x4EBA0422 #define RIGHT 0x44 #define KEY_DX 0x5EA08104 #define STOP 0x55 // comando stop #define KEY_STOP 0xCA9582FA // codice del tasto STOP//***** variabili usate dal sonar #define ECHO 12 // Arduino pin D12 - SRF04 pin 4 #define TRIG 11 // Arduino pin D11 - SRF04 pin 3 unsigned long echo_time = 0; // tempo di ritorno dell'echo sonar in us #define DISTANCE_CM echo_time / 48 // calcola la distanza in centimetri unsigned long go_sonar = 0; // timer per accensione a tempo boolean obstacle = 0; // memorizza se è stato avvicinato un ostacolo unsigned long max_distance = 30; // distanza massima a cui può avvicinarsi il robot in cm//***** variabili usate dai motori #define PIN_PWMA 5 // Arduino pin D3 PWM motore A #define PIN_DIRA 2 // Arduino pin D2 comando direzione motore A #define PIN_PWMB 9 // Arduino pin D3 PWM motore A #define PIN_DIRB 8 // Arduino pin D2 comando direzione motore A int velo_A = 0; // imposta la velocità del motore A int velo_B = 0; // imposta la velocità del motore B int dir_A = LOW; // imposta la direzione del motore A int dir_B = LOW; // imposta la direzione del motore Bvoid setup() { irrecv.enableIRIn(); // attiva il ricevitore pinMode(ECHO, INPUT); // Arduino attiva ingresso pinMode(TRIG, OUTPUT); // Arduino attiva uscita pinMode(13, OUTPUT); // Arduino attiva uscita pin D13 led L

Page 2: Collaudo robot sandit lg

pinMode(PIN_PWMA, OUTPUT); // Arduino attiva uscita pinMode(PIN_PWMB, OUTPUT); // Arduino attiva uscita pinMode(PIN_DIRA, OUTPUT); // Arduino attiva uscita pinMode(PIN_DIRB, OUTPUT); // Arduino attiva uscita Serial.begin(9600); // attiva la comunicazione seriale-USB }void loop() {//***** ricevi segnali dal telecomando ***** if (irrecv.decode(&results)) { // è stato ricevuto un comando digitalWrite(13, HIGH); // accende il led L di Arduino if(results.value == KEY_UP) code = UP; if(results.value == KEY_DOWN) code = DOWN; if(results.value == KEY_SX) code = LEFT; if(results.value == KEY_DX) code = RIGHT; if(results.value == KEY_STOP) code = STOP; // se premuto tasto STOP Serial.print(results.value, HEX); // stampa il codice ricevuto Serial.print(" "); Serial.println(code, HEX); // irrecv.resume(); // riceve il prossimo codice delay(5); // aspetta 5ms digitalWrite(13, LOW); // spegne il led L di Arduino } //***** misura la distanza con il sonar ***** delay(1); // conta fino ad 1ms if(go_sonar++ >= 250) { // attiva il sonar ogni 250 cicli del loop digitalWrite(TRIG, HIGH); // attiva l'emissione sonar delayMicroseconds(10); // aspetta 10 us digitalWrite(TRIG, LOW); // termina l'emissione sonar echo_time = pulseIn(ECHO, HIGH); // misura la durata dell'echo if(DISTANCE_CM <= max_distance) obstacle = 1; else obstacle = 0; if(obstacle) Serial.print("obstacle "); Serial.print(" distance"); Serial.println(DISTANCE_CM); go_sonar = 0; // azzera il timer }//***** comanda i motori ***** if(!obstacle) { if(code == UP) { velo_A = 250; velo_B = 250; dir_A = LOW; dir_B = HIGH; } else if(code == DOWN) { velo_A = 250; velo_B = 250; dir_A = HIGH; dir_B = LOW; } else if(code == LEFT) { velo_A = 125; velo_B = 250; dir_A = HIGH; dir_B = HIGH; } else if(code == RIGHT) { velo_A = 250; velo_B = 125; dir_A = LOW; dir_B = LOW; } else if(code == STOP) { velo_A = 0; velo_B = 0; dir_A = LOW; dir_B = LOW; } // ferma il robot}

Page 3: Collaudo robot sandit lg

else { velo_A = 0; velo_B = 0; dir_A = LOW; dir_B = LOW; } analogWrite(PIN_PWMA, velo_A); // imposta velocità motore A analogWrite(PIN_PWMB, velo_B); // imposta velocità motore B digitalWrite(PIN_DIRA, dir_A); // imposta la direzione del motore A digitalWrite(PIN_DIRB, dir_B); // imposta la direzione del motore B }