So I've been trying everything I can think of (and doing all the online research I can) and am at a standstill. I have a remote control car project I am doing, using motor drivers that use a 9 bit serial protocol. The remote control and receiver are 433Mhz basic ASK transmitter/receiver pair. To send data, I am using the RCSwitch library. For the 9 bit serial, I am using SoftwareSerial9. Both of these parts of code work great on their own: I am able to receive valid values from my transmitter and print them to serial monitor without any problems. I am also able to control the two motors using the SoftwareSerial9 using two potentiometers.
Now, when I try and combine these pieces of code, they seem to run (the arduino onboard light blinks when it receives data via RCSwitch) but as soon as I turn on the motor driver, the arduino seems to freeze and stops printing rf values it received into the serial monitor. Without the RCSwitch library and code, the other part of the system works great.
This code successfully serial.prints the received value to serial monitor:
#include <RCSwitch.h>
int value = 0;
RCSwitch motor = RCSwitch();
void setup() {
// put your setup code here, to run once:
motor.enableReceive(0); //Pin 2
Serial.begin(9600);
}
void loop() {
if (motor.available()) {
value = motor.getReceivedValue();
// Serial.println( motor.getReceivedValue() );
Serial.print(value);
{
motor.resetAvailable();
}
}}
This code should work (in my unexperienced C++ mind) but doesn't. The arduino serial monitor freezes up and there is no responses to transmitter output changing:
#include <RCSwitch.h>
#include <SoftwareSerial9.h>
SoftwareSerial9 motor1(9, 10);
SoftwareSerial9 motor2(11, 12);
RCSwitch motor = RCSwitch();
void setup() {
// put your setup code here, to run once:
motor1.begin(26315);
motor2.begin(26315);
Serial.begin(9600);
motor.enableReceive(0); //Pin 2
}
void loop() {
if (motor.available()) {
int value = motor.getReceivedValue();
Serial.println( motor.getReceivedValue() );
if (value == 12)
{
motor1.write9(256);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 11)
{
motor1.write9(256);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(50 & 0xFF);
motor2.write9((50 >> 8) & 0xFF);
motor2.write9(50 & 0xFF);
motor2.write9((50 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 13)
{
motor1.write9(256);
motor1.write9(50 & 0xFF);
motor1.write9((50 >> 8) & 0xFF);
motor1.write9(50 & 0xFF);
motor1.write9((50 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 23)
{
motor1.write9(256);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(0 & 0xFF);
motor2.write9((0 >> 8) & 0xFF);
motor2.write9(0 & 0xFF);
motor2.write9((0 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 21)
{
motor1.write9(256);
motor1.write9(0 & 0xFF);
motor1.write9((0 >> 8) & 0xFF);
motor1.write9(0 & 0xFF);
motor1.write9((0 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 32)
{
motor1.write9(256);
motor1.write9(-100 & 0xFF);
motor1.write9((-100 >> 8) & 0xFF);
motor1.write9(-100 & 0xFF);
motor1.write9((-100 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(-100 & 0xFF);
motor2.write9((-100 >> 8) & 0xFF);
motor2.write9(-100 & 0xFF);
motor2.write9((-100 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 31)
{
motor1.write9(256);
motor1.write9(50 & 0xFF);
motor1.write9((50 >> 8) & 0xFF);
motor1.write9(50 & 0xFF);
motor1.write9((50 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(100 & 0xFF);
motor2.write9((100 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 33)
{
motor1.write9(256);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(100 & 0xFF);
motor1.write9((100 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(50 & 0xFF);
motor2.write9((50 >> 8) & 0xFF);
motor2.write9(50 & 0xFF);
motor2.write9((50 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
if (value == 22)
{
motor1.write9(256);
motor1.write9(0 & 0xFF);
motor1.write9((0 >> 8) & 0xFF);
motor1.write9(0 & 0xFF);
motor1.write9((0 >> 8) & 0xFF);
motor1.write9(85);
motor1.write9(128);
motor1.write9(128);
delayMicroseconds(300);}
{
motor2.write9(256);
motor2.write9(0 & 0xFF);
motor2.write9((0 >> 8) & 0xFF);
motor2.write9(0 & 0xFF);
motor2.write9((0 >> 8) & 0xFF);
motor2.write9(85);
motor2.write9(128);
motor2.write9(128);
delayMicroseconds(300);
}
{
motor.resetAvailable();
}
}}