Robot evita ostacoli
stavo lavorando ad un robot che evita ostacoli, ho inoltre aggiunto un sistema per metterlo in "stand by" o attivarlo distanza, con un telecomando infrarosso. il problema è questo:
quando lo attivo non schiva gli ostacoli, anzi, prosegue dritto come niente fosse, ma se schiaccio un certo numero di volte (che non è mai costante) sul telecomando il tasto per l' attivazione, inizia schivare e viaggia autonomamente. se poi lo rimetto in stand e successivamente lo riattivo, si ha la stessa situazione di prima.
il robot ha iniziato comportasi così solo dopo che ho aggiunto l' attivazione remota, prima funzionava correttamente.
mi dareste una mano? io sto impazzendo grazie mille!!!
(forward() e right() sono funzioni che ho aggiunto in una tab)
quando lo attivo non schiva gli ostacoli, anzi, prosegue dritto come niente fosse, ma se schiaccio un certo numero di volte (che non è mai costante) sul telecomando il tasto per l' attivazione, inizia schivare e viaggia autonomamente. se poi lo rimetto in stand e successivamente lo riattivo, si ha la stessa situazione di prima.
il robot ha iniziato comportasi così solo dopo che ho aggiunto l' attivazione remota, prima funzionava correttamente.
mi dareste una mano? io sto impazzendo grazie mille!!!
(forward() e right() sono funzioni che ho aggiunto in una tab)
code: [select]
// libreria, sensore di distanza e comunicazione ir
#include <distancegp2y0a21yk.h>
#include <irremote.h>
//
// led di stato:
int green = 4;
int red =5;
boolean idle = true;// fa rimanere acceso il led rosso all' avvio
//
// motori
#define motsx 6 //il pin del motore snistro
#define dirsx 7 //controlla la direzione del motore sinistro
#define motdx 11 //il pin del motore destro
#define dirdx 13 //controlla la direzione del motore destro
//
// ir stuff
#define recv_pin 3 //stabilisce il pin del ricevitore
irrecv irrecv(recv_pin); //crea un oggetto per la decodifica
decode_results dati; //consente la decodifica del codice ir
//
// distance stuff
int distance; // variabile che memorizza la distanza
distancegp2y0a21yk dist;
//
void setup() {
// motori
pinmode(motdx,output);
pinmode(motsx,output);
pinmode(dirsx,output);
pinmode(dirdx,output);
// leds
pinmode(green,output);
pinmode(red,output);
//
//sceglie il pin del sensore di distanza
dist.begin(a0);
//
// avvia il ricevimento ir
irrecv.enableirin();
//
serial.begin(9600);
}
//il main program
void loop() {
// stampa il codice dicevuto dal telecomando
if (irrecv.decode(&dati)) {
serial.print(dati.value, hex);
irrecv.resume(); // receive next value
}
// stand all' avvio
if(idle == true)
{
digitalwrite(red,high);
}
// se si preme "on" sul telecomando
if (dati.value == 0xf7c03f ) {
digitalwrite(green,high);
digitalwrite(red,low);
idle = false;
distance = dist.getdistancecentimeter();
if (distance >=8) {
forward();
}
else {
right();
}
}
// se si preme "off"
if (dati.value == 0xf740bf )
{
digitalwrite(green,low);
digitalwrite(red,high);
fermo();
}
}
quale arduino, la uno o la mega?
la libreria irremote utilizza uno dei timer, seconda della scheda.
la libreria servo utilizza il timer1.
nella libreria irremote puoi cambiare il timer usato seconda della scheda arduino (file irremoteint.h),
ma comunque potrebbero esserci dei problemi di "tempistica".
prova commentare solo l'istruzione irrecv.enableirin(); questa abilita l'interrupt per il timer. se remmando questa il robot non da problemi (ma non funziona più il telecomando, ovviamente) allora qualche timer va in conflitto.
la libreria irremote utilizza uno dei timer, seconda della scheda.
la libreria servo utilizza il timer1.
nella libreria irremote puoi cambiare il timer usato seconda della scheda arduino (file irremoteint.h),
ma comunque potrebbero esserci dei problemi di "tempistica".
prova commentare solo l'istruzione irrecv.enableirin(); questa abilita l'interrupt per il timer. se remmando questa il robot non da problemi (ma non funziona più il telecomando, ovviamente) allora qualche timer va in conflitto.
Arduino Forum > International > Italiano > Generale (Moderator: leo72) > Robot evita ostacoli
arduino
Comments
Post a Comment