Break out of CMDID to execute another CMDID
DENNIS.BRANDT 2026-08-14 04:59:02 5 Views0 Replies In the sketch below I need to be able to break out of CMDID 5 before the button count is reached and jump to CMDID 7
Any suggestions appreciated
#include "DFRobot_DF2301Q.h"
#include <esp_now.h>
#include <WiFi.h>
uint8_t broadcastAddress[] = { 0x14, 0x08, 0x08, 0xa5, 0xd7, 0x68 };
DFRobot_DF2301Q_UART DF2301Q(/*hardSerial =*/&Serial1, /*rx =*/D7, /*tx =*/D6);
#define Rgt D0
#define Lft D1
const int RbuttonPin = D2;
const int LbuttonPin = 29;
int RbuttonPushCounter = 0; // counter for the number of button presses
int RbuttonState = 0; // current state of the button
int RlastButtonState = 0;
int LbuttonPushCounter = 0; // counter for the number of button presses
int LbuttonState = 0; // current state of the button
int LlastButtonState = 0;
typedef struct struct_message {
int b;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo;
DFRobot_DF2301Q_I2C asr;
void OnDataSent(const esp_now_send_info_t *tx_info, esp_now_send_status_t status) {
if (status == ESP_NOW_SEND_SUCCESS) {
Serial.println("Send Success");
} else {
Serial.println("Send Fail");
}
}
void setup() {
Serial.begin(115200);
myData.b = 0;
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_register_send_cb(OnDataSent);
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
pinMode(Rgt, OUTPUT);
pinMode(Lft, OUTPUT);
while (!(asr.begin())) {
Serial.println("Communication with device failed, please check connection");
delay(3000);
}
Serial.println("Begin ok!");
asr.setVolume(7);
asr.setMuteMode(0);
asr.setWakeTime(255);
uint8_t wakeTime = 0;
wakeTime = asr.getWakeTime();
Serial.print("wakeTime 4= ");
Serial.println(wakeTime);
/**
@brief Play the corresponding reply audio according to the ID
@param CMDID - command word ID
*/
pinMode(RbuttonPin, INPUT_PULLUP);
pinMode(LbuttonPin, INPUT_PULLUP);
RlastButtonState = RbuttonState = digitalRead(RbuttonPin);
}
void loop() {
uint8_t CMDID = 0;
CMDID = DF2301Q.getCMDID();
Serial.print("CMDID = ");
Serial.println(CMDID);
if (CMDID == 5) {
while ((RbuttonPushCounter < 5)) {
digitalWrite(Rgt, HIGH);
delay(1000);
digitalWrite(Rgt, LOW);
delay(1000);
RbuttonState = digitalRead(RbuttonPin);
delay(1000);
if (RbuttonState != RlastButtonState) {
RbuttonPushCounter++;
(RlastButtonState = RbuttonState);
Serial.print("CNT = ");
Serial.println(RbuttonPushCounter);
}
}
RbuttonPushCounter = 0;
digitalWrite(Rgt, LOW);
}
if (CMDID == 6) {
while ((LbuttonPushCounter < 5)) {
digitalWrite(Lft, HIGH);
delay(1000);
digitalWrite(Lft, LOW);
delay(1000);
LbuttonState = digitalRead(LbuttonPin);
delay(1000);
if (LbuttonState != LlastButtonState) {
LbuttonPushCounter++;
(LlastButtonState = LbuttonState);
Serial.print("CNT = ");
Serial.println(LbuttonPushCounter);
}
}
LbuttonPushCounter = 0;
digitalWrite(Lft, LOW);
}
if (CMDID == 7) {
digitalWrite(Rgt, LOW); // Turn Relay OFF
digitalWrite(Lft, LOW);
Serial.println("Relay Deactivated");
}
delay(500);
//GREEN = 8, WHITE = 9, RED = 10, CRUISE ON = 11, CRUISE SET = 12, ADAPT ON = 13, NEAR = 14, FAR = 15
if (CMDID == 0 || CMDID == 8 || CMDID == 9 || CMDID == 10 || CMDID == 11 || CMDID == 12 || CMDID == 13 || CMDID == 14 || CMDID == 15 || CMDID == 16) {
(myData.b = CMDID);
(CMDID == 0);
Serial.println(myData.b);
uint8_t data[sizeof(myData)];
memcpy(data, &myData, sizeof(myData));
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sent with success");
} else {
Serial.println("Error sending the data");
}
}
delay(1000);
}

