Идея такая,если ультразвуковой датчик заметил расстояние,менее 100 см,включается сигнализация,и будет она работать до тех пор,пока ик приемник не примет сигнал с моего пульта от телевизора.Кашу в программе заварил я что надо, поэтому прошу помочь.Потом на основе этой программы сделаю умную комнату(да да,умную комнату). Для примечания: пьезопищалку я пока что убрал с кода,ибо библиотека каким то магическим способом конфликтует с ней и выдает ошибку. Скетч прикрепил снизу Код (C++): #define Trig 12 //ультразвук #define Echo 13 //ультразвук(2) #define ledPin 8 //светодиод //пьезопищалка //все для приемника #include "IRremote.h" IRrecv irrecv(10); // Указываем пин, к которому подключен приемник decode_results results; void setup() { pinMode(Trig, OUTPUT); //инициируем как выход pinMode(Echo, INPUT); //инициируем как вход pinMode(ledPin, OUTPUT); Serial.begin(9600); /* задаем скорость общения. В нашем случае с компьютером */ //ПРИЕМНИК=======> irrecv.enableIRIn(); // Запускаем прием } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop() { digitalWrite(Trig, HIGH); /* Подаем импульс на вход trig дальномера */ delayMicroseconds(10); // равный 10 микросекундам digitalWrite(Trig, LOW); // Отключаем impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=impulseTime/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт int i = 0; if (distance_sm < 100 && i=0; ) // Если расстояние менее 100 сантиметром { { digitalWrite(ledPin, HIGH); // Светодиод горит delay(100); digitalWrite(ledPin, LOW); // Светодиод Потухает i++; } } if (irrecv.decode(&results)); { int res = results.value; if(res== 0x24DB && 0x824DB) { int i=0; digitalWrite(ledPin, LOW); } } delay(100); } /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. */
Подозреваю, что код успешно компилируется, но работает не так как Вы расчитывали. Добавил свои комментарии, из того что заметил. Код (C++): void loop() { digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); impulseTime=pulseIn(Echo, HIGH); distance_sm=impulseTime/58; Serial.println(distance_sm); int i = 0; // здесь объявляете переменную и присваиваете ей 0 if (distance_sm < 100 && i=0; ) //снова присваиваете переенной 0, { //в результате получается false и код в фигурных скобках не будет выполняться ни разу { // для чего нужна вторая пара фигурный скобок - не понятно digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); i++; // совершенно бессмысленная операция (см. выше) } } if (irrecv.decode(&results)); //если условие == true, то выполняется пустой оператор ";", а не код ниже { int res = results.value; if(res== 0x24DB && 0x824DB) // т. к. 0x824DB всегда больше 0, { //на результат влияет только первая часть условия int i=0; // повторное объявление переменной, зачем? digitalWrite(ledPin, LOW); } } delay(100); } Для начала исправьте ошибке в коде.