|
Подсчет срабатываний датчика
|
|
| vlasov-serg | Дата: Пятница, 04.07.2014, 20:44 | Сообщение # 1 |
 3.5 Вольт
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
| Здравствуйте, подскажите как организовать подсчет срабатываний датчика освещености, он подключен к порту цифровому 3, аналоговому 0.Вот написал программу но как только его освещаю, он начинает увеличивать переменную на единицу, а мне требуется если он освещен то только одна единица должна занестись в переменую, при следующем освещении опять прибавиться единица. Подскажите как это реализовать. Вот программа: #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); const int analogPin=A0; const int sensor=3; int sensorValueDI=0; int sensorValueAI=0; int ksd=0; void setup() { Serial.begin(9600); lcd.init(); // Инициализация lcdlcd.backlight(); // Включаем подсветку pinMode(sensor,INPUT); } void loop() { //Serial.print(sensorValueDI); //Serial.println(); //Serial.print(sensorValueAI); //Serial.println(); sensorValueDI=digitalRead(sensor); sensorValueAI=analogRead(analogPin); lcd.clear(); // Очищаем дисплей if(sensorValueDI==LOW) { ksd++; } lcd.clear(); // Очищаем дисплей lcd.setCursor(0, 0); lcd.print(sensorValueDI); // Выводим значение lcd.setCursor(0, 1); lcd.print(ksd); // Выводим значение }
Сообщение отредактировал vlasov-serg - Пятница, 04.07.2014, 20:47 |
| |
| |
| Serg | Дата: Пятница, 04.07.2014, 21:17 | Сообщение # 2 |
|
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| ну добавьте еще одну переменную (флаг), которая изменит свое значение на противоположное, когда датчик зафиксирует темноту. А в счетчике ksd добавьте проверку значения этой переменной.
|
| |
| |
| Serg | Дата: Пятница, 04.07.2014, 21:18 | Сообщение # 3 |
|
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| а лучше использовать прерывания
|
| |
| |
| vitalik | Дата: Четверг, 10.07.2014, 07:58 | Сообщение # 4 |
 1.5 Вольт
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
| sensorValueDI=digitalRead(sensor); sensorValueAI=analogRead(analogPin); lcd.clear(); // Очищаем дисплей if(sensorValueDI==LOW) { ksd++; } ну собственно поэтому он и начинает прибавлять единицу, заведи флаг как описал Serg. ============
// gloabal value bool statusLight // переменная отвечает включен ли свет bool last_statusLight // последний сохраненный статус света
void setup() { .... statusLight = digitalRead(sensor); // смотрим включен ли свет изначально last_statusLight = statusLight; // пишем как последнее изменение .... }
void loop() { ....
statusLight =digitalRead(sensor); // считываем с датчика; if( statusLight == LOW /*датчик показал что свет выключен*/ && statusLight != last_statusLight /* и последний статус был включен*/ ) // тогда увеличиваем счетчик { ksd++; }
last_statusLight = statusLight ; // сохраняем последний статус датчика .... }
зы: написал на коленке)
Сообщение отредактировал vitalik - Четверг, 10.07.2014, 08:04 |
| |
| |