#define IR_PIN 11 // определение пина для ИК-приемника
void setup() {
pinMode(IR_PIN, INPUT); // установка пина как вход
Serial.begin(9600); // начало серийной связи на скорости 9600 бит/с
}
void loop() {
if (digitalRead(IR_PIN) == LOW) { // если сигнал с ИК-приемника низкий
unsigned long codeValue = 0; // переменная для хранения значения кода
unsigned long startTime = micros(); // время начала получения сигнала
int bitsReceived = 0; // количество полученных битов
while (digitalRead(IR_PIN) == LOW) { // ожидание окончания низкого сигнала
}
while (digitalRead(IR_PIN) == HIGH) { // ожидание окончания высокого сигнала
}
unsigned long duration = micros() - startTime; // расчет длительности сигнала
if (duration > 1000 && duration < 2000) { // если длительность в пределах 1000-2000 мкс
while (bitsReceived < 32) {
unsigned long lowStartTime = micros(); // время начала низкого сигнала
while (digitalRead(IR_PIN) == LOW) { // ожидание окончания низкого сигнала
}
unsigned long highStartTime = micros(); // время начала высокого сигнала
while (digitalRead(IR_PIN) == HIGH) { // ожидание окончания высокого сигнала
}
duration = micros() - highStartTime; // расчет длительности высокого сигнала
if (duration > 1000 && duration < 2000) { // если длительность в пределах 1000-2000 мкс
codeValue = (codeValue << 1) | 1; // добавление бита 1 к коду
bitsReceived++;
} else if (duration > 2000 && duration < 3000) { // если длительность в пределах 2000-3000 мкс
codeValue = (codeValue << 1) | 0; // добавление бита 0 к коду
bitsReceived++;
} else { // если длительность не соответствует ожидаемым значениям
break; // выход из цикла получения кода
}
}
if (bitsReceived == 32) { // если получено 32 бита кода
Serial.print("Code: "); // вывод надписи "Code: "
Serial.println(codeValue); // вывод значения кода
}
}
}
}