Привет всем помогите с кодом .
суть кода заключаться в том что -
по нажатию кнопки сервопривод делает оборот от 0 до 90 градусов и возвращается в нулевое положение работает !
*нужно ! по повторному нажатию кнопки серво вернулся в нулевую точку и замер *(не получается осуществить умельцы помогите с кодом)
#include <Servo.h>
#include <ezButton.h>
#define LOOP_STATE_STOPPED 0
#define LOOP_STATE_STARTED 1
ezButton button(7); // create ezButton object that attach to pin 7;
int loopState = LOOP_STATE_STOPPED;
Servo servo; // создайте сервообъект для управления сервоприводом
int angle = 0; // Текущий угол наклона серводвигателя
void setup() {
Serial.begin(9600); // Инициализируйте последовательный порт для связи с последовательным монитором.
button.setDebounceTime(50); // установите время восстановления равным 50 миллисекундам
servo.attach(9); // прикрепляет сервопривод на штифте 9 к объекту сервопривода
}
void loop() {
button.loop(); // СНАЧАЛА необходимо вызвать функцию loop()
if(button.isPressed() ) {
if (loopState == LOOP_STATE_STOPPED)
loopState = LOOP_STATE_STARTED;
else // if(loopState == LOOP_STATE_STARTED)
loopState = LOOP_STATE_STOPPED;
}
if (loopState == LOOP_STATE_STARTED) {
servo.write(0);
delay(500);
servo.write(90);
delay(5000);
}
}
сорри не дописал …
по первому нажатию кнопки от 0 - 90 градусов цикл повторяется бесконечно по этому для того чтоб цикл остановить нужно допилить код
чтоб по первому щелку кнопки цикл запускался как есть по второму щелчку цикл останавливался и по сл. щелчку опять можно было цикл запустить
Нормально код вставил с первого раза. Уже только это похвалы достойно )))
Краткое описание:По нажатию кнопки мы изменяем значение переменной mode, что переводится никак иначе как “режим работы” (по крайней мере я её так перевёл). Первоначальное значение равно нулю - в этом режиме программа (как видно из кода) ничего не делает. В первом режиме - постоянный “цикл” 90-0-90-0 и т.д. Во втором режиме - 0-90 стоп.
Пробуй:
#include <Servo.h>
#include <ezButton.h>
ezButton button(7); // create ezButton object that attach to pin 7;
uint8_t mode = 0;
#define DELAY_ANGLE 500 // Задержка для поворода сервопривода
Servo servo; // создайте сервообъект для управления сервоприводом
void setup() {
Serial.begin(9600); // Инициализируйте последовательный порт для связи с последовательным монитором.
button.setDebounceTime(50); // установите время восстановления равным 50 миллисекундам
servo.attach(9); // прикрепляет сервопривод на штифте 9 к объекту сервопривода
}
void loop() {
button.loop(); // СНАЧАЛА необходимо вызвать функцию loop()
if (button.isPressed() ) {
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);
}
}
Краткое описание:По нажатию кнопки мы изменяем значение переменной mode, что переводится никак иначе как “режим работы” (по крайней мере я её так перевёл). Первоначальное значение равно нулю - в этом режиме программа (как видно из кода) ничего не делает. В первом режиме - постоянный “цикл” 90-0-90-0 и т.д. Во втором режиме - 0-90 стоп.
объясните как работает второй режим по тому как по одинарному щелчку по кнопке серво двигается два раза от 0-90 стоп
В коде этого нет. Как только Вы нажали на кнопку, mode увеличивается на единицу и становится равным 2. По условию если mode равен 2 - сразу меняем его значение на ноль и делаем один раз «туды сюды».