1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| #include <IRremote.h>
#define RECV_PIN 12
#define ON 0
#define OFF 1
int IN1 = 9; // relais de montée
int IN2 = 10; // relais de descente
int HAUT = 4; // bouton poussoir haut
int BAS = 6; // bouton poussoir bas
int codeType;
int codeLen;
// pour recevoir sur l'ir PIN 12
IRrecv irrecv(RECV_PIN);
decode_results results;
// pour envoyer sur l'ir PIN 3
IRsend irsend;
void setup()
{
{
relay_init(); //initialize the relay
}
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode (HAUT, INPUT_PULLUP); // activation du PULLUP interne pin 4
pinMode (BAS, INPUT_PULLUP); // activation du PULLUP interne pin 6
}
void loop() {
receiveCode();
if (digitalRead(BAS)== ON) {
miseon();
}
if (digitalRead(HAUT)== ON || (results.value==21546)) {
miseoff();
}
}
void receiveCode(){
// catch IR
if (irrecv.decode(&results))
{
//recupere le type de codage, la logueur
int codeType = results.decode_type;
int codeLen = results.bits;
Serial.println("-------------------");
Serial.print("ValueHex ");
Serial.println(String(results.value, HEX));
Serial.print("ValueDec ");
Serial.println(results.value);
Serial.print("CodeLen ");
Serial.println(codeLen);
irrecv.resume(); // Receive the next value
// De quel type est le signal IR ?
if (codeType == UNKNOWN) {
Serial.println("Unknow Type");
}
else {
if (codeType == NEC) {
Serial.println("Type NEC ");
}
else if (codeType == SONY) {
Serial.println("Type SONY ");
}
else if (codeType == PANASONIC) {
Serial.println("Type PANASONIC ");
}
else if (codeType == JVC) {
Serial.println("Type JVC ");
}
else if (codeType == SAMSUNG) {
Serial.println("Type SAMSUNG ");
}
else {
Serial.print("Unexpected codeType ");
Serial.print(codeType, DEC);
Serial.println("");
}
}
}
}
void sendCode (long codeValue , int codeType , int codeLen){
if (codeType == NEC) {
irsend.sendNEC(codeValue, codeLen);
Serial.print("Sent NEC ");
Serial.println(codeValue, HEX);
}
else if (codeType == SONY) {
irsend.sendSony(codeValue, codeLen);
Serial.print("Sent Sony ");
Serial.println(codeValue, HEX);
}
else if (codeType == PANASONIC) {
irsend.sendPanasonic(codeValue, codeLen);
Serial.print("Sent Panasonic");
Serial.println(codeValue, HEX);
}
else if (codeType == JVC) {
irsend.sendJVC(codeValue, codeLen, false);
Serial.print("Sent JVC");
Serial.println(codeValue, HEX);
}
else if (codeType == SAMSUNG) {
irsend.sendSAMSUNG(codeValue, codeLen);
Serial.print("Sent SANSUNG");
Serial.println(codeValue, HEX);
}
}
void miseon(){
sendCode (21546,SONY,32); // active le retroprojecteur
delay(40);
relay_SetStatus(OFF, ON); // active le relais descend et desactive le relais monte (pin 9)
delay(10000); // descend l'acensceur
relay_SetStatus(OFF, OFF); // desactive les relais monte et descend (pin 9 et 10)
asm volatile (" jmp 0"); // RESET
}
void miseoff(){
sendCode (21546,SONY,32); // desactive le retroprojecteur
delay(40);
delay(1000);
sendCode (21546,SONY,32); // desactive le retroprojecteur validation
delay(40);
delay(120000);
relay_SetStatus(ON, OFF); // active le relais monte et desactive le relais descend (pin 10)
delay(10000);
relay_SetStatus(OFF, OFF); // desactive les relais monte et descend (pin 9 et 10)
asm volatile (" jmp 0"); // RESET
}
void relay_init(void) //initialize the relay
{
//set all the relays OUTPUT
pinMode(IN1, OUTPUT); //relais monte
pinMode(IN2, OUTPUT); // relais descend
relay_SetStatus(OFF, OFF); //turn off all the relay
}
//set the status of relays
void relay_SetStatus( unsigned char status_1, unsigned char status_2)
{
digitalWrite(IN1, status_1);
digitalWrite(IN2, status_2);
} |
Partager