Er is iets in mijn code dat ik niet begrijp.
Ik gebruik een arduino mega 2560 met een 433MHz ontvanger en een controller die ik via UART probeer te besturen. De ontvanger zit aan D2, de controller op D18 en D19.
De besturing probeer ik te doen met een switch - case.
Wat zich nu voordoet is dat er alleen gereageerd wordt op de bovenste case, niet op de rest. Wanneer ik bijvoorbeeld de tweede case bovenaan zet, reageert hij alleen daar op. Hij komt niet in de overige cases, dit heb ik gecontroleerd met de led.
Het lijkt erop dat ik de eerste case niet goed afsluit waardoor hij de tweede of derde niet wil uitvoeren wanneer ik daarom vraag. Naar wat ik heb gezocht, zou het wel op deze manier moeten werken. Onderstaand de volledige code, kan iemand mij in de goede richting sturen?
c code:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #D2
}
void loop() {
if (mySwitch.available())
{
Serial.print(mySwitch.getReceivedValue());
unsigned long int ab = mySwitch.getReceivedValue();
switch (ab)
{
case 4543491: mySwitch.disableReceive();
char start[8]={0x7E, 0xFF, 0x06, 0x22, 0x00, 0x1E, 0x01, 0xEF}; //start 1
Serial1.write((char*) start, 8); //send command
break;
case 4543500: mySwitch.disableReceive();
char stop[8]={0x7E, 0xFF, 0x06, 0x16, 0x00, 0x00, 0x00, 0xEF}; //stop all
Serial1.write((char*) stop, 8); //send command
digitalWrite(LED_BUILTIN, HIGH); // turn the check LED on
break;
case 4543536: mySwitch.disableReceive();
char second[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x1E, 0x02, 0xEF}; //start 2
Serial1.write((char*) second, 8); //send command
break;
}
delay(500); //delay to avoid repeating te same code.
digitalWrite(LED_BUILTIN, LOW); // turn the check LED off
mySwitch.resetAvailable();
mySwitch.enableReceive(0);
}
}
[Bericht gewijzigd door Henry S. op 14 augustus 2023 20:02:14 (0%)