Всем добрейшего! Помогите пожалуйста разобраться с задачкой. Опыта, что в кодинге, что в цифровой автоматике- ноль. Дано: МультиСерв Пять приводов Пять тактовых кнопок Вопрос: Как заставить каждую из серв, вставать на определённый угол По нажатию привязанной к Серве кнопки? Разъясните тупому, как это можно сделать?
Программа опрашивает кнопки в цикле. Увидев нажатие дает команду серве встать на определенный угол. При отпускании не знаю что или возвращаться назад или ждать другую кнопку будет, сами определитесь. И опять на опрос кнопок. Всё.
Это-то мне как раз ясно. Не ясно, каким образом это прописать. Пытался назначить две кнопки на одну серву- кнопки не опрашиваются, серва дергается. #include <Servo.h> int button_left = 2; //кнопка левого положения int button_right = 3; //кнопка правого положения int val = 0; //переменная состояния кнопки Servo servo1; void setup() { pinMode(button_left, INPUT); pinMode(button_right, INPUT); servo1.attach(8); } void loop() { val = digitalRead(button_left); if (val == HIGH) //при нажатии кнопки левого положения { servo1.write(90); //повернуть серву в положение 90 } val = digitalRead(button_right); if (val == HIGH) //при нажатии кнопки правого положения { servo1.write(60); //повернуть серву в положение 60 } } Подозреваю, что что-то упустил, только не могу понять что именно.
Попробуйте подключить кнопки еще и к плюсу через резисторы на 10 кОм а еще попробуйте сделать значения, получаемые с кнопки формата boolean
с pinMode(button_left, INPUT_PULLUP); появилась реакция на кнопки. Теперь, если одна из кнопок нажата, серва занимает заданное положение, если кнопку отпустить, серва беспорядочно машет рычагом. Подтяжка к + не меняет ситуации. Подозреваю, что оперировать кнопками нужно через switch case, но не могу понять, как им пользоваться.
switch работает если одна переменная принимает несколько значений. У вас же две переменные, которые принимают 0 или 1. Попробуйте сделать опрос кнопок с подавлением дребезга хотя бы так: Код (C++): val = digitalRead(button_left); if (val) //при нажатии кнопки левого положения { servo1.write(90); //повернуть серву в положение 90 delay(10); } Можно даже увеличить задержку чтобы серва успела встать в положение.
Для схемы из поста #5. Все кнопки нужно подтянуть к '+': Код (C++): pinMode(button_left, INPUT_PULLUP); pinMode(button_right, INPUT_PULLUP); В начальном состоянии пины будут в состоянии HIGH, при нажатии кнопки соответствующий пин перейдёт в LOW: Код (C++): val = digitalRead(button_left); if (val == LOW) { // при нажатой кнопке левого положения servo1.write(60); //повернуть серву в положение 60 delay(10); } Аналогично сделать и для второй кнопки (и остальных).