Вопрос к ещё не дремлющим ардуинщикам (сервопривод, приём-передача радиосигнала)
Есть код передатчика Sender https://pastebin.com/cMTsDV2i , также код приёмника Reciever https://pastebin.com/sb6rxhu9 . Первый - Arduino Nano, второй - UNO
Управляется сервопривод по сети 443мгц при помощи радиоприемопередатчиков (скажем, hc-12 si4463).
Коды предельно просты, но у меня возникла проблема. Как только включаю передатчик, сервопривод в приёмнике дёргается. Переменные обнулены и в приёмнике и в передатчике. Уже грешу на помехи (но для помех слишком подозрительно дёргаться каждые 7 секунд). Повторюсь: дёргаться начинает, как только включу передатчик..
Народ, помогите! В чём я ошибаюсь? Уже не знаю, что делать!
задолбал этот балбес дрыгаться, уже не могу
Говорят, сервопривод может ругаться на недостаток питания, но этого добра у меня с лихвой.
Оказывается, SoftwareSerial с Servo несовместимы, так как используются одни и те же прерывания.
я бы сначала смотрел в сторону SoftwareSerial.h, Stream.h и HardwareSerial.h
но может быть и контроллер нае.. деградировал )
Проверял полученные значения Serial.print(), всё сходится. Значит если msg обнулён, то никак нельзя подобраться к motor.write(), так как он за условием.
Но он, балбес такой, всё равно левый ход какой-то находит
Я не ардуинщик, так что могу только рассуждать... Код вроде бы верный (проверка только логики). Первое это в коде приемника есть два if отслеживающие msg и поворачивающие серву. Что произойдет если их закомментить? Если перестанет дрыгаться (то что отвечать на нажатие кнопки перестанет это и так понятно) то значит все таки какое то сообщение из модуля hc12 все таки приходит или наводка... Второе возможно что все таки модуль передатчика каждые семь секунд ведет опрос есть ли приемник и в этот момент дает наводку на кнопку (хз с этими модулями не имел дело) какой номинал подтягивающего резистора на кнопке. Третье код можно немного переписать:
if (mySerial.available()){ //если что-то пришло
msg = mySerial.read();}//то присваиваем значение из mySerial переменной msg
switch(msg)
{
case 1:
motor1.write(95);
break;
case 2:
motor1.write(100);
break;
}
msg = 0;
}
Последний break перед } не обязательный
Попробуйте отсылать число не единицу, а 101 и 102 (msg+100) если это наводка в передатчике дергать не перестанет, а в приемнике вы по идее проскочите числом 100(чисто теория). Ну в приемнике тоже надо отлавливать числа 101 и 102...
а ты нафига 0 постоянно посылаешь? не, ну в теории, оно конечно не запрещено, но как-то неправильно...
я обнуляю переменную, потому что если переменная будет отличной от нуля, то контроллер будет пытаться постоянно посылать в сервопривод ШИМ на определённый угол. Тогда сервопривод будет постоянно работать. А с обнулением он простаивает, если нет сигнала с передатчика.
Начни с изучения языка, в котором говорится, что переменные нужно инициализировать
Вы о каких переменных, многоуважаемый?