prosím o pomoc, snažím se pro syna vyrobit vánoční dárek. Je to autíčko z merkuru, které má fungovat na dálkové ovládání.
Jako ovládání slouží kopie čínské arduino nano s FS1000A transmiterem a přijímač je Arduino + receiver + driver "1.5A Dual Channel DC Motor Driver Module PWM Speed Control MX1508".
Bezdrátová komunikace funguje, ale když se roztočí motor tak přijímač přestane přijímat. Zkoušel jsem už všechno možné, pokud odpojím driver a dám tam jen výpis do konzole tak je to ok, ale jinak zafunguje vždy jen první příkaz. Dokonce jsem si udělal i asynchroni blikani ledky na přijímači abych měl jistotu že cyklus pořád funguje. Zkoušel jsem taky místo napájení z usb použít 1.5A nabíječku od telefonu a chová se pořád stejně.
zdrojove kody:
master
Kód: Vybrat vše
/*
TRANSMITER
*/
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
int Button1 = 2;
int Button2 = 3;
boolean A_1;
boolean A_2;
boolean B_1;
boolean B_2;
bool change = 0;
bool temp = 0;
uint8_t msg[1];
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode (Button1, INPUT);
pinMode (Button2, INPUT);
rf_driver.init();
}
void loop()
{
msg[0]=0; // reset message
change = 0; // reset button flag
// read buttons
A_1 = !digitalRead(Button1);
B_1 = !digitalRead(Button2);
if (A_1){
msg[0]+=1;
change=1;
}
if (B_1){
msg[0]+=2;
change=1;
}
if (!A_1 & !B_1)
{
msg[0]=255;
}
if(change || temp){
digitalWrite(13,1);
rf_driver.send(msg, 1);
rf_driver.waitPacketSent();
digitalWrite(13,0);
if(!change & temp)
{
temp=0;
}else
{
temp=1;
}
delay(200);
}
}
Kód: Vybrat vše
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
int motorA_1 = 7;
int motorA_2 = 6;
int motorB_1 = 5;
int motorB_2 = 9;
char out = 0;
int foo = 1000;
bool ledState = 0;
// You can add more tones but i added 14. Just fill in what tone you would like to use, @ void loop you see " tone(Buzzer, tones[12]); " below, digitalWrite(Buzzer, HIGH);
// here you can change the tones by filling in a number between 1 and 14
void setup()
{
Serial.begin(9600); //we wanna be able to read what we got
// Initialize ASK Object
rf_driver.init();
pinMode(13, OUTPUT);
pinMode (motorA_1, OUTPUT);
pinMode (motorA_2, OUTPUT);
pinMode (motorB_1, OUTPUT);
pinMode (motorB_2, OUTPUT);
digitalWrite (motorA_1, LOW);
digitalWrite (motorA_2, LOW);
digitalWrite (motorB_1, LOW);
digitalWrite (motorB_2, LOW);
//digitalWrite (motorA_1, HIGH);
//delay(599);
//digitalWrite (motorA_1, LOW);
}
void loop()
{
if(millis()>foo)
{
foo = millis()+1000;
ledState=!ledState;
digitalWrite(13,ledState);
}
uint8_t buf[1];
uint8_t buflen =1;
buf[0]=0;
if (rf_driver.recv(buf, &buflen)) // if we get a message that we recognize on this buffer...
{
out = 0;
// digitalWrite(13, HIGH);
//out =(char)buf[0]; // fill the string with the data received
digitalWrite(13,0); //transmission ended
Serial.println("received:");
Serial.print(buf[0]);
}
if(buf[0] == 255){
stopAll();
out = 0;
}
if(buf[0] == 1){
digitalWrite(motorA_1, 1);
Serial.println("write 1");
out = 0;
}
if(buf[0] == 2){
digitalWrite (motorB_2, HIGH);
Serial.println("write 2");
out = 0;
}
if(buf[0] == 3){
digitalWrite (motorA_1, 1);
digitalWrite (motorB_1, 1);
Serial.println("write 3");
out = 0;
}
}
void stopAll(){
analogWrite(motorA_1, 0);
analogWrite(motorA_2, 0);
analogWrite(motorB_1, 0);
analogWrite(motorB_2, 0);
}