Поправка в Цикличном повторе включения

Тема в разделе "Arduino & Shields", создана пользователем ffffff, 15 ноя 2018.

  1. ffffff

    ffffff Нерд

    Доброго времени суток дорогие знатоки, написал небольшой код который считывает данные с датчика отправляет данные на транзистор , тот в свою очередь Шимом зажигает ленты. Вроде все обычно и понятно. Но проблема в том, что при попадании обьекта в pir, он срабатывает повторно и соответсвенно зажигает лед еще раз. Хотелось бы чтобы датчик постоянно опрашивал себя и зажигал ленту только во время действия обьекта и держал включенным ленту и выключал при отстутствии сигнала.

    Код (C++):
    unsigned long tim_e;
    byte transPin = 5;  // инициализируем пин для транзистора
    byte PirPin = 8;  // PIR инициализируем пин для получения сигнала от пироэлектрического датчика движения
    boolean pirState = LOW;  // состояние датчика
    boolean val = 0;  // переменная для чтения состояния пина
    int fadeValue = 0; // переменная для плавного вкл ленты
    //int ledstrip = 7;    // LED connected to digital pin 5

    void setup() {
      Serial.begin (9600);
      pinMode(transPin, OUTPUT);  // объявляем светодиод в качестве  OUTPUT
      pinMode(PirPin, INPUT);  // объявляем датчик в качестве INPUT
    }
    void loop() {
      val = digitalRead(PirPin);  // считываем значение с датчика
      if (millis() - tim_e > 5000) { // каждые 5 секунд смотрим
      tim_e = millis (); // приравниваем текущее с настоящим
        //pirState = HIGH; // включаем флаг значения датчика на HIGH
      switch (val){ // сравниваем значения  переменной val
      case (HIGH) :
        Serial.println("efefefe");
        for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 20) // цикл на плавное вкдючение
        {
          analogWrite(transPin, fadeValue); // выводим цикл на контакт транзистора
          delay(50);// задержка для плавного вывода
         }
         delay (5000); // ждем 15 сек
       //  pirState = LOW;
         break;
      case (LOW):
       digitalWrite (transPin, LOW);
       break;
      }
      }
    if (millis() < tim_e) // если больше 50 дней то сбрасываем время в 0
    tim_e = millis();
    }
     

    Вложения:

  2. DetSimen

    DetSimen Guest

    А ведь у бедного транзистора даже рта для данных нет, я боюсь прецтавить, куда ты ему их пхаешь
     
  3. ffffff

    ffffff Нерд

    Не представляй , просто посмотри
     

    Вложения:

  4. parovoZZ

    parovoZZ Гуру

    мы-то что должны сделать?
     
  5. ffffff

    ffffff Нерд

    Поправить меня , направить что нужно сделать дабы датчик не выдавал ложных срабатываний
     
  6. Daniil

    Daniil Гуру

    Не проверять пир?
    Или убрать управление лентой из пира.
    Или описать подробнее что у вас есть, как соединили и что хотите получить. Желательно, подсказать нам где, как вы думаете, у вас ошибка.
     
  7. parovoZZ

    parovoZZ Гуру

    бери лист бумаги и рисуй алгоритм. За тебя этого никто делать не будет. Как нарисуешь - выкладывай сюда. А по алгоритму нарисовать код любая обезьяна сможет.
     
    DetSimen и Daniil нравится это.