بنده لینکی که داده بودید رو مطالعه کردم و طبق اون برنامم رو نوشتم ولی انگاری تقریبا تا 25 بار فشردن کلید یا همون رخ دادن وقفه خارجی برنامم درست ران میشه بعدش دیگه آردوینوم قاطی میکنه و رخداد وقفه دیگه تاثیری نداره البته تو این حالت اگه اردوینو رو ریست کنم دوباره مثل اول درست کار میکنه
کد های آردوینو فرستنده:
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
RF24 radio(7, 8);
const byte address[6] = "00001";
//////////////////////////////////
int joyStick[1]={
1};
#include <avr/sleep.h>
void setup()
{
radio.begin();
radio.setRetries(15, 15);//trans data in 3.75ms and try for 15 times
radio.openWritingPipe(address);
pinMode(2, INPUT); //Set interrupt pin 2 as input
digitalWrite(2,HIGH);
}
void loop()
{
sleepSetup();
}
void sleepSetup()
{
sleep_enable();
attachInterrupt(0, pinInterrupt, LOW);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_cpu();
}
void pinInterrupt()//ISR
{
sleep_disable();
radio.write(joyStick, sizeof(joyStick));
detachInterrupt(0);
}
و کد های گیرنده:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8);
const byte rxAddr[6] = "00001";
void setup()
{
pinMode(6, OUTPUT);//FOR LED GREEN
pinMode(5, OUTPUT);//FOR LED RED
radio.begin();
radio.openReadingPipe(0, rxAddr);
radio.startListening();
}
void loop()
{
if (radio.available())
{
int joyStick[1];
radio.read(joyStick, sizeof(joyStick));
if(joyStick[0]==1)
{
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
}
else if(joyStick[0]==0)
{
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
}
}
}