Hi, I want to do led control through arduino with RC receiver and transmitter. RC receiver generates PWM signals. I can capture these PWM signals with pulseIn command. At the same time I want the arduino to consume less power. Therefore, when I switch from my RC transmitter, I want to trigger the RC receiver and get out of Arduino sleep mode.
However, the RC Receiver produces varying signal values.
Namely:
Switch off mode: pulseIn function output: 1082 1076 1083 1083 ...
Switch on mode: pulseIn function output: 1909 1915 1916 1915 ...
Arduino comes out of sleep mode directly because it produces varying values in this way.
I can switch Arduino without sleep mode.
In short, how do I get Arduino out of sleep mode correctly with PWM signal.
#include <avr/sleep.h>
#define rcGiris1 2 // RC receiver to Ardino Nano digital2 pin (interrupt 0 pin)
#define ledCikis1 7 //led
unsigned long number;
void setup() {
// pinMode(kesmePin, INPUT);
pinMode(rcGiris1, INPUT_PULLUP);
pinMode(ledCikis1, OUTPUT);
Serial.begin(9600);
attachInterrupt(0, uyan, CHANGE);
}
void uyan() // here the interrupt is handled after wakeup
{
number = pulseIn(rcGiris1, HIGH);
if (number < 1300)
{
digitalWrite(ledCikis1, LOW);
}
else
{
digitalWrite(ledCikis1, HIGH);
}
Serial.println(number);
}
void uykuMod() //WAKE MOD
{
/* The 5 different modes are:
SLEEP_MODE_IDLE -the least power savings
SLEEP_MODE_ADC
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_STANDBY
SLEEP_MODE_PWR_DOWN -the most power savings
*/
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable(); // enables the sleep
/*
power_adc_disable();
power_spi_disable();
power_timer0_disable();
power_timer1_disable();
power_timer2_disable();
power_twi_disable();
*/
/* In the function call attachInterrupt(A, B, C)
A can be either 0 or 1 for interrupts on pin 2 or 3.
B Name of a function you want to execute at interrupt for A.
C Trigger mode of the interrupt pin. can be:
LOW a low level triggers
CHANGE a change in level triggers
RISING a rising edge of a level triggers
FALLING a falling edge of a level triggers
In all but the IDLE sleep modes only LOW can be used.
*/
attachInterrupt(0, uyan, CHANGE);
Serial.println("uyudu");
sleep_mode(); // here the device is actually put to sleep!!
// THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
sleep_disable(); // first thing after waking from sleep:
detachInterrupt(0);
Serial.println("uyandi");
}
void loop() {
Serial.println("loopta");
delay(5);
uykuMod();
}