Macchinina radiocomandata
ciao tutti, mi sono cimentato in questi giorni nella costruzione di una piccola macchinina (funzionante con due motorini di un drone giocattolo, e arduino pro mini), che svolge varie funzioni di esplorazione con un sensore ad ultrasuoni, e fino qua tutto ok, funziona tutto perfettamente.
in più, volevo renderla radiocomandata attraverso moduli di ricezione e trasmissione 433 mhz, e moduli joystick analogici per comandare 2 motori.
il problema è:
quando non muovo joystick(che quindi danno entrambi un valore di circa 450 sugli ingressi analogici, e quindi non vengono inviati impulsi ai motori) va tutto bene, ricevitore e trasmissione si comunicano bene valori(testato attraverso il seriale di entrambi), ma nel momento in cui voglio pilotare la macchinina, va tutto ok per circa 10 secondi poi improvvisamente valori sul seriale si bloccano e due arduino smettono di comunicarsi, lasciando motori nella situazione degli ultimi valori scambiati. scusate sono nuovo del forum e non ancora come postare il codice in modo "carino" come ho visto fare, quindi faccio un brutale copia e incolla delle parti interessate!
per la connessione tra moduli wireless, uso la libreria virtual wire, che gia per altri progetti era stata perfetta nel funzionamento!
trasmissione
#include <virtualwire.h>
#define sticksx a0
#define stickdx a1
#define pintrasmettitore 3
int valsx;
int valdx;
void initialize_transmitter();
void transmit_integer(unsigned int data);
void setup() {
serial.begin(9600);
initialize_transmitter();
}
void loop() {
valsx=analogread(sticksx);
valdx=analogread(stickdx);
serial.print(valsx);
serial.print(" ");
serial.println(valdx);
transmit_integer(valsx);
delay(20);
transmit_integer(valdx+2000);
delay(20);
}
ricezione
void loop() {
valricevuto=receive_integer();
delay(10);
if(valricevuto!=-1){
if(valricevuto>-1 && valricevuto<1024) valsx=valricevuto;
if(valricevuto>1999 && valricevuto<3024) valdx=valricevuto-2000;
serial.print(valsx);
serial.print(" ");
serial.println(valdx);
}
if(valsx>400 && valsx<500) {digitalwrite(pinsxavanti,low); digitalwrite(pinsxindietro,low);}
if(valdx>400 && valdx<500) {digitalwrite(pindxavanti,low); digitalwrite(pindxindietro,low);}
if(valsx<400) analogwrite(pinsxindietro, map(valsx,0,400,255,0));
if(valsx>500) analogwrite(pinsxavanti, map(valsx,500,1023,0,255));
if(valdx<400) analogwrite(pindxindietro, map(valsx,0,400,255,0));
if(valdx>500) analogwrite(pindxavanti, map(valsx,500,1023,0,255));
}
i pin "pinsxavanti, pinsxindetro, pindxavanti,pindxindetro" sono pin per muovere motori avanti e indietro
grazie mille chiunque risponda
in più, volevo renderla radiocomandata attraverso moduli di ricezione e trasmissione 433 mhz, e moduli joystick analogici per comandare 2 motori.
il problema è:
quando non muovo joystick(che quindi danno entrambi un valore di circa 450 sugli ingressi analogici, e quindi non vengono inviati impulsi ai motori) va tutto bene, ricevitore e trasmissione si comunicano bene valori(testato attraverso il seriale di entrambi), ma nel momento in cui voglio pilotare la macchinina, va tutto ok per circa 10 secondi poi improvvisamente valori sul seriale si bloccano e due arduino smettono di comunicarsi, lasciando motori nella situazione degli ultimi valori scambiati. scusate sono nuovo del forum e non ancora come postare il codice in modo "carino" come ho visto fare, quindi faccio un brutale copia e incolla delle parti interessate!
per la connessione tra moduli wireless, uso la libreria virtual wire, che gia per altri progetti era stata perfetta nel funzionamento!
trasmissione
#include <virtualwire.h>
#define sticksx a0
#define stickdx a1
#define pintrasmettitore 3
int valsx;
int valdx;
void initialize_transmitter();
void transmit_integer(unsigned int data);
void setup() {
serial.begin(9600);
initialize_transmitter();
}
void loop() {
valsx=analogread(sticksx);
valdx=analogread(stickdx);
serial.print(valsx);
serial.print(" ");
serial.println(valdx);
transmit_integer(valsx);
delay(20);
transmit_integer(valdx+2000);
delay(20);
}
ricezione
void loop() {
valricevuto=receive_integer();
delay(10);
if(valricevuto!=-1){
if(valricevuto>-1 && valricevuto<1024) valsx=valricevuto;
if(valricevuto>1999 && valricevuto<3024) valdx=valricevuto-2000;
serial.print(valsx);
serial.print(" ");
serial.println(valdx);
}
if(valsx>400 && valsx<500) {digitalwrite(pinsxavanti,low); digitalwrite(pinsxindietro,low);}
if(valdx>400 && valdx<500) {digitalwrite(pindxavanti,low); digitalwrite(pindxindietro,low);}
if(valsx<400) analogwrite(pinsxindietro, map(valsx,0,400,255,0));
if(valsx>500) analogwrite(pinsxavanti, map(valsx,500,1023,0,255));
if(valdx<400) analogwrite(pindxindietro, map(valsx,0,400,255,0));
if(valdx>500) analogwrite(pindxavanti, map(valsx,500,1023,0,255));
}
i pin "pinsxavanti, pinsxindetro, pindxavanti,pindxindetro" sono pin per muovere motori avanti e indietro
grazie mille chiunque risponda

Arduino Forum > International > Italiano > Generale (Moderator: leo72) > Macchinina radiocomandata
arduino
Comments
Post a Comment