Hello,
I am making a Arduino Rover. The test sketches all work fine. The remote transmits values.
Decoding the value received from the buffer which is a uint8_t, is a problem. I can't compare the string literals to the buffer to know what action to preform.
Is there a way to compare a string literal to a uint8_t?
Rover:
#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h>
#endif
RH_ASK driver;
// RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2
// RH_ASK driver(2000, 3, 4, 0); // ATTiny, RX on D3 (pin 2 on attiny85) TX on D4 (pin 3 on attiny85)
const int in1 = 3;
const int in2 = 4;
const int in3 = 5;
const int in4 = 6;
const int ENA = 2;
const int ENB = 7;
void setup() {
#ifdef RH_HAVE_SERIAL
Serial.begin(9600);
#endif
if (!driver.init())
#ifdef RH_HAVE_SERIAL
Serial.println("init failed");
#else
;
#endif
pinModeSetup();
}
void stopCar() {
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
Serial.println("Stop");
}
void foward()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Forward");
}
void backward()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.println("Back");
}
void left()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.println("Left");
}
void right()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Right");
}
void pinModeSetup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
}
void loop() {
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) {
int i;
if (strcmp((char *)buf, "A0")) {
stopCar();
} else if (strcmp((char *)buf, "31")) {
foward();
} else if (strcmp((char *)buf, "32")) {
right();
} else if (strcmp((char *)buf, "33")) {
backward();
} else if (strcmp((char *)buf, "34")) {
left();
} else {
stopCar();
}
driver.printBuffer("Got:", buf, buflen);
Serial.println("");
}
}
Rover Remote:
#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h>
#endif
RH_ASK driver;
// RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2
// RH_ASK driver(2000, 3, 4, 0); // ATTiny, RX on D3 (pin 2 on attiny85) TX on D4 (pin 3 on attiny85)
char *msg = "0";
void setup() {
if (!driver.init()) {
while(1) {;}
}
pinModeSetup();
Serial.begin(9600);
}
void loop() {
if (digitalRead(2) == LOW) {
msg = "1";
} else if (digitalRead(3) == LOW) {
msg = "2";
} else if (digitalRead(4) == LOW) {
msg = "3";
} else if (digitalRead(5) == LOW) {
msg = "4";
} else {
msg = 0;
}
driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
Serial.println(msg);
}
void pinModeSetup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
}
Thanks for all the help in advance.