Top.Mail.Ru
Ответы

Вопрос к ещё не дремлющим ардуинщикам (сервопривод, приём-передача радиосигнала)

Есть код передатчика Sender https://pastebin.com/cMTsDV2i , также код приёмника Reciever https://pastebin.com/sb6rxhu9 . Первый - Arduino Nano, второй - UNO
Управляется сервопривод по сети 443мгц при помощи радиоприемопередатчиков (скажем, hc-12 si4463).
Коды предельно просты, но у меня возникла проблема. Как только включаю передатчик, сервопривод в приёмнике дёргается. Переменные обнулены и в приёмнике и в передатчике. Уже грешу на помехи (но для помех слишком подозрительно дёргаться каждые 7 секунд). Повторюсь: дёргаться начинает, как только включу передатчик..
Народ, помогите! В чём я ошибаюсь? Уже не знаю, что делать!

Дополнен

задолбал этот балбес дрыгаться, уже не могу

Дополнен

Говорят, сервопривод может ругаться на недостаток питания, но этого добра у меня с лихвой.

Дополнен

Оказывается, SoftwareSerial с Servo несовместимы, так как используются одни и те же прерывания.

По дате
По рейтингу
Аватар пользователя
Ученик
7лет

я бы сначала смотрел в сторону SoftwareSerial.h, Stream.h и HardwareSerial.h
но может быть и контроллер нае.. деградировал )

Аватар пользователя
Ученик
7лет

Проверял полученные значения Serial.print(), всё сходится. Значит если msg обнулён, то никак нельзя подобраться к motor.write(), так как он за условием.
Но он, балбес такой, всё равно левый ход какой-то находит

Аватар пользователя
Оракул
7лет

Я не ардуинщик, так что могу только рассуждать... Код вроде бы верный (проверка только логики). Первое это в коде приемника есть два 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;
}

Аватар пользователя
Оракул
7лет

Последний break перед } не обязательный

Аватар пользователя
Оракул
7лет

Попробуйте отсылать число не единицу, а 101 и 102 (msg+100) если это наводка в передатчике дергать не перестанет, а в приемнике вы по идее проскочите числом 100(чисто теория). Ну в приемнике тоже надо отлавливать числа 101 и 102...

Аватар пользователя
Ученик
7лет

а ты нафига 0 постоянно посылаешь? не, ну в теории, оно конечно не запрещено, но как-то неправильно...

Аватар пользователя
Ученик
7лет

я обнуляю переменную, потому что если переменная будет отличной от нуля, то контроллер будет пытаться постоянно посылать в сервопривод ШИМ на определённый угол. Тогда сервопривод будет постоянно работать. А с обнулением он простаивает, если нет сигнала с передатчика.

Аватар пользователя
Оракул
7лет

Начни с изучения языка, в котором говорится, что переменные нужно инициализировать

Аватар пользователя
Ученик
7лет

Вы о каких переменных, многоуважаемый?



Видео по теме