Arduino для начинающих. Урок 2. Подключение кнопки

Share Button

bannerПродолжаем серию уроков “Arduino для начинающих”. Сегодня подключаем к ардуино кнопку и светодиод (при нажатой кнопке светодиод будет гореть, при отжатой — не гореть). Это одна из базовых схем, которая неоднократно пригодиться вам в будущем и может использоваться для управления роботом на Arduino. В вашем будущем роботе по нажатию кнопки могут происходить самые разные действия.

В посте помимо видео-инструкции приводим листинг программы и схему подключения.

Видео-инструкция сборки модели кнопки на Arduino:

Для сборки модели нам потребуется:

  • плата Arduino
  • Breadboard
  • 5 проводов и/или перемычек «папа-папа»
  • светодиод
  • кнопка
  • резисторы на 10 кОм и 220 Ом.
компоненты

Что понадобится для подключения кнопки на Arduino?

Схема подключения модели Arduino с кнопкой и светодиодом:

подключить на Arduino кнопку и светодиод

Схема подключения кнопки и светодиода на Arduino

Также вам потребуется программа Arduino IDE, которую можно скачать с сайта Arduino.

Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):
int button = 2;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop(){
if (digitalRead(button) == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}

Так выглядит собранная модель Arduino кнопки со светодиодом:

схема

Готовая модель с кнопкой и светодиодом на Arduino

На этом второй урок «Arduino для начинающих» закончен. Продолжение следует!

саша

Смотрите также:

Учебный курс «Arduino для начинающих»: главная страница.

Посты по урокам:

  1. Первый урок: Светодиод
  2. Второй урок: Кнопка
  3. Третий урок: Потенциометр
  4. Четвертый урок: Сервопривод
  5. Пятый урок: Трехцветный светодиод
  6. Шестой урок: Пьезоэлемент
  7. Седьмой урок: Фоторезистор
  8. Восьмой урок: Датчика движения (PIR) и E-mail
  9. Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22

Все посты сайта «Занимательная робототехника» по тегу Arduino.

Наш YouTube канал, где публикуются видео-уроки.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Автор: Александр Гагарин

Share Button

55 комментариев к статье “Arduino для начинающих. Урок 2. Подключение кнопки”

  1. Сергей

    02.11.2014

    Мне очень понравилось с фоторезистором. А сделайте пожалуйста навесным монтажом.

    Ответить на этот комментарий
  2. Вячеслав

    28.02.2015

    С +5V провод идет на кнопку и через резистор на землю? Это же почти к.з.?

    Ответить на этот комментарий
  3. Констатин

    06.03.2015

    Добрый день!
    Подскажите пожалуйста уже 100500 раз собирал эту схему у вас в видео светодиод не горит, а после нажатия кнопки горит, у меня он горит всегда только после нажатия кнопки он горит чуть ярче. в чем может быть дело?

    Ответить на этот комментарий
    • Занимательная робототехника

      07.03.2015

      Добрый день. Если просто соединить выводы кнопки через резистор с пином контроллера и землей, то это не работает. При нажатии кнопки пин соединяется с землей, и digitalRead будет считывать логический 0, но при отпущенной кнопке пин не будет соединен ни с какой линией и будет «висить в воздухе», и программа будет считать с вывода и 0 и 1 случайным образом. Правильное подключение предполагает, что в разомкнутом состоянии пин должен быть соединен через резистор с шиной питания, а в замкнутом — с землей, либо наоборот. Попробуйте и так, и так.
      Внутри микроконтроллера есть подтягивающие резисторы. Но они могут быть программно включены или выключены. Попробуйте включить и выключить подтягивающие резисторы программно.
      После того, как пин установлен в режим входа, чтобы включить на нем подтягивающий резистор нужно «записать в него 1» с помощью digitalWrite.

      void setup() {
      pinMode(8, OUTPUT);
      pinMode(2, INPUT);
      digitalWrite(2, HIGH); //включаем подтягивающий резистор
      }
      void loop() {
      digitalWrite(8, !digitalRead(2));
      }

      Ответить на этот комментарий
      • Макс

        24.02.2019

        int LED=0;
        void setup() {
        pinMode(13, OUTPUT);
        pinMode(5, INPUT_PULLUP);
        Serial.begin(9600);
        }

        void loop() {
        bool x=digitalRead(5);
        delay(200);
        if (x ==false)
        {
        Serial.print(«Кнопка нажата! «);
        if(LED ==1)
        { digitalWrite(13, LOW); LED=0; Serial.println(» Свет выключен! «);}
        else{digitalWrite(13,HIGH); LED=1; Serial.println(» Свет включен! «);}
        }
        }

        Ответить на этот комментарий
    • Марина

      04.10.2016

      Была такая же проблема, долго не понимала в чем дело.
      Оказалось, просто не до конца воткнула кнопку :)

      Ответить на этот комментарий
  4. Михаил

    15.05.2015

    Что нужно изменить в вашем коде, чтобы было так :
    нажал на кнопку один раз — лампочка включилась,
    нажал второй раз — выключилась… и так далее.. ?

    Ответить на этот комментарий
    • Денис

      19.05.2015

      Есть множество вариантов решения данной задачи. Например такой:

      const int buttonPin = 2;
      const int ledPin = 13;

      void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
      }

      void loop() {
      digitalRead(buttonPin);
      while(!digitalRead(buttonPin)){}
      digitalWrite(ledPin, HIGH);
      while(digitalRead(buttonPin)){}
      while(!digitalRead(buttonPin)){}
      digitalWrite(ledPin, LOW);
      while(digitalRead(buttonPin)){}

      }

      Ответить на этот комментарий
      • Роман

        30.05.2015

        Здравствуйте, можно ли void loop() построчно комментарий?

        Ответить на этот комментарий
        • Занимательная робототехника

          30.05.2015

          void loop() {
          digitalRead(buttonPin); //считываем значение с кнопки
          while(!digitalRead(buttonPin)){} //пока кнопка не нажата ждем
          digitalWrite(ledPin, HIGH); //включаем светодиод
          while(digitalRead(buttonPin)){} //пока кнопка еще нажата ждем
          while(!digitalRead(buttonPin)){}//пока кнопка не нажата ждем
          digitalWrite(ledPin, LOW); //выключаем светодиод
          while(digitalRead(buttonPin)){} //пока кнопка еще нажата ждем
          }
          То есть: ждем нажатия кнопки и включаем светодиод, затем ждем отжатия кнопки и повторного нажатия, выключаем светодиод, ждем отжатия кнопки.

          Ответить на этот комментарий
          • Толик

            13.10.2016

            ошибки выдаёт с воид лупом чёта

      • Youjinn

        21.10.2016

        Подскажите что может быть, заюзал ваш код для кноки, все вроде работает но на 5-6 нажатия когда светодиод должен выключаться он горит, или должен гореть — выключаеться. В общем не 100% получаеться связь между кнопкой и светодиодом. Иногда проскакивает

        Ответить на этот комментарий
    • Денис

      19.05.2015

      или можно запустить образец из digital -> debounce
      он делает то же самое

      Ответить на этот комментарий
  5. Вячеслав

    30.06.2015

    Здравствуйте подскажите что нужно добавить в скейч что б алгоритм работы был таков: 2 кнопки Одно нажатие на кнопку 1 светодиод загорается горит 5 сек и затухает,если нажать на вторую то светик сразу гаснет??

    /*
    intledPin = 12;
    int buttonApin = 8;
    int buttonBpin = 7;
    byte leds = 0;
    void setup()
    {
    pinMode(ledPin, OUTPUT);
    pinMode(buttonApin, INPUT_PULLUP);
    pinMode(buttonBpin, INPUT_PULLUP);
    }
    Void loop()
    {
    if (digitalRead(buttonApin) == LOW)
    {
    digitalWrite(ledPin, HIGH);
    delay(5000);
    digitalWrite(12, LOW);
    }
    if (digitalRead(buttonBpin) == LOW)
    {
    digitalWrite(ledPin, LOW);
    }
    }

    Ответить на этот комментарий
  6. Занимательная робототехника

    30.06.2015

    Ваш скетч не работает, потому что программа выполняет delay(5000), в этот момент ничего больше выполняться не может.
    Можно использовать функцию millis(), возвращающую, сколько миллисекунд прошло с начала работы программы.

    int ledPin = 12;
    int buttonApin = 8;
    int buttonBpin = 7;
    void setup()
    {
    pinMode(ledPin, OUTPUT);
    pinMode(buttonApin, INPUT_PULLUP);
    pinMode(buttonBpin, INPUT_PULLUP);
    }
    void loop()
    {
    unsigned long currentMillis = 0;
    if (digitalRead(buttonApin) == LOW)
    {
    digitalWrite(ledPin, HIGH);
    currentMillis = millis();
    }
    if (digitalRead(buttonBpin) == LOW || millis()-currentMillis>5000)
    {
    digitalWrite(ledPin, LOW);
    }
    }

    Ответить на этот комментарий
  7. Антон

    08.08.2015

    Помогите пожалуйста. 100 раз все проверил — светодиод не загорается. Такое ощущение, что не идет питание 5V с платы. Как можно просто диагностировать эту неисправность?

    Ответить на этот комментарий
    • Денис

      10.08.2015

      Во-первых, нужно убедиться, что пины правильные. Далее, лучше всего проверить мультиметром.
      Еще для простоты можно светодиод воткнуть напрямую к 5в и земле. Если будет гореть (может и взорвется), то питание идет и проблема в подключении.
      Чтобы проверить подключение собственно кнопки можно загрузить код
      int pushButton = 2;

      void setup() {
      Serial.begin(9600);
      pinMode(pushButton, INPUT);
      }

      void loop() {
      int buttonState = digitalRead(pushButton);
      Serial.println(buttonState);
      delay(100);
      }

      И зайти в монитор порта. Если выдает при нажатии 1, то кнопка работает.

      Ответить на этот комментарий
  8. Михаил

    11.08.2015

    Почему не удаётся плавно запустить светодиод?

    //Свет плавно загорается после нажатия кнопки, кнопка нажимается ещё раз, свет моргает и гаснет.
    int button = 2;
    int led = 9;
    int i = 0;

    void setup() {

    pinMode(led, OUTPUT);

    pinMode(button, INPUT);

    }

    void loop() {
    digitalRead(button); //считываем значение с кнопки
    while(!digitalRead(button)){} //пока кнопка не нажата ждем
    do{
    analogWrite(led, i);
    i = i+1;
    }
    while(i==255);//включаем светодиод плавно
    digitalWrite(led, HIGH); //включаем светодиод
    while(digitalRead(button)){} //пока кнопка еще нажата ждем
    while(!digitalRead(button)){}//пока кнопка не нажата ждем
    digitalWrite(led, LOW);//моргаем несколько раз
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW); //выключаем светодиод
    while(digitalRead(button)){} //пока кнопка еще нажата ждем
    }

    Ответить на этот комментарий
  9. Михаил

    11.08.2015

    Благодарю, Денис! Сейчас въехал, у меня проверка условия была не верна. Сделал вот так, сейчас всё красиво.
    //Свет плавно загорается после нажатия кнопки, кнопка нажимается ещё раз, свет моргает и гаснет.
    int button = 2;
    int led = 9;
    int i = 0;

    void setup() {

    pinMode(led, OUTPUT);

    pinMode(button, INPUT);

    }

    void loop() {
    digitalRead(button); //считываем значение с кнопки
    while(!digitalRead(button)){} //пока кнопка не нажата ждем
    do
    {
    analogWrite(led, i);
    i = i+1;
    delay(10);
    } while(i<100);//включаем светодиод плавно медленно
    do
    {
    analogWrite(led, i);
    i = i+1;
    delay(5);
    } while(i<200);//включаем светодиод плавно средне
    do
    {
    analogWrite(led, i);
    i = i+1;
    delay(1);
    } while(i<255);//включаем светодиод плавно быстро
    i = 0;//обнуление счётчика
    digitalWrite(led, HIGH); //включаем светодиод
    while(digitalRead(button)){} //пока кнопка еще нажата ждем
    while(!digitalRead(button)){}//пока кнопка не нажата ждем
    digitalWrite(led, LOW);//моргаем несколько раз
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW); //выключаем светодиод
    while(digitalRead(button)){} //пока кнопка еще нажата ждем
    }

    Ответить на этот комментарий
  10. Влад

    19.10.2015

    Объясните пожалуйста неучу=) кнопка соединена с с +5v и с землей через резистор. Зачем вообще нужно соединять с землей кнопку? Может я что то недопонимаю в принципе работы кнопки?

    Ответить на этот комментарий
    • Занимательная робототехника

      20.10.2015

      Когда кнопка разомкнута, то если не было бы резистора, то на вход могли бы поступать хаотичные сигналы вместо ожидаемого нами отсутствия напряжения. Можно встретить терминологию «оставить вход в «подвешенном» состоянии». Причина — шумы, образующиеся вокруг провода производят электричество из электромагнитных волн среды.
      Стягивающий резистор рядом со входом гарантирует отсутствие напряжения при разомкнутой цепи (кнопка не нажата — цепь разомкнута).

      Ответить на этот комментарий
  11. sergey

    15.11.2015

    Подтягивающий резистор всегда ставится к +5в а тут наоборот . Почему? Почему не используется внутренний подтягивающий резистор?

    Ответить на этот комментарий
  12. Ренат

    29.11.2015

    Здравствуйте.Как можно проделать этот алгоритм .По кнопке меняется режим скорости переключения диодов (5с 2c 1c 0.5c)

    Ответить на этот комментарий
  13. ЗёБрА

    04.12.2015

    Подскажите как создать светильник из ARDUINO UNO У меня набор «Матрёшка» НО он выводит ОЩИБКЮ!!!!! когда вожу код

    Ответить на этот комментарий
  14. Владимир

    20.01.2016

    Скажите пожалуйста, насколько я понимаю, перед записью нового кода, нужно удалить старый с памяти платы. Как это сделать?

    Ответить на этот комментарий
  15. Александр

    28.01.2016

    помогите пожалуйста
    нужно чтобы при зажатии кнопка тоесть нажал и не отпускаеш
    загорелся светодиод и проигрался на mini MP3 1 трек и мр3 выключился а светодиод продолжал гореть если отпустить кнопку то все должно выключится
    у меня просто получается что Mp3 гоняет один трек по кругу и я не совсем понимаю как мр3 должен выйти из цикла

    #include
    #include
    int switchPin = 9;
    int ledPin = 7;

    void setup()
    {
    Serial.begin (9600);
    mp3_set_serial (Serial);
    mp3_set_volume (5);
    delay (100);
    pinMode (switchPin, INPUT);
    pinMode (ledPin, OUTPUT);
    }

    void loop()
    {

    if (digitalRead(switchPin) == HIGH)
    {
    digitalWrite(ledPin, HIGH);

    }
    else
    {
    digitalWrite(ledPin, LOW);

    }
    if (digitalRead(switchPin) == HIGH)
    {
    delay(500);
    mp3_play(1);
    delay(5000);
    mp3_stop();

    }
    else
    mp3_stop();

    }

    Ответить на этот комментарий
    • Денис

      30.01.2016

      Т.е. проблема в том, что если кнопка зажата то мп3 должен проиграть мелодию и после этого остановиться, а сейчас при зажатии трек повторяется?

      Ответить на этот комментарий
  16. Александр

    28.01.2016

    как мне выйти из цикла только для mp3 не совсем понимаю

    Ответить на этот комментарий
  17. ромча

    06.03.2016

    very very veryveryvery GOOD!
    пРЕКРАСНО

    Ответить на этот комментарий
  18. Alex

    16.03.2016

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

    int led_1 = 2;
    int led_2 = 3;
    int led_3 = 4;
    int led_4 = 5;

    int button_1 = 6;
    int button_2 = 7;
    int button_3 = 8;
    int button_4 = 9;

    int button_5 = 10;
    int button_6 = 11;
    int button_7 = 12;
    int button_8 = 13;

    int button_9 = A0;
    int button_10 = A1;
    int button_11 = A2;
    int button_12 = A3;

    int button_13 = A4;
    int button_14 = A5;

    void setup()
    {
    Serial.begin(9600);
    Serial.println();

    pinMode(led_1, OUTPUT);
    pinMode(led_2, OUTPUT);
    pinMode(led_3, OUTPUT);
    pinMode(led_4, OUTPUT);

    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(button_3, INPUT);
    pinMode(button_4, INPUT);

    pinMode(button_5, INPUT);
    pinMode(button_6, INPUT);
    pinMode(button_7, INPUT);
    pinMode(button_8, INPUT);

    pinMode(button_9, INPUT);
    pinMode(button_10, INPUT);
    pinMode(button_11, INPUT);
    pinMode(button_12, INPUT);

    pinMode(button_13, INPUT);
    pinMode(button_14, INPUT);

    }

    void loop()

    {

    if (digitalRead(button_1) == HIGH)
    {
    digitalWrite(led_1,HIGH);
    }
    else
    {
    digitalWrite(led_1,LOW);
    }

    if (digitalRead(button_2) == HIGH)
    {
    digitalWrite(led_2,HIGH);
    }
    else
    {
    digitalWrite(led_2,LOW);
    }

    if (digitalRead(button_3) == HIGH)
    {
    digitalWrite(led_3,HIGH);
    }
    else
    {
    digitalWrite(led_3,LOW);
    }

    if (digitalRead(button_4) == HIGH)
    {
    digitalWrite(led_4,HIGH);
    }
    else
    {
    digitalWrite(led_4,LOW);
    }
    //**************************************

    if (digitalRead(button_5) == HIGH)
    {
    digitalWrite(led_1,HIGH);
    }
    else
    {
    digitalWrite(led_1,LOW);
    }

    if (digitalRead(button_6) == HIGH)
    {
    digitalWrite(led_2,HIGH);
    }
    else
    {
    digitalWrite(led_2,LOW);
    }

    if (digitalRead (button_7) == HIGH)
    {
    digitalWrite(led_3,HIGH);
    }
    else
    {
    digitalWrite(led_3,LOW);
    }

    if (digitalRead (button_8) == HIGH)
    {
    digitalWrite(led_4,HIGH);
    }
    else
    {
    digitalWrite(led_4,LOW);
    }
    //**********************************

    if (digitalRead (button_9) == HIGH)
    {
    digitalWrite(led_1,HIGH);
    }
    else
    {
    digitalWrite(led_1,LOW);
    }

    if (digitalRead (button_10) == HIGH)
    {
    digitalWrite(led_2,HIGH);
    }
    else
    {
    digitalWrite(led_2,LOW);
    }

    if (digitalRead (button_11) == HIGH)
    {
    digitalWrite(led_3,HIGH);
    }
    else
    {
    digitalWrite(led_3,LOW);
    }

    if (digitalRead (button_12) == HIGH)
    {
    digitalWrite(led_4,HIGH);
    }
    else
    {
    digitalWrite(led_4,LOW);
    }
    //**********************************

    if (digitalRead (button_13) == HIGH)
    {
    digitalWrite(led_1,HIGH);
    }
    else
    {
    digitalWrite(led_1,LOW);
    }

    if (digitalRead (button_14) == HIGH)
    {
    digitalWrite(led_3,HIGH);
    }
    else
    {
    digitalWrite(led_3,LOW);
    }

    }

    Ответить на этот комментарий
  19. Макс

    31.08.2016

    Подскажите мне не грамотному, как в уроке № 2, где собирают кнопку+диод, как модифицировать схему, чтобы нажимаешь на кнопку и диод продолжает гореть, еще раз нажимаешь диод гаснет. В исходном решении нажимаешь — горит, отпускаешь гаснет. Спасибо

    Ответить на этот комментарий
  20. Дмитрий

    26.10.2016

    Помогите пожалуйста моя идея работы скетча такая : один раз нажмешь на кнопку и все 6 светодиодов приемом бегущего огонька работают все время пока не нажмешь второй раз кнопку. Если второй раз нажать на кнопку то они перестают работать.

    int button = 10;

    int led = 2;

    void setup() {
    int pin = 2;
    for (pin = 2 ; pin <= 7 ; pin = pin + 1) {
    pinMode ( pin , OUTPUT) ;
    }
    pinMode(led, OUTPUT);
    pinMode(button, INPUT);
    bool flag = false;
    }

    int delay_len = 20 ;

    void loop() {
    if (button == 1) {
    for (pin = 2 ; pin <= 7 ; pin = pin + 1) {
    blink (pin);
    }
    void blink ( int pin ) {
    digitalWrite ( pin, HIGH ) ;
    delay ( delay_len );
    digitalWrite ( pin, LOW ) ;
    delay ( delay_len );
    }
    }
    if (digitalRead (button) == HIGH)
    if (flag == true ;
    if flag == false ;
    else
    if flag == true) {
    digitalWrite(pin, HIGH);
    else
    digitalWrite(pin, LOW);
    delay(500);
    }
    }

    Ответить на этот комментарий
    • Артем

      29.10.2016

      Такая же проблема, один в один. Никак не могу понять как комбинировать несколько кодов вместе. По отдельности все работает, а как объединить кнопку и бегущую строку не понимаю.

      Ответить на этот комментарий
  21. Александр

    02.11.2016

    Подскажите пожалуйста как добавить кнопку чтобы отключались 6 ть каналов шим ? Вот мой код :
    [code]
    int buttonPin = 7;
    int ledPin = 9;
    int potPin = A0;
    int led1Pin =3; // Светодиод подключен к выходу 3
    int led2Pin =5; // Светодиод подключен к выходу 5
    int led3Pin =6; // Светодиод подключен к выходу 6
    int led4Pin =9; // Светодиод подключен к выходу 9
    int led5Pin =10; // Светодиод подключен к выходу 10
    int led6Pin =11; // Светодиод подключен к выходу 11

    int analog1Pin = 3; // потенциометр подключен к выходу 3
    int analog2Pin = 3; // потенциометр подключен к выходу 3
    int analog3Pin = 3; // потенциометр подключен к выходу 3
    int analog4Pin = 3; // потенциометр подключен к выходу 3
    int analog5Pin = 3; // потенциометр подключен к выходу 3
    int analog6Pin = 3; // потенциометр подключен к выходу 3

    int val1 = 0; // переменная для хранения значения
    int val2 = 0; // переменная для хранения значения
    int val3 = 0; // переменная для хранения значения
    int val4 = 0; // переменная для хранения значения
    int val5 = 0; // переменная для хранения значения
    int val6 = 0; // переменная для хранения значения
    void setup()
    {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    pinMode(led1Pin, OUTPUT); // установка порта на выход
    pinMode(led2Pin, OUTPUT); // установка порта на выход
    pinMode(led3Pin, OUTPUT); // установка порта на выход
    pinMode(led4Pin, OUTPUT); // установка порта на выход
    pinMode(led5Pin, OUTPUT); // установка порта на выход
    pinMode(led6Pin, OUTPUT); // установка порта на выход
    }

    void loop()
    {
    val1 = analogRead(analog1Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led1Pin, val1 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val2 = analogRead(analog2Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led2Pin, val2 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val3 = analogRead(analog3Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led3Pin, val3 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val4 = analogRead(analog4Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led4Pin, val4 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val5 = analogRead(analog5Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led5Pin, val5 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val6 = analogRead(analog6Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led6Pin, val6 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    }

    [/code]

    Ответить на этот комментарий
  22. Александр

    02.11.2016

    Подскажите пожалуйста как добавить кнопку чтобы при однократном нажатии отключало 6 ть каналов шим одновременно а при повторном — включало? Вот мой код :
    [code]
    int buttonPin = 7;
    int ledPin = 9;
    int potPin = A0;
    int led1Pin =3; // Светодиод подключен к выходу 3
    int led2Pin =5; // Светодиод подключен к выходу 5
    int led3Pin =6; // Светодиод подключен к выходу 6
    int led4Pin =9; // Светодиод подключен к выходу 9
    int led5Pin =10; // Светодиод подключен к выходу 10
    int led6Pin =11; // Светодиод подключен к выходу 11

    int analog1Pin = 3; // потенциометр подключен к выходу 3
    int analog2Pin = 3; // потенциометр подключен к выходу 3
    int analog3Pin = 3; // потенциометр подключен к выходу 3
    int analog4Pin = 3; // потенциометр подключен к выходу 3
    int analog5Pin = 3; // потенциометр подключен к выходу 3
    int analog6Pin = 3; // потенциометр подключен к выходу 3

    int val1 = 0; // переменная для хранения значения
    int val2 = 0; // переменная для хранения значения
    int val3 = 0; // переменная для хранения значения
    int val4 = 0; // переменная для хранения значения
    int val5 = 0; // переменная для хранения значения
    int val6 = 0; // переменная для хранения значения
    void setup()
    {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    pinMode(led1Pin, OUTPUT); // установка порта на выход
    pinMode(led2Pin, OUTPUT); // установка порта на выход
    pinMode(led3Pin, OUTPUT); // установка порта на выход
    pinMode(led4Pin, OUTPUT); // установка порта на выход
    pinMode(led5Pin, OUTPUT); // установка порта на выход
    pinMode(led6Pin, OUTPUT); // установка порта на выход
    }

    void loop()
    {
    val1 = analogRead(analog1Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led1Pin, val1 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val2 = analogRead(analog2Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led2Pin, val2 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val3 = analogRead(analog3Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led3Pin, val3 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val4 = analogRead(analog4Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led4Pin, val4 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val5 = analogRead(analog5Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led5Pin, val5 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    val6 = analogRead(analog6Pin); // считываем значение с порта, подключенному к потенциометру
    analogWrite(led6Pin, val6 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
    }

    [/code]

    Ответить на этот комментарий
    • Николай

      30.12.2022

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

      int buttonState = digitalRead(buttonPin); // считываем состояние кнопки

      if (buttonState == LOW) { // если кнопка нажата
      // отключаем каналы PWM
      analogWrite(led1Pin, 0);
      analogWrite(led2Pin, 0);
      analogWrite(led3Pin, 0);
      analogWrite(led4Pin, 0);
      analogWrite(led5Pin, 0);
      analogWrite(led6Pin, 0);
      } else { // иначе (кнопка н

      Ответить на этот комментарий
      • Николай

        30.12.2022

        Чтобы реализовать однократное включение/выключение светодиодов при нажатии на кнопку, нужно использовать функцию digitalRead() для чтения состояния кнопки, а также использовать переменную, которая будет хранить состояние кнопки (нажата или отжата). Также может понадобиться использовать задержку, чтобы избежать многократного срабатывания кода при нажатии на кнопку.

        Чтобы реализовать отключение и включение нескольких каналов ШИМ при однократном нажатии на кнопку

        int buttonPin = 7;
        int led1Pin = 3;
        int led2Pin = 5;
        int led3Pin = 6;
        int led4Pin = 9;
        int led5Pin = 10;
        int led6Pin = 11;

        bool ledsOn = false;

        void setup()
        {
        pinMode(buttonPin, INPUT);
        pinMode(led1Pin, OUTPUT);
        pinMode(led2Pin, OUTPUT);
        pinMode(led3Pin, OUTPUT);
        pinMode(led4Pin, OUTPUT);
        pinMode(led5Pin, OUTPUT);
        pinMode(led6Pin, OUTPUT);
        }

        void loop()
        {
        // читаем состояние кнопки
        int buttonState = digitalRead(buttonPin);

        // если кнопка нажата
        if (buttonState == HIGH)
        {
        // инвертируем состояние переменной ledsOn
        ledsOn = !leds

        Ответить на этот комментарий
  23. islam

    20.11.2016

    int button = 2;
    int led = 8;
    void setup() {
    pinMode(led, OUTPUT);
    pinMode(button, INPUT);
    }
    void loop(){
    if (digitalRead(button) == HIGH) {
    digitalWrite(led, HIGH);
    }
    else {
    digitalWrite(led, LOW);
    }
    }
    помогите пожалуйста вместо одной кнопки сделать две кнопки

    Ответить на этот комментарий
  24. Adam

    27.03.2017

    Добрый день,есть кнопка нажимаешь включаешь 1 светодиод 2 паралельно мигает отпускаеш кнопку отключаешь обе светодиода

    Ответить на этот комментарий
  25. Ксения

    13.04.2017

    всем привет, подскажите, пожалуйста! мы сделали модель и код. рабоет так: нажал на кнопку — диод горит, еще раз нажал- потух. сейсам мне надо сделать так: нажал- слабо горит, еще нажал- сильнее горит, еще нажал- сильно горит, нажал еще-потух диод. прежний код выглядит так.
    int ledPin = 13;
    int switchPin = 8;
    boolean lastButton = LOW;
    boolean ledOn = false;
    boolean currentButton = LOW;

    void setup()
    {
    pinMode(ledPin, OUTPUT);
    pinMode(switchPin, INPUT);
    }

    boolean debounce (boolean last)
    {
    currentButton = digitalRead (switchPin);
    if (last != currentButton)
    {
    delay (5);
    currentButton = digitalRead (switchPin);
    }
    return currentButton;
    }

    void loop() {
    currentButton = debounce (lastButton);
    if(lastButton == LOW && currentButton == HIGH)
    {
    ledOn = !ledOn;
    }
    lastButton = currentButton;

    digitalWrite(ledPin, ledOn);
    }

    Ответить на этот комментарий
  26. Ivan

    29.04.2017

    Объясните пожалуйста, зачем в землю резистор. Объясните пожалуйста максимально простыми словами, никак не могу понять:(

    Ответить на этот комментарий
  27. питер

    02.07.2017

    Доброго дня . Подскажите пожалуйста зачем нужно резистором тянуть землю на кнопку , если при нажатии кнопка пропускает плюс ?

    Ответить на этот комментарий
  28. Владимир

    28.11.2017

    Здравствуйте. как будет выглядеть скейч на две кнопки и два светодиода которые будут выключается по времени. Например на 1 секунду

    Ответить на этот комментарий
  29. полина

    13.06.2018

    Как прописать код для радуино, чтобы светодиод загорался только при одновременном нажатии на 2 кнопки

    Ответить на этот комментарий
  30. Dana

    21.09.2018

    Включение светодиода с помощью кнопки
    Когда на кнопку нажали,включается светодиод
    Когда на кнопку не нажали,выключаем светодиод

    Ответить на этот комментарий
    • Глеб

      30.12.2022

      Для того, чтобы реализовать включение светодиода с помощью кнопки, нужно использовать функцию digitalRead, которая позволяет считывать состояние пина (нажата кнопка или нет). Также нужно использовать функцию digitalWrite, которая позволяет установить состояние пина (высокое или низкое).

      Ответить на этот комментарий
  31. Михаил

    30.12.2022

    Подключение кнопки к плате Arduino является одним из самых простых и базовых элементов работы с электронными устройствами. Чтобы подключить кнопку к плате Arduino, необходимо следующее:

    Подключить один конец кнопки к одному из пинов платы Arduino (например, к пину 2).
    Подключить другой конец кнопки к земле (GND).
    Подключить плату Arduino к компьютеру с помощью USB-кабеля.
    Открыть программу Arduino IDE и создать новый скетч.
    В начале скетча определить номер пина, к которому подключена кнопка: const int buttonPin = 2;
    В секции setup инициализировать этот пин как вход: pinMode(buttonPin, INPUT);
    В секции loop считывать состояние кнопки с помощью команды digitalRead:

    int buttonState = digitalRead(buttonPin);

    В результате состояние кнопки будет сохранено в переменной buttonState — если кнопка нажата, то buttonState будет равно HIGH, если не нажата — равно LOW.

    Ниже приведен пример кода, который мигает светодиодом, когда кнопка нажата:

    const int ledPin = 13; // Пин светодиода
    const int buttonPin = 2; // Пин кнопки

    void setup() {
    pinMode(ledPin, OUTPUT); // Инициал

    Этот код будет проверять состояние кнопки каждый цикл `loop` и включать светодиод, если кнопка нажата, и выключать его, если кнопка не нажата.

    Однако, часто необходимо, чтобы светодиод мигал регулярно, а не только при нажатии кнопки. Для этого можно использовать функцию `delay` и переменную, которая хранит состояние светодиода (включен/выключен). Ниже приведен код, реализующий мигание светодиода с частотой 1 раз в секунду:

    const int ledPin = 13; // Пин светодиода
    const int buttonPin = 2; // Пин кнопки

    int ledState = LOW; // Состояние свет

    Добавить код, отвечающий за мигание светодиода с частотой 1 раз в секунду:

    void loop() {
    int buttonState = digitalRead(buttonPin); // Считываем состояние кнопки
    if (buttonState == HIGH) { // Если кнопка нажата
    ledState = !ledState; // Меняем состояние светодиода
    digitalWrite(ledPin, ledState); // Включаем/выключаем светодиод
    }
    delay(1000); // Ждем 1 секунду
    }

    В этом коде мы считываем состояние кнопки, а затем меняем состояние светодиода и включаем/выключаем его, если кнопка нажата. Затем мы ждем 1 секунду с помощью функции delay и возвращаемся в начало цикла. В результате светодиод будет мигать с частотой 1 раз в секунду.

    Загрузите скетч на плату Arduino с помощью программы Arduino IDE. Сначала нужно выбрать нужную плату в меню «Сервис» -> «Устройство». Затем нажмите на кнопку «Загрузить» или нажмите «Ctrl + U» на клавиатуре.

    После загрузки скетча вы можете нажать кнопку на плате Arduino и увидеть, как светодиод начинает мигать. Если светодиод не мигает, проверьте, что все провода подключены правильно и что правильно выбрана плата в Arduino IDE.

    Ответить на этот комментарий
    • Михаил

      30.12.2022

      И вот вы уже умеете подключать кнопку к плате Arduino и реализовывать мигание светодиода с помощью нее. Это только один из примеров того, что можно сделать с помощью Arduino. С ее помощью можно реализовывать различные электронные устройства и роботов, от простых до сложных.

      Ответить на этот комментарий

Оставить комментарий

© 2014-2024 Занимательная робототехника, Гагарина Д.А., Гагарин А.С., Гагарин А.А. All rights reserved / Все права защищены. Копирование и воспроизведение в любой форме запрещено. Политика конфиденциальности. Соглашение об обработке персональных данных.
Наверх