Jag håller på att pula ihop en liten blixljusmodul som jag fjärrstyr med en vanlig enkel fjärrkontroll som sänder på 433 MHz.
Arduinon tar emot koden och gör olika saker beroende på vilken knapp på kontrollen som har tryckts in.
Problemet som har uppstått är att Arduinon inte vill registrera datatrafik som kommer medan blixtfunktionerna körs, trots att jag har byggt om dem så att de jobbar i loop-funktionen med millis-jämförelse istället för delay, vilket gjordes just för att kunna styra enheten även mitt i ett blixtmönster.
Koden för loop ser nu ut såhär (vissa namn och värden är ändrade):
Kod: Markera allt
void loop() {
currentMillis = millis();
if (mySwitch.available()) {
String button_code = String(mySwitch.getReceivedValue(), DEC);
Serial.print("Received code is: ");
Serial.println(button_code);
Serial.print("Current blink pattern is: ");
Serial.println(blink_pattern);
if (button_code == "11111111") {
blink_state = 1;
previousMillis = 0;
counter = 0;
}
else if (button_code == "11111112") {
digitalWrite(led_pin_1, LOW);
digitalWrite(led_pin_2, LOW);
blink_state = 0;
previousMillis = 0;
counter = 0;
}
else if (button_code == "11111113") {
if (blink_pattern <= 3) {
blink_pattern++;
}
else {
blink_pattern = 1;
}
}
else if (button_code == "11111114") {
if (blink_pattern >= 3) {
blink_pattern--;
}
else {
blink_pattern = 4;
}
}
mySwitch.resetAvailable();
delay(50);
}
else {
switch(blink_pattern) {
// Pattern 1
case 1:
if (blink_state == 1) {
currentMillis = millis();
if (counter == 0) {
digitalWrite(led_pin_1, HIGH);
digitalWrite(led_pin_2, HIGH);
counter++;
previousMillis = millis();
}
else if (currentMillis - previousMillis >= pattern_1_delay_1 && counter == 1) {
digitalWrite(led_pin_1, LOW);
digitalWrite(led_pin_2, LOW);
counter++;
previousMillis = millis();
}
else if (currentMillis - previousMillis >= pattern_1_delay_2 && counter == 2) {
counter = 0;
previousMillis = 0;
}
}
break;
// Pattern 2
case 2:
if (blink_state == 1) {
if (counter == 0) {
digitalWrite(led_pin_1, HIGH);
digitalWrite(led_pin_2, HIGH);
counter++;
previousMillis = millis();
next_state = 0;
}
else if (currentMillis - previousMillis >= pattern_2_delay_1 && counter <= 7) {
previousMillis = millis();
counter++;
if (next_state == 1) {
digitalWrite(led_pin_1, HIGH);
digitalWrite(led_pin_2, HIGH);
next_state = 0;
}
else if (next_state == 0) {
digitalWrite(led_pin_1, LOW);
digitalWrite(led_pin_2, LOW);
next_state = 1;
}
}
else if (currentMillis - previousMillis >= pattern_2_delay_2 && counter == 8) {
counter = 0;
previousMillis = 0;
}
}
break;
case 3:
// blink_3();
break;
case 4:
// blink_4();
break;
}
}
}
Någon som har en teori om hur jag kan komma förbi detta lilla hindret? Tacksam för svar. =)