Светодиод и кнопка. подскажите нюанс в скетче

Тема в разделе "Arduino & Shields", создана пользователем Suro, 1 июл 2017.

  1. Suro

    Suro Нерд

    помогите пожалуйста в скетче ,,
    как можно это делать:
    1. когда Arduino получает 10 импульсов - отправить на светодиод 11 импульсов.
    2. а когда Arduino получает 20 импульсов - отправить на светодиод 14 импульсов.

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

    к примеру возмем этот скетч ,, что надо здесь изменить ??

    Код (C++):
    const int buttonPin = 2; // номер входа, подключенный к кнопке
    const int ledPin = 7; // номер выхода светодиода
    boolean lastButten = LOW; // предыдущее состояние кнопки
    boolean currentButten = LOW; // текущее состояние кнопки
    int status = 0;


    void setup()
    {
      pinMode(buttonPin, INPUT);
      pinMode(ledPin, OUTPUT);

    }

    boolean debvance (boolean last) //убираем дребизг
    {
    boolean current = digitalRead (buttonPin); // считываем данные с кнопки
    if (last != current) // Если текущее состояни еотличететься от предыдущего
    {
    delay (5); // Ждем 5 милисек.
    current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current;
    }
    }

    void loop(){
    currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
    if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
    {
    status = ++status; // инвертируем Статус
    }
    lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки

    if (status == 10) //если статус 5
    {
    for (int i=0; i<11; i++){
    digitalWrite(ledPin,HIGH);
    delay(50);
    digitalWrite(ledPin,LOW);
    delay(50);
    }
    status = 0;
    }
    else  // усди нажали не 5 раз выключаем светодиод
    {
    digitalWrite(ledPin,LOW);
    delay(20); // Ждем
    }
      }
     
  2. qwone

    qwone Гик

    Ясно , что надо заменить или программиста или автора ТЗ. Ответьте для начала, как может Ардуина отличить один 10 импульс (последний в из серии 10импульсов) от другого 10 импульса (10-го из серии 20 импульсов).Ведь Ардуина не электросенс и не видет будущего.
     
  3. Suro

    Suro Нерд

    ну и как написать скетч что он отличал??
    ну я думаю что может быть так ,, когда получил первый импульс жди 3 секунды пока все импульсы придут и только тагда выполняй комманды
     
  4. Securbond

    Securbond Гуру

    Нужна ещё одна переменная, которая при каждом импульсе увеличивается на единицу. Затем идёт проверка значения. Как только значение = 10,переменная обнуляется и даёт команду на светодиод. Начинается новый отсчет.
     
  5. Securbond

    Securbond Гуру

    Чтобы считать ещё 10, сделайте переменную с отсчетом десятков, или просто условие что счётчик = 20.
     
  6. Suro

    Suro Нерд

    можете показать маленький пример?
     
  7. Securbond

    Securbond Гуру

    Вы только копипастите? Или сами хотите научиться ? У вас в скетче условие которое проверяет переменную status. Если она == 10, то выполняется for. В конце цикла for переменная обнуляется. Вам же нужно добавить условие что бы переменная status обнулялась после значения == 20. (Условие при значении == 10, остаётся)
     
    Последнее редактирование: 1 июл 2017
  8. Suro

    Suro Нерд

    не работает брат(
     
  9. Suro

    Suro Нерд

    просто я новичок и многое что у меня не получется ,, поэтому прошу помощи у тех кто знаеет !!
     
  10. mcureenab

    mcureenab Гуру

    Я так понимаю,
    Сначала скетч ждёт первый импульс.
    Захватывает текущее время и считает импульсы, пока время меньше 3 сек.
    Через 3 сек проверяет сколько импульсов пришло.
    Если не менее 20 , мигает 14 раз и возвращается к ожиданию первого импульса.
    Если не менее 10, мигает 10 раз и вощвращается к ожиданию первого импульса.

    Понятно, что серии импульсов должны приходить не чаще чем через 3 сек.
     
  11. Suro

    Suro Нерд

    да брат джан ты понял очень правильно ))
     
  12. Suro

    Suro Нерд

    ?????