Опять я

Тема в разделе "Arduino & Shields", создана пользователем ИванМорозов, 30 мар 2017.

  1. так и не удалось у меня сделать что хотел . Счетчик идет только при нажатие и , то если нажать 2 раза . А хотелось бы при включение ардуино счетчик шел и при 1 нажатие на кнопку останавливался ну соответсвено
    при нажатие еще раз он продолжался . мне уже помогали и даже написали сам код http://forum.amperka.ru/threads/ЭТО-ПРОСТО.11382/#post-110293 . но чет не очень у меня получилось его доделать . PS может кто поможет


    Код (C++):
    const int BUTTON=5; // Контакт 5 для подключения кнопки
    int code = 0;
    boolean enableCounter;
    int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки
    int prevButton = LOW; // Переменная для сохранения предыдущего состояния

    void setup()
    {
      Serial.begin(9600);
      pinMode(BUTTON, INPUT_PULLUP);
      enableCounter = true;
    }

    void loop ()




    {
    tekButton=digitalRead(BUTTON);
    if (tekButton == HIGH && prevButton == LOW)
    {

    enableCounter = !enableCounter;    // меняем состояние переменной на противоположное
    if (true == enableCounter)           // если отсчет разрешен
      {
        code++;                            // увеличиваем счетчик
        if (code >= 60) code = 0;          // пограничные условия
        Serial.println(code);
        delay(10);
      }

    }
    prevButton=tekButton;
    }
     
    NikitOS нравится это.
  2. NikitOS

    NikitOS Король шутов Администратор

    Что именно не получается
     
    ИванМорозов нравится это.
  3. Получается так: загрузил код, открываю сериал - счётчик не идёт , нажимаю и держу кнопку - счётчик идёт , опять отпускаю не идёт . Хотелось чтобы при нажатие он оставливался и при повторном нажатие он продолжался
     
    NikitOS нравится это.
  4. NikitOS

    NikitOS Король шутов Администратор

    Код (C++):
    const int BUTTON=5; // Контакт 5 для подключения кнопки
    int code = 0;
    boolean enableCounter;
    int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки
    int prevButton = LOW; // Переменная для сохранения предыдущего состояния

    void setup()
    {
      Serial.begin(9600);
      pinMode(BUTTON, INPUT_PULLUP);
      enableCounter = true;
    }

    void loop ()




    {
    tekButton=digitalRead(BUTTON);
    if (tekButton == HIGH && prevButton == LOW)
    {
    while{
    enableCounter = !enableCounter;    // меняем состояние переменной на противоположное
    if (true == enableCounter)           // если отсчет разрешен
      {
        code++;                            // увеличиваем счетчик
        if (code >= 60) code = 0;          // пограничные условия
        Serial.println(code);
        delay(10);
      }else{
         if(tekButton == LOW && prevButton == HIGH){
         while{
           !enableCounter = enableCounter
              if(tekButton == HIGH && prevButton == LOW){
                      code++;                            // увеличиваем счетчик
        if (code >= 60) code = 0;          // пограничные условия
        Serial.println(code);
        delay(10);
      }
    }
    }
    prevButton=tekButton;
    }
     
  5. NikitOS

    NikitOS Король шутов Администратор

    ААа! понял! минутку......
     
  6. NikitOS

    NikitOS Король шутов Администратор

    Код (C++):
    #define BUTTON_PIN    5
    boolean buttonWasUp =  true;
    int code = 0;
    boolean enableCounter;
    void setup(){
      pinMode(BUTTON_PIN, INPUT_PULLUP);
      Serial.begin(9600);
      enableCounter = true;
    }
    void loop(){
      boolean buttonIsp = digitalRead(BUTTON_PIN);
      if(buttonWasUp && buttonIsUp){
        delay(10);
        buttonIsUp = digitalRead(BUTTON_PIN);
        if(!buttonIsUp){
          enableCounter = !enableCounter;    // меняем состояние переменной на противоположное
    if (true == enableCounter)           // если отсчет разрешен
      {
        code++;                            // увеличиваем счетчик
        if (code >= 60) code = 0;          // пограничные условия
        Serial.println(code);
        delay(10);
      }
        }
      }
      buttonWasUp = buttonIsUp ;
    }
     
     
  7. Ага , зава попробую и отпишусь СПАСИБО
     
  8. NikitOS

    NikitOS Король шутов Администратор

    если можешь напиши результат на телефон(скину)
     
  9. fogary

    fogary Гик

    Так не проще (при условии, что нажатие кнопки = HIGH)?
    Код (C++):
    void loop () {
      if (digitalRead(BUTTON) == HIGH) {
        enableCounter = !enableCounter;
      }

      if (enableCounter) {
        Serial.println(code);
        (code < 59) ? code++ : code = 0;
        delay(10);
      }
    }
     
    Tomasina нравится это.
  10. serg_admin

    serg_admin Гик

    Tck
    Если кнопку нажать на секунду. Счетчик включится/выключится 100 раз.
    Рулетка получилась.
     
  11. serg_admin

    serg_admin Гик

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

    А что считаем - то?
     
  12. fogary

    fogary Гик

    Ваша правда, не заметил.
    Тогда может быть так?
    Код (C++):
    void loop () {
      tekButton = digitalRead(BUTTON);
      if (tekButton == HIGH) && (prevButton == LOW)) {
        enableCounter = !enableCounter;
      }
      prevButton = tekButton;

      if (enableCounter) {
        Serial.println(code);
        (code < 59) ? code++ : code = 0;
        delay(10);
      }
    }
     
  13. Код (C++):
    const int BUTTON=5; // Контакт 5 для подключения кнопки
    int code = 0;
    boolean enableCounter;
    int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки
    int prevButton = LOW; // Переменная для сохранения предыдущего состояния

    void setup()
    {
      Serial.begin(9600);
      pinMode(BUTTON, INPUT);
      enableCounter = true;
    }

    void loop () {
      tekButton = digitalRead(BUTTON);
      if (tekButton == HIGH) && (prevButton == LOW)) {
        enableCounter = !enableCounter;
      }
      prevButton = tekButton;

      if (enableCounter) {
        Serial.println(code);
        (code < 59) ? code++ : code = 0;
        delay(10);
      }
    }
     
     
  14. он теперь ругается на


    Arduino: 1.8.1 (Windows 10), Плата:"Arduino Nano, ATmega328"

    C:\Users\PC\AppData\Local\Temp\arduino_modified_sketch_95477\sketch_mar30a.ino: In function 'void loop()':

    sketch_mar30a:16: error: expected identifier before '(' token

    if (tekButton == HIGH) && (prevButton == LOW)) {

    ^

    exit status 1
    expected identifier before '(' token

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"


    не могу понять почему
     
  15. эээээээ скобку я не увидел
     
  16. не выходит(((( хочу сделать что бы при определенном значение мигал светодиод
    не могу понять как повторно крутить ( if )

    Код (C++):
    const int BUTTON=5; // Контакт 5 для подключения кнопки
    int code = 0;
    boolean enableCounter;
    int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки
    int prevButton = LOW; // Переменная для сохранения предыдущего состояния
    #define ledcashPin_1 10               //индикатор что идет отчет


    void setup()
    {
      Serial.begin(9600);
      pinMode(BUTTON, INPUT);
      enableCounter = true;
    pinMode(ledcashPin_1, OUTPUT);   //индикатор что идет отчет
    }

    void loop () {
      tekButton = digitalRead(BUTTON);
      if ((tekButton == HIGH) && (prevButton == LOW)) {
        enableCounter = !enableCounter;
      }
      prevButton = tekButton;

      if (enableCounter)
    {
        Serial.println(code);
        (code < 43200) ? code++ : code = 0;
     
    if (code==100 && 300 && 600 && 900 && 1200)  // индикация
      {
        digitalWrite(ledcashPin_2, LOW);
      }
        else if (code==500 && 400 && 700 && 900 && 1200)

        digitalWrite(ledcashPin_2, HIGH);


      }

    }
     
    Последнее редактирование: 3 апр 2017
  17. serg_admin

    serg_admin Гик

    Неправильно:
    Код (C++):
    code==100 && 300 && 600 && 900 && 1200
    Правильно:
    Код (C++):
    (code==100) || (code==300) || (code==600) || (code==900) || (code==1200)