Код: Выделить всё
#define MY_RADIO_NRF24
#define MY_NODE_ID 10
#include <MySensors.h>
#include <SPI.h>
#include <Servo.h>
#include <IRremote.h>
#include <avr/wdt.h>
#define NODE_IDP 1
#define NODE_Time 4
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
Servo myservo1;
Servo myservo2;
unsigned long TIME;
unsigned long interval = 1;
int P, S;
int K1 = 7;
int K2 = 8;
MyMessage msgP(NODE_IDP, V_STATUS);
MyMessage msgTime(NODE_Time, V_VAR2);
void presentation()
{
sendSketchInfo("jalousie sensor", "V1.0_03072017");
present(NODE_IDP, S_LIGHT, "jalousie status");
present(NODE_Time, S_CUSTOM, "Time sleep");
}
void setup(){
wdt_disable();
pinMode(K1, OUTPUT);
pinMode(K2, OUTPUT);
myservo1.attach(5);
myservo2.attach(6);
digitalWrite(RECV_PIN, HIGH);
pinMode(2, INPUT);
pinMode(3, INPUT);
int L = loadState(3);
if((L) > 0 && (L)< 255)
interval=L*60000;
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results)) {
Serial.print("0x");
Serial.println(results.value, HEX);
if (results.value == (0x91EE7A85)) //Код кнопки
{
P=1;
S=1;
}
if (results.value == (0x91EE906F)) //Код кнопки
{
P=0;
S=1;
}
irrecv.resume(); // Получаем следующее значение
}
if(P == 1)
{
myservo1.write(180);
digitalWrite(K1, HIGH);
delay(2000);
digitalWrite(K1, LOW);
myservo2.write(0);
delay(500);
digitalWrite(K2, HIGH);
delay(2000);
digitalWrite(K2, LOW);
if(S == 1)
send(msgP.set(P)); //value переменная 2-указываеьт сколько знаков после запятой выводить.
P = 100;
S = 0;
send(msgTime.set((interval)/60000));
}
if(P == 0)
{
myservo1.write(0);
digitalWrite(K1, HIGH);
delay(2000);
digitalWrite(K1, LOW);
myservo2.write(180);
delay(500);
digitalWrite(K2, HIGH);
delay(2000);
digitalWrite(K2, LOW);
if(S == 1)
send(msgP.set(P)); //value переменная 2-указываеьт сколько знаков после запятой выводить.
P = 100;
S = 0;
send(msgTime.set((interval)/60000));
}
if((millis()-TIME) > interval)
{
TIME = millis();
send(msgTime.set((interval)/60000));
}
}
//********************************************************
void receive(const MyMessage &message) {
if (message.type==V_STATUS) {
P = message.getInt();
}
if (message.type==V_VAR2) {
if((message.getInt())<255){
saveState(3, message.getInt());
interval = (loadState(3)*60000);
send(msgTime.set((interval)/60000));
}
}
}