Предложение использовать протокол ИК пульта от телевизоров сони
А вот и скетч Для отправляющейБиблиотека для работы с протоколом СОНИ в комплектеPHP код:/*
* IR LED must be connected to Arduino PWM pin 3.
*/
#include <IRremote.h>
int button = 12;
int button2 = 11;
IRsend irsend;
int val;
void setup()
{
pinMode(button, INPUT);
pinMode(button2, INPUT);
}
void loop() {
val = digitalRead(button);
if (val == 0) {
irsend.sendSony(0xa90, 12);} // Sony TV power code
delay(10);
val = digitalRead(button2);
if (val == 0) {
irsend.sendSony(0xa70, 12);} // Sony TV power code
delay(10);
}
Для Принимающей АрдуиныPHP код:/*
The circuit:
* LCD RS pin to digital pin 9
* LCD Enable pin to digital pin 7
* LCD R/W pin to digital pin 8
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* 10K resistor GND: to pin 3 LCD
* LCD 1 & 16 to ground
* LCD 2 & 15 +5V
* wiper to LCD VO pin (pin 3)
* ir_pin = 6
*/
int ir_pin = 6; //"Ready to Recieve" flag, not needed but nice //Serial connection must be started to debug
int start_bit = 2000; //Start bit threshold (Microseconds)
int bin_1 = 1000;
int debug = 0; //Binary 1 threshold (Microseconds)
int bin_0 = 400; //Binary 0 threshold (Microseconds)
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
void setup() {
pinMode(ir_pin, INPUT);
lcd.begin(numRows, numCols);
lcd.setCursor(0, 0);
lcd.print("Rem Demo v.2.0");
delay(3000);
lcd.setCursor(0, 0);
lcd.print(":-) ");
}
void loop() {
int key = getIRKey(); //Fetch the key
lcd.setCursor(0, 1);
lcd.print("Key set:");
lcd.print(key);
lcd.print(" ");
}
int getIRKey() {
int data[12];
//Ok, i'm ready to recieve
while(pulseIn(ir_pin, LOW) < 2200) { //Wait for a start bit
}
data[0] = pulseIn(ir_pin, LOW); //Start measuring bits, I only want low pulses
data[1] = pulseIn(ir_pin, LOW);
data[2] = pulseIn(ir_pin, LOW);
data[3] = pulseIn(ir_pin, LOW);
data[4] = pulseIn(ir_pin, LOW);
data[5] = pulseIn(ir_pin, LOW);
data[6] = pulseIn(ir_pin, LOW);
data[7] = pulseIn(ir_pin, LOW);
data[8] = pulseIn(ir_pin, LOW);
data[9] = pulseIn(ir_pin, LOW);
data[10] = pulseIn(ir_pin, LOW);
data[11] = pulseIn(ir_pin, LOW);
if(debug == 1) {
lcd.setCursor(0, 1);
lcd.println("-----");
}
for(int i=0;i<11;i++) { //Parse them
if (debug == 1) {
lcd.println(data[i]);
}
if(data[i] > bin_1) { //is it a 1?
data[i] = 1;
} else {
if(data[i] > bin_0) { //is it a 0?
data[i] = 0;
} else {
data[i] = 2; //Flag the data as invalid; I don't know what it is!
}
}
}
for(int i=0;i<11;i++) { //Pre-check data for errors
if(data[i] > 1) {
return -1; //Return -1 on invalid data
}
}
int result = 0;
int seed = 1;
for(int i=0;i<11;i++) { //Convert bits to integer
if(data[i] == 1) {
result += seed;
}
seed = seed * 2;
}
return result; //Return key number
}





Ответить с цитированием