Using my Arduino Uno, when I run the ReceiveDemo_Simple from the RCSwitch library, I can see info received in the serial monitor when I press any button on my RF remote. It works.
The problem I am having is receiving RF data while the Arduino Uno is controlling something else, like an LED animation. It doesn't show any response in the serial monitor other than the cylon "x". I thought that because the RCSwitch utilized interrupt 0 on pin #2 that button presses would not be missed, but I was mistaken.
Is there a way I can code this so I don't miss a button press using RCSwitch while other things are running?
Here is the code below.
`// RCSwitch ReceiveDemo_Simple with FastLED cylon
include
include
RCSwitch mySwitch = RCSwitch();
define DATA_PIN 6 // LED strip DATAPIN
define NUM_LEDS 85
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
LEDS.addLeds<WS2813, DATA_PIN, RGB>(leds, NUM_LEDS);
LEDS.setBrightness(84);
}
void ReceiveDemo_Simple () {
if (mySwitch.available()) {
void cylon() {
static uint8_t hue = 0;
Serial.print("x");
// First slide the led in one direction
for(int i = 0; i < NUM_LEDS; i++) {
// Set the i'th led to red
leds[i] = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds[i] = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
Serial.print("x");
// Now go in the other direction.
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
// Set the i'th led to red
leds[i] = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds[i] = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
}
void fadeall() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].nscale8(250);
}
}
I am having the same issue. I am using ATTINY1614 and while the MCU is busy in another loop the Remote Button Press is not registered despite being on an interrupt pin.
Using my Arduino Uno, when I run the ReceiveDemo_Simple from the RCSwitch library, I can see info received in the serial monitor when I press any button on my RF remote. It works.
The problem I am having is receiving RF data while the Arduino Uno is controlling something else, like an LED animation. It doesn't show any response in the serial monitor other than the cylon "x". I thought that because the RCSwitch utilized interrupt 0 on pin #2 that button presses would not be missed, but I was mistaken.
Is there a way I can code this so I don't miss a button press using RCSwitch while other things are running?
Here is the code below. `// RCSwitch ReceiveDemo_Simple with FastLED cylon
include
include
RCSwitch mySwitch = RCSwitch();
define DATA_PIN 6 // LED strip DATAPIN
define NUM_LEDS 85
CRGB leds[NUM_LEDS];
void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 LEDS.addLeds<WS2813, DATA_PIN, RGB>(leds, NUM_LEDS); LEDS.setBrightness(84); }
void ReceiveDemo_Simple () { if (mySwitch.available()) {
} }
void cylon() { static uint8_t hue = 0; Serial.print("x"); // First slide the led in one direction for(int i = 0; i < NUM_LEDS; i++) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } Serial.print("x");
// Now go in the other direction.
for(int i = (NUM_LEDS)-1; i >= 0; i--) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } }
void fadeall() { for (int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }
void loop() { ReceiveDemo_Simple(); cylon(); }`