Подсчет срабатываний датчика - ФОРУМ ДВ Робот dvrobot.ru
Вторник, 16.10.2018, 01:59
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: Serg, GRACH  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Подсчет срабатываний датчика
    Подсчет срабатываний датчика
    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
    а лучше использовать прерывания smile
     
    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
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Подсчет срабатываний датчика
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат