Нет. Вам же готовый код @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 ю строку
Всё чудеснее и чудеснее
Это правильная работа кода.
спасибо за поддержку и за код но я хотел так чтоб по 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’ев нормально нажатие кнопки не отрабатывает.
Я заменил библиотеку кнопок на ту, что сам постоянно пользуюсь - стало лучше, но не на много.
Он про твою писанину, типа этого:
Собрал макетку у себя на 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() опрос кнопки делать, но мне лень.))
Да я учусь и хочу осуществить автоматическое нажатие на кнопку сигаретного автомата который забивает сигареты
Учиться - это похвально.
Сегодня тебе помогли, дали направление - Давай дальше сам.
Что не понятно спросишь )