#1 2016-02-24 16:49:14

VS
Учасник
Зареєстрований: 2015-08-07
Повідомлень: 12

Серво Sg-90

Народ взгляните, пожалуйста, на скетч и скажите, что здесь не так (или скажите как надо).
Задача стоит такая: 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)

Неактивний

#2 2016-02-24 17:10:06

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Серво Sg-90

При текущем скетче надо не кнопки через 10кОм посадить на землю, а на выводы 5, 6 и 7 и землю вцепить эти 10кОм. А кнопки вцепить на +5В.

Неактивний

#3 2016-02-24 17:22:07

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Серво Sg-90

alex_dol, а как поняли что нет подтяжки на землю?
а разве не нужно указывать что  5, 6 и 7 входы?
или по умолчанию все ноги на вход настроены?

Неактивний

#4 2016-02-24 18:04:52

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Серво Sg-90

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)

Неактивний

#5 2016-02-24 18:25:04

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Серво Sg-90

а мы оценку поставим? )))
а если не сдаст то пусть тащит коньяк?, будем обучать? )

Неактивний

#6 2016-02-24 20:49:55

PablitoMc
Гість

Re: Серво Sg-90

Как кнопки подключены к контроллеру?

#7 2016-02-25 11:27:35

VS
Учасник
Зареєстрований: 2015-08-07
Повідомлень: 12

Re: Серво Sg-90

alex_dol пише:

VS, предлагаю сделать так. Кнопки просто на землю, резисторы убрать. Вам задание разобраться в скетче и запостить его сюда с комментариями что и почему.

Значится так, товарищи лекторы и экзаменаторы... smile

          -         По результатам:
Использовал скетч alex_dol. Только поменял углы: вместо -45,0,45 поставил 45,90,135. Я так догадываюсь, уно не очень хорошо поняло, что за минус. Сейчас все работает, как надо.   big_smile

          -         По разобраться:
1) Да, да, да "недо-кодер" совсем забыл обозначить входы big_smile
2) INPUT_PULLUP - использует внутренние стягивающие резисторы, посему кнопку садим на землю, а не на 5В.
3)!digitalRead(5,6,7)  - Не уверен, но думаю, что на входах постоянно единица, а при нажатии кнопки появляется ноль и тогда идет команда на серву.

          -         По новым вопросам:
Не понимаю, почему после перезагрузки уно, серво стартует (с нужного мне) центрального положения (90 градусов), а не ищет ноль.
Пункт 3) правильно понял?

Всем спасибо за участие. Буду рад любому замечанию.

Неактивний

#8 2016-02-25 18:10:55

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Серво Sg-90

как по мне сдал ),  чур я за доброго!
в void setup()
servoMain.write(XXX);   // где xxx - начальная и необходимая позиция.

Неактивний

#9 2016-02-25 23:20:55

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Серво Sg-90

NoName пише:

как по мне сдал ),  чур я за доброго!

А мне тогда кем быть?

VS, по п.3:

if (УСЛОВИЕ) КОМАНДА1
else КОМАНДА2

Если УСЛОВИЕ истинно (не 0) выполняется КОМАНДА1 иначе выполняется КОМАНДА2

Теперь ближе к теме - входы подтянуты на + питания, следовательно на них всегда лог. 1

Задание: разобраться с оператором !

Остання редакція alex_dol (2016-02-25 23:21:49)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму