Проблемы с кодом
- Войдите на сайт для отправки комментариев
Вс, 26/10/2014 - 22:42
В написании не силен, компилируется но не работает.
Сама идея, есть два аналоговых сигнала, обои от 1,17 до 1,75 В. Хотел, что бы 2 сервы вращались от 0 до 180 в зависимости от напряжения на входах.
/*Управляем углом 2х серв, в зависимости от напряжения */ #include <Servo.h> //Подключаем библиотеку Servo Servo motor; int sensePin1 = A1;//Обьявляем A1 аналоговый вход int sensePin0 = A0;//Обьявляем А0 аналоговый вход void setup() { analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта motor.attach(10); // Подключаем серву на 10 motor.attach(9); // Подключаем серву на 9 } void loop() { int val = analogRead(sensePin0);// Создаем переменную val для чтения analogRead val= constrain(val,1.17 ,1.75);// Ограничиваем диапазон работы по напряжению int motorAng = map(val,1.75, 1.17, 180,0);//Преобразуем диапазон входных напряжений в диапазон углов сервы motor.write(motorAng);// Устанавливаем серву на угол который получаем через преобразование int val1 = analogRead(sensePin1);// Создаем переменную val1 для чтения analogRead val1= constrain(val,1.17 ,1.75);// Ограничиваем диапазон работы по напряжению int motorAng0 = map(val,1.75, 1.17, 180,0);//Преобразуем диапазон входных напряжений в диапазон углов сервы motor.write(motorAng0);// Устанавливаем серву на угол который получаем через преобразование }
Читаем analogRead() и что он возвращает.
Прочел, но до конца не понял как быть
пробовал и вот так, но все равно не работает
для примера брал управление сервой от фоторезистора, думаю может быть не работает из за наличия сотых вольта int motorAngl0 = map(val,1.75, 1.17, 180,0);
Забыл уточнить, что импульсы идут лишь на 9 пин, серву с 10 пина можно вручную прокрутить.
Возвращаемое значение
int (0 to 1023)
и про map() тоже почитай
Кое чего добился вот так, но работает лишь одна серва на 9 пине.Подскажите что надо изменить, что бы вторая серва так же слушалась.
если отключить 9 пин вот так, то начинает работать 10 пин
Разобрался, работают 2 сервы. Может кому пригодится код для примера.
Но есть пара вопросов. Как можно обойтись без delay (200); // Защита от рысканья
И как можно в мониторе порта смотреть одновремено X и Y(входа А0 и А1), в даном варианте показывает аброкадабру.
В таком виде показывает лишь даные с одного входа
char str[11]="";
sprintf(str, "%4d %4d", analogRead(X), analogRead(Y));
Serial.println(str);
С рысканьем помогло, спасибо. А по поводу монитора порта, я правильно понял, удаляю вот это
и ставлю вот это
не компилируется
Ugol_servi.ino: In function 'void loop()':
После экспериентов и нескольких прочтеных статей понял что это все вместе взамен
то биш вот так
теперь даные идут двумя столбцами, хотя первый раз пробовал и была аброкадабра, спасибо еще раз!!!
Хреновая привычка - читать код со второй строки.
Сори.Было бы поболее опыта, а так, не стреляйте в пианиста)))
Спутало еще то, что было 2 вопроса,1й как обойтись без
delay (200); вот и думал, что и есть ответ на первый вопрос
к то му же
char str[11]=""; работало вместо delay (200); ну или по крайней мере нормально компилировалось)))Еще раз премного благодарен!!!