Управление сервоприводом по нажатию кнопки

Нет. Вам же готовый код @MMM дал. Просто загрузите его в ардуино и откройте «монитор порта».

13:14:23.744 -> Mode = 0
13:14:26.027- Mode changed to = 1
13:14:27.030- Mode changed to = 2
13:14:28.018- Mode changed to = 0

код не копируется переписал в ручную знаки больше не дописал со 2 ой по 4 ю строку

Всё чудеснее и чудеснее :smiley:

Это правильная работа кода.

спасибо за поддержку и за код но я хотел так чтоб по 1му нажатию выполнялся код 0-90 бесконечно с настройкой задержки а по 2му клику кнопки срабатывал стоп или это не реально ?

Какая серво и от чего запитана? И лучше бы схему увидеть

Именно такой код вам и дали.
Надо разбираться, почему не работает

хм интересно почему …
серво Micro Servo 9g
SG90 на плате Arduino UNO R3 запитана от USB ноутбука

Кнопка GND - 7 pin, servo красный на 5 v+, оранж на 9 том пине? коричневый на GND

Взял другую плату UNO у меня их две вышла ошибка

Arduino: 1.8.19 (Windows 10), Плата:"Arduino Uno"

Скетч использует 3684 байт (11%) памяти устройства. Всего доступно 32256 байт.

Глобальные переменные используют 253 байт (12%) динамической памяти, оставляя 1795 байт для локальных переменных. Максимум: 2048 байт.

avrdude: ser_open(): can't open device "\\.\COM3": �� ������� ����� ��������� ����.




Problem uploading to board.  See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.



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

Потому что другая плата использует другой COM-порт.
Выберите новый ком-порт в настройках ардуино иде.

Да так и было выбрал по новому порт все пошло но код работает так же может быть причина в серво моторе?

Причина в недостатке запятых.

я так понимаю что в коде запятых не хватает ?
а где именно не подскажите ?

В общем, я так думаю, из-за delay’ев нормально нажатие кнопки не отрабатывает.
Я заменил библиотеку кнопок на ту, что сам постоянно пользуюсь - стало лучше, но не на много.

:rofl: :rofl: :rofl:

Он про твою писанину, типа этого:

:smiley:

Собрал макетку у себя на SG90.

Интересное “кино” получается.

Код с библиотекой ezButton каким-то “макаром” переключает mode сразу на второй режим (то есть я нажал кнопку один раз, серва поехала первый “круг” и тут же я вижу в мониторе порта, что mode сам переключился на режим 2).
Переписал под библиотеку kakmyc_btn. Четко включается первый режим, но второй “фик поймаешь”, из-за использования делеев (как я выше и писал в #36).

Спойлер
#include <Servo.h>
#include <kakmyc_btn.h>

kakmyc_btn btn (7, INPUT_PULLUP, 2);
uint8_t  mode = 0;
uint8_t  old_mode = 0;

#define  DELAY_ANGLE   600     // Задержка для поворода сервопривода

Servo servo;                    // создайте сервообъект для управления сервоприводом

void setup() {
  Serial.begin(9600);           // Инициализируйте последовательный порт для связи с последовательным монитором.
  servo.attach(9);              // прикрепляет сервопривод на штифте 9 к объекту сервопривода
  servo.write(0);
  delay(DELAY_ANGLE);
  Serial.print("Mode = ");
  Serial.println(mode);
}

void loop() {
  uint8_t btn_click = btn.read();
  if (btn_click == 1) {
    mode++;
  }
  if (mode != old_mode) {
    Serial.print("Mode changed to = ");
    Serial.println(mode);
    old_mode = mode;
  }
  if (mode == 1) {
    servo.write(90);
    delay(DELAY_ANGLE);
    servo.write(0);
    delay(DELAY_ANGLE);
  }
  if (mode == 2) {
    mode = 0;
    servo.write(90);
    delay(DELAY_ANGLE);
    servo.write(0);
    delay(DELAY_ANGLE);
  }
}

Нужно переписывать код на не блокирующий (то есть без делеев).

ТС, а тебе зачем это всё вообще? Просто учишься? В школу нести? Или что?

В общем вот этот код работает более менее, но серва быстро дергает “туды-сюды”.

#include <Servo.h>
#include <kakmyc_btn.h>

kakmyc_btn btn (7, INPUT_PULLUP, 2);
uint8_t  mode = 0;
uint8_t  old_mode = 0;

#define  DELAY_ANGLE   300     // Задержка для поворода сервопривода

Servo servo;                    // создайте сервообъект для управления сервоприводом

void setup() {
  Serial.begin(9600);           // Инициализируйте последовательный порт для связи с последовательным монитором.
  servo.attach(9);              // прикрепляет сервопривод на штифте 9 к объекту сервопривода
  servo.write(0);
  delay(DELAY_ANGLE);
  Serial.print("Mode = ");
  Serial.println(mode);
}

void loop() {
  uint8_t btn_click = btn.read();
  if (btn_click == 1) {
    mode++;
  }
  if (mode != old_mode) {
    Serial.print("Mode changed to = ");
    Serial.println(mode);
    old_mode = mode;
  }
  if (mode == 1) {
    servo.write(90);
    delay(DELAY_ANGLE);
    servo.write(0);
    delay(DELAY_ANGLE);
  }
  if (mode == 2) {
    mode = 0;
    servo.write(90);
    delay(DELAY_ANGLE);
    servo.write(0);
    delay(DELAY_ANGLE);
  }
}

Или в функции обработчика delay() опрос кнопки делать, но мне лень.))

Да я учусь и хочу осуществить автоматическое нажатие на кнопку сигаретного автомата который забивает сигареты

Учиться - это похвально.
Сегодня тебе помогли, дали направление - Давай дальше сам.
Что не понятно спросишь )