Управление несколькими сервоприводами через Ик

Но тут возможно прога на андроиде глючит. К компу доступа пока нет. Заливаю с телефона

   if (IrReceiver.decode()) {
    comandIR = IrReceiver.decodedIRData.decodedRawData;

командир! ахах)) а так что будет ?)) еще можете попробовать создать переменные, и при получении команды присваивать значения им при получении сигнала 0 или 1, в зависимости от кнопки, а так же вынести управление серво за блок приема команд…

Блин, вот Вы умышленно издеваетесь или само так получается?

@MMM, как там Ваши мозги себя ощущают?

А мне что?:slight_smile: это ж у ТС проблемы… сам себе Буратино

Попробуйте для начала сделать с тактовыми кнопками.

Спасибо, домой вернусь попробую. Сейчас в командировке. Как минимум нужно попробовать залить скетч через комп. Возможно андройдовкий компилятор не правильно работает .

добрался я до компьютера.

этот код читает кнопки с пульта

#include <Servo.h>
#include <IRremote.hpp>

Servo servo1;
unsigned long comandIR = 0;

void setup() 
{
  IrReceiver.begin(D2);
  Serial.begin(9600);
}

void loop() {
  if (IrReceiver.decode() > 0)
  {
    comandIR = IrReceiver.decodedIRData.decodedRawData;
      IrReceiver.resume();
      Serial.println(comandIR);
  }

}

решил проверить на какой строчке кода перестает считывать пуль. постепенно добавляя выяснил что если в void setup добавить servo1.attach(D4) до команды уже не присылает

#include <Servo.h>
#include <IRremote.hpp>

Servo servo1;
unsigned long comandIR = 0;

void setup() 
{
  servo1.attach(D4);
  IrReceiver.begin(D2);
  Serial.begin(9600);
}

void loop() {
  if (IrReceiver.decode() > 0)
  {
    comandIR = IrReceiver.decodedIRData.decodedRawData;
      IrReceiver.resume();
      Serial.println(comandIR);
  }

Скорее всего у вас конфликт библиотек. Используется один таймер. Поищите по этим словам.

Да да, так и есть. Уже весь день сижу над этим. Но теперь мне помогает Алиса)))

Она мне и новый код написала. И как ни странно все внятно разжевывает что у меня не так.

С одним из кодов всё-таки получилось добиться хоть какого то результата. Вместо библиотеки IRremote поставил IrRemoteESP8266. Заработало так как я хочу. Но в монитор порта поступали куча разных кодов с пульта с одной кнопки. И когда приходил нушный серва вращалась на заданный градус. Сейчас я предложил Алисе костыль в виде еще одной платы wemos которая тупо будет принимать сигнал с пульта и отправлять его на вторую плату которая будет управлять сервой. Благо у меня их восемь штук, в смысле плат )). Сижу паяю гребенки на плату.

ну можно и так, хотя развести две библиотеки на разные таймеры было бы проще (если дело в этом). В документации на библиотеки это обычно описано.

Привет ей передавайте!

1 лайк

Обязательно :rofl:

Просто я ни разу не программист. В голове засела одна идейка с 4мя сервомоторами, и я решил ее с наскока реализовать тупо взяв готовый код с интернета. И уперся в свои незнания ))

Ну, ничего, подучитесь, освоитесь. Зато теперь, Вы, наверняка, стали лучше понимать фразу Высоцкого:

«В дивных райских садах наберу бледно-розовых яблок…
Жаль, сады сторожат и стреляют без промаха в лоб»

А в знаниях, которых Вам не хватает нет ничего магического и требующего особой гениальности. На том уровня, на котором это нужно для подобных проектов, всё это вполне доступно для любого нормального парня с нормальными мозгами и нормальной трудоспособностью. Ничего сверхординарного не требуется Удачи!

Всё получилось :+1:, осталось протестить все это на мощных сервах и заниматься механической частью )

Вывсёврёти!!!

1 лайк

Нет не вру, все реально заработало с мелкими сервоприводами sg90. Но теперь у меня другая проблема подключил я мощную серву на 150кг RDS51150.поставил отдельный бп на 12вольт 10 ампер. И она живет своей жизнью крутится туда сюда сама собой не реагируя на пульт. Замерил тестером в момент ее вращения с 12 вольтпроседает до нуля. Пошел я дальше курить чего я опять не учел ))

Интересно, как измерял и чем.

В макетку воткнул щупы мультиметра + - параллельно воткнутым контактам сервы

Вот на али нашел описание. Вроде 8 ампер должна потреблять.