Собрал схему с фоторезистором, диодами и пьезо-пищалкой (так мне захотелось). При уменьшении освещенности включаются светодиоды, при увеличении - отключаются (типа светильник), с этим проблем не возникло. Захотел поставить пищалку, чтобы при уменьшении освещенности она срабатывала, НО срабатывала определенное количество раз и глохла, и чтобы так было каждый раз при уменьшении освещенности. Можно код пищалки запихнуть в setup там она сработает один раз, но при следующем уменьшении освещенности она уже не сработает. Код (C++): #define sensepin A0 #define buz 3 #define led 13 #define led2 8 int val; void setup() { pinMode (led, OUTPUT); pinMode (led2, OUTPUT); Serial.begin(9600); } void loop() { Serial.println(analogRead(sensepin)); delay(500); val = analogRead(sensepin); if (val <60) { digitalWrite(led, HIGH); digitalWrite(led2, HIGH); tone(buz, 1000, 500); delay(500); } else { digitalWrite(led, LOW); digitalWrite(led2, LOW); } }
Примерно как это может выглядеть, срабатывает при снижении яркости. Код (C++): int sensorCurrent; int snsorPrev; sensorCurrent = analogRead (SENSOR_PIN); if ( sensorCurrent < sensorPrev && sensorPrev-sensorCurrent > 10) { digitalWrite (BUZZER_PIN, HIGH); delay (300); digitalWrite (BUZZER_PIN, LOW); } sensorPrev = sensorCurrent;
Тут проверяется не уменьшилась ли яркость и если да, то если больше чем на десять попугаев, то выполнить условие. sensorPrev это предыдущие значение освещенности, определяется этой строчкой sensorPrev = sensorCurrent; В моем примере пикать будет каждый раз при снижении яркости на 10, если нужно некое пороговое значение, добавьте еще условие. ps если расскажете что именно нужно, и что происходит\не происходит, будет проще помочь
Немножко дописал Ваш код. Возможно это то, что Вы хотели. Код (C++): #define sensepin A0 #define buz 3 #define led 13 #define led2 8 int val; // Счетчик срабатываний int count = 0; void setup() { pinMode (led, OUTPUT); pinMode (led2, OUTPUT); Serial.begin(9600); } void loop() { Serial.println(analogRead(sensepin)); delay(500); val = analogRead(sensepin); if (val <60) { digitalWrite(led, HIGH); digitalWrite(led2, HIGH); if (count < 5) { // Количество срабатываний tone(buz, 1000, 500); count++; } delay(500); } else { count = 0; digitalWrite(led, LOW); digitalWrite(led2, LOW); } }
Если переписать выражение в более наглядном виде: Код (C++): if ( sensorPrev - sensorCurrent > 0 && sensorPrev - sensorCurrent > 10) Становится ясно, что первое условие избыточно. Достаточно только этого. Код (C++): if ( sensorPrev - sensorCurrent > 10)
Такой код может не срабатывать, если освещенность снижается слишком медленно. Причем требуется, чтобы за итерацию освещенность уменьшилась на 10. Но длительность итерации явно не определена.
Судя по коду автор имел ввиду - срабатывание пищалки при снижение яркости ниже 60-ти попугаев. А не буквально на каждое снижение.