Угол поворота серво с клавиатуры не работает
- Войдите на сайт для отправки комментариев
Пт, 15/02/2019 - 16:48
Господа подскажите по скетчу, хочу заставить серво поворачивать на градус введенный с клавиатуры. Но мой скетч не пашет, подскажите ошибку.
#include <Keypad.h>
#include <Servo.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
Servo servo;
int data = 0;
void setup()
{
Serial.begin(9600);
servo.attach(5);
servo.write(0);
}
void loop()
{
char key = keypad.getKey();
//Если клавиша цифра, то предыдущее значение увеличиваем на разряд, и добавляем новую цифру.
if(key){
if(isDigit(key)){
data = data*10 + key - 48;
}else{
//Если нажата не цифра -> поворачиваем на градус
servo.write(data);
}
}
}
Зайдя на новый для себя форум, необходимо первым делом не постить важнейший вопрос современности, а ознакомиться с правилами форума. Этим Вы сильно повысите свои шансы нормально влиться в сообщество и понизите шансы быть посланным "на" (или "в" - как Вам больше нравится).
Пожалуйста, ознакомьтесь, и перепостите свой пост (можно здесь же, не обязательно плодить темы).
А без клавиатуры с заданными значениями поворачивает? (Что-то сомнения меня одолевают)
Да, поворачивает.
Обращаю Ваше внимание на #1 - там действительно полезная для жизни на форуме инфа.
По теме: Значение data перед servo.write проверяли?
T.Rook, всем понятно в чем дело, но не потворствуйте, плиз.
T.Rook, всем понятно в чем дело, но не потворствуйте, плиз.
Ну что Вы, я правда хочу подтолкнуть ТС к решению.... никогда не смеюсь на вопросами.
Многие хотят. Пусть хоть что-нибудь сделает правильно для начала, а мы в долгу не останемся.
Заглавными буквами написано по ссылке ЕвгенияП: ВСТАВКА ПРОГРАММНОГО КОДА. Кликните.
Да, почему-то не происходит считывание с клавиатуры. Я уже менял getKey на waitForKey, т.к. была мысль, что если не проходит нажатие, то просто data каждый цикл умножается на 10 и получаются градусы вне диапазона. Но c waitForKey тоже не работает.
Исправил.
Давайте попробуем ещё раз.
Пожалуйста, ознакомьтесь, и перепостите свой пост как положено.
Если Вы даже с подсказки не можете понять как правильно вставляется код, то, боюсь, ...
Ознакомился, исправил, раскаиваюсь.
В строке 42 вставляйте Serial.println(data);
Заливайте прошивку, открывайте Serial Monitor и смотрите в него, жмакая кнопки. Что там пишется?
Пишет:
Далее не реагирует на нажатия.
Пишет одно и то же каждый раз, когда вы нажимаете на разные кнопки?
Нет. Я запускаю, он тут же пишет 1 без нажатия. И потом никак не реагирует на нажатие.
Нет. Я запускаю, он тут же пишет 1 без нажатия. И потом никак не реагирует на нажатие.
А так поиск и продолжайте. Вывод data в порт ещё и перед 45-й строкой вставьте. И на всякий случай ссылку на используемую библиотеку Keypad приведите. Они разные, вдруг чего используете не так!
У меня закрались подозрения, что проблема в эмуляторе. Т.к. я нищеброд и ардуино с серво нет, то использую Tinkercad. Возможно проблема в этом.
Ссылка на библиотеку https://playground.arduino.cc/Code/Keypad
Вставил после 37 строки. Цикл крутит, сплошные единицы в выводе.
Вставил после 39. На выводе только
То есть нет сигнала с клавиатуры.
Ну за Tinkercad ничего не скажу, никогда не пользовался. Должен он работать или не должен - чёрт его знает. Только в следующий раз о том, что с эмулятором работаете - сразу говорите.
Попробуйте в нём сначала самые простейшие скетчи из примеров к библиотеки клавиатуры, заствьте их работать.
За ThinkerCad я скажу. SoftwareSerial в нём глючит точно. Он не работает в ThinkerCad, но работает в железе.
добавить кнопка Enter
Роза, Enter там не нужен и его на данной клавиатуре нет.
Спасибо, ваше решение очень помогло.
Возник другой вопрос. Тайминги на поворот на моих серво не совпадает с таймингами в библиотеке Servo.h.
Есть ли альтернативная библиотека, где можно задать свои тайминги сигнала на поворот?
Возможно ли поменять в библиотеке Servo.h вот эти параметры, обозвав библиотеку подругому?
Или может как-то добавить переменные для настройки?
Вот такой кусок нашел в Серво.х
Просто делайте attach() со своими min/max.
можно
Правильно ли я понимаю, что при объявлении надо сделать:
Правильно ли я понимаю, что при объявлении надо сделать:
правильно