Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать. Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил. Робот своими руками. Самодельный робот.
можно. там в проверке есть "left >= 1550" где 1550 это время в миллисекундах сигнала с приемника. то есть 1500 это как бы середина. у меня по 50мс +- стало быть надо значения 1550 и 1450 поменять. а вот тут вот " left = map(left, 0, 350, 0, 255);" это надо смотреть функцию http://arduino.ru/Reference/Map и менять значение 350 на что то подходящее, что даст нам регулировку диапозона пропорционального управления ШИМом.
Последний раз редактировалось Nesenin 16 янв 2014, 22:26, всего редактировалось 1 раз.
а это и есть диапозон сигнала с приемника, который будет пропорционально повышать ШИМ от 0 до 255. то бишь у нас, допустим 1550мс это порог при котором начнет расти ШИМ с 0 (1500мс это нулевое положение стика на пульте). 1550+350=1900мс это верхний порог при котором ШИМ будет на максимуме (255) и дальше расти не будет. тут вопрос конкретно в рабочем диапозоне сигнала на приемнике. я, просмотрев значения на своем, выбрал эти пороги 1450-350=1100мс и 1900. если у вас диапозон другой, можно это дело подправить.
Добавлено спустя 5 минут 50 секунд: ага ток потом обнаружилось что еще бывает значение "0" и условие преобразилась в "if(button > 1500 || button == 0)" не помню зачем делал это условие. кажись для того чтоб те числа которые появляются в переменных gas, rudder при выключенном передатчике (потере сигнала) ничего не делали с машиной.
то есть получается эту функцию можно вычеркнуть, заменив тут if(button > 1500 || button == 0) {left = 0; right = 0; } else { rudder = rudder - 1500; left = gas + rudder; right = gas - rudder; left = constrain(left, 1100, 1900); right = constrain(right, 1100, 1900); else на if, и использовать третий канал допустим для включения фонарей и пр.?
попробуйте. но лучше бы сначала протестировать прежде чем на выходы чего нить цеплять. там есть закомментированные строки //Serial.begin(115200);
//Serial.print(button); Serial.print("\t"); //Serial.print(gas); Serial.print("\t"); //Serial.println(rudder); вот их бы раскомментировать на компе (в терминале или еще где), почитать да посчитать что там выдаст математика rudder = rudder - 1500; left = gas + rudder; right = gas - rudder; left = constrain(left, 1100, 1900); right = constrain(right, 1100, 1900); не сорвется ли ваш танк куда нить ехать при потере сигнала. и если да то надо что то придумать
ну а просто записать условие типа: если на пинах 4,5(вход прм) нет сигнала, принадлежащего соответствующему промежутку, то {left = 0; right = 0; ?
Добавлено спустя 2 минуты 43 секунды: еще вот тут натолкнулся, у меня ведь авиамодельный а у вам авто передатчик, так у меня тогда вот тут left = constrain(left, 1100, 1900); right = constrain(right, 1100, 1900); должна получиться пара 0,2000 или 100,1900. или нет?
что там код выдаст в переменных gas, rudder надо глянуть и от этого условие писать. это вроде как на всех длительность сигнала от 1000 до 1900. а там уж надо смотреть сколько в реале на конкретном приемнике
ну вот( на arduino nano все работает как нужно, а на arduino mega 2560 вообще ни как. в чем может быть проблема? подключал к одноименным цифровым ножкам.