Ви не увійшли.
Сторінки 1
Народ взгляните, пожалуйста, на скетч и скажите, что здесь не так (или скажите как надо).
Задача стоит такая: 3 кнопки, при нажатии на "1" - серво поворачивается на 45 градусов влево и остается до следующей команды, при нажатии "2" - становится в центральное положение, "3" - 45 градусов вправо. Что-то вроде руля.
#include "Servo.h"
Servo servoMain; // Объект Servo
void setup()
{
servoMain.attach(12); // Servo присоединен к 12 выводу
}
void loop()
{
if(digitalRead(5)==HIGH) // Условие 1-й кнопки
{
servoMain.write(-45); // Повернуть серво влево на 45 градусов
}
if(digitalRead(6)==HIGH) // Условие 2-й кнопки
{
servoMain.write(0); // Повернуть серво влево на 45 градусов
}
if(digitalRead(7)==HIGH) // Условие 3-й кнопки
{
servoMain.write(45); // Повернуть серво влево на 45 градусов
}
}
Я залил этот т.с. "код", а в результате серво бесчинствует и крутиться куда хочет или не реагирует на нажатие кнопки.
Кнопки посадил через 10кОм резисторы на землю.
Заранее спасибо.
Остання редакція VS (2016-02-24 16:57:38)
Неактивний
VS, предлагаю сделать так. Кнопки просто на землю, резисторы убрать. Вам задание разобраться в скетче и запостить его сюда с комментариями что и почему.
#include "Servo.h"
Servo servoMain; // Объект Servo
void setup()
{
servoMain.attach(12); // Servo присоединен к 12 выводу
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
}
void loop()
{
if (!digitalRead(5)) // Условие 1-й кнопки
{
servoMain.write(-45); // Повернуть серво влево на 45 градусов
}
if (!digitalRead(6)) // Условие 2-й кнопки
{
servoMain.write(0); // Повернуть серво влево на 45 градусов
}
if (!digitalRead(7)) // Условие 3-й кнопки
{
servoMain.write(45); // Повернуть серво влево на 45 градусов
}
}
Остання редакція alex_dol (2016-02-24 18:06:00)
Неактивний
Как кнопки подключены к контроллеру?
VS, предлагаю сделать так. Кнопки просто на землю, резисторы убрать. Вам задание разобраться в скетче и запостить его сюда с комментариями что и почему.
Значится так, товарищи лекторы и экзаменаторы...
- По результатам:
Использовал скетч alex_dol. Только поменял углы: вместо -45,0,45 поставил 45,90,135. Я так догадываюсь, уно не очень хорошо поняло, что за минус. Сейчас все работает, как надо.
- По разобраться:
1) Да, да, да "недо-кодер" совсем забыл обозначить входы
2) INPUT_PULLUP - использует внутренние стягивающие резисторы, посему кнопку садим на землю, а не на 5В.
3)!digitalRead(5,6,7) - Не уверен, но думаю, что на входах постоянно единица, а при нажатии кнопки появляется ноль и тогда идет команда на серву.
- По новым вопросам:
Не понимаю, почему после перезагрузки уно, серво стартует (с нужного мне) центрального положения (90 градусов), а не ищет ноль.
Пункт 3) правильно понял?
Всем спасибо за участие. Буду рад любому замечанию.
Неактивний
как по мне сдал ), чур я за доброго!
А мне тогда кем быть?
VS, по п.3:
if (УСЛОВИЕ) КОМАНДА1
else КОМАНДА2
Если УСЛОВИЕ истинно (не 0) выполняется КОМАНДА1 иначе выполняется КОМАНДА2
Теперь ближе к теме - входы подтянуты на + питания, следовательно на них всегда лог. 1
Задание: разобраться с оператором !
Остання редакція alex_dol (2016-02-25 23:21:49)
Неактивний
Сторінки 1