Нужна помощь новичку с пьезо-пищалкой

Тема в разделе "Arduino & Shields", создана пользователем rrrrr_meow, 15 фев 2017.

  1. rrrrr_meow

    rrrrr_meow Нуб

    Собрал схему с фоторезистором, диодами и пьезо-пищалкой (так мне захотелось). При уменьшении освещенности включаются светодиоды, при увеличении - отключаются (типа светильник), с этим проблем не возникло. Захотел поставить пищалку, чтобы при уменьшении освещенности она срабатывала, НО срабатывала определенное количество раз и глохла, и чтобы так было каждый раз при уменьшении освещенности. Можно код пищалки запихнуть в 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);
     
      }

    }
     
    Последнее редактирование: 15 фев 2017
  2. rkit

    rkit Гуру

    Заведите переменную с количеством срабатываний, и считайте. Когда надо - сбрасывайте в 0.
     
  3. rrrrr_meow

    rrrrr_meow Нуб

    можно приблизительно пример или где почитать
     
  4. Karabas

    Karabas Гик

    Примерно как это может выглядеть, срабатывает при снижении яркости.
    Код (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;
     
  5. rkit

    rkit Гуру

    Это не уравнение.
     
  6. Karabas

    Karabas Гик

    Тут проверяется не уменьшилась ли яркость и если да, то если больше чем на десять попугаев, то выполнить условие.
    sensorPrev это предыдущие значение освещенности, определяется этой строчкой sensorPrev = sensorCurrent;

    В моем примере пикать будет каждый раз при снижении яркости на 10, если нужно некое пороговое значение, добавьте еще условие.

    ps если расскажете что именно нужно, и что происходит\не происходит, будет проще помочь
     
    Последнее редактирование: 16 фев 2017
  7. serg_admin

    serg_admin Гик

    Немножко дописал Ваш код. Возможно это то, что Вы хотели.

    Код (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);
      }
    }
     
    rrrrr_meow нравится это.
  8. mcureenab

    mcureenab Гуру

    Если переписать выражение в более наглядном виде:

    Код (C++):
    if ( sensorPrev - sensorCurrent > 0 && sensorPrev - sensorCurrent > 10)
    Становится ясно, что первое условие избыточно.

    Достаточно только этого.

    Код (C++):
    if ( sensorPrev - sensorCurrent > 10)
     
  9. mcureenab

    mcureenab Гуру

    Такой код может не срабатывать, если освещенность снижается слишком медленно. Причем требуется, чтобы за итерацию освещенность уменьшилась на 10. Но длительность итерации явно не определена.
     
  10. serg_admin

    serg_admin Гик

    Судя по коду автор имел ввиду - срабатывание пищалки при снижение яркости ниже 60-ти попугаев. А не буквально на каждое снижение.
     
    rrrrr_meow нравится это.
  11. rrrrr_meow

    rrrrr_meow Нуб

    Спасибо огромное) То что нужно!)