Denna gången så snickrar jag på en kod som tar emot seriell data och togglar digitala pinnar av och på, med samma kommando.
Det fungerar jättebra med bara en utgång, men när jag lägger till fler så "kolliderar" variablerna och den första i switch caset triggar den andra, både av och på. Dock går den andra att styra som det ska. Så det ska till någon form av avdelare i switch caset som gör att dom inte kommer åt varandra. Jag har testat med "break;" och det fungerar inte. (Jag antar att jag måste lägga if/else satserna i ett void för att det ska gå)
Jag har även flyttat runt variablerna, testat olika typer av variabler osv.
Här har vi koden:
Kod: Markera allt
void setup()
{
pinMode(3, OUTPUT); //pin 3 as output
pinMode(2, OUTPUT); // pin 2 as output
Serial.begin(9600); // open serial
}
int relayVal1 = 0; //state variable
int relayVal2 = 0; //state variable
void loop()
{
int cmd;
while (Serial.available() > 0)
{
cmd = Serial.read(); //read serial, put into variable
switch (cmd) // switch case that reads from variable cmd
{
case 'H':
relayVal1 ^= 1; // xor current value with 1 (causes value to toggle)
case 'J':
relayVal2 ^= 1; // xor current value with 1 (causes value to toggle)
if (relayVal1) // reads variable, controls digital pin accordingly
digitalWrite(3, HIGH);
else
digitalWrite(3, LOW);
if (relayVal2) // reads variable, controls digital pin accordingly
digitalWrite(2, HIGH);
else
digitalWrite(2, LOW);
}
}
}