Поворот телека с ИК пульта

kin

✩✩✩✩✩✩✩
14 Окт 2018
6
1
Есть телевизор на поворотном кронштейне, в комнате 2 дивана, для идеального просмотра экран приходится подворачивать градусов эдак на 10-15 то в лево то в право ( в зависимости от дивана), пришла идея использовать пару неиспользуемых кнопок ИК пульта от телевизора для управления сервомашинкой, но т.к. опыта мало, то прошу помощи, вначале использовал самую дешевую бичевую серву, и столкнулся с двумя проблемами, машинка не переставала жужжать даже когда кнопки не нажимались, пришлось задействовать библиотеку LowPower.h, вторая проблема - машинка слабая, телек не тянула) заказал серву с метал редуктором.. жду
Куски кода у кого-то спер уже не помню, сам, как собака понимать понимаю, а написать не могу, не судите сторго, исправьте ошибки, либо оптимизируйте код, т.к. сам понимаю что очень кривой
C++:
#include <VarSpeedServo.h>
#include <IRremote.h>
#include "LowPower.h"
const int wakeUpPin = 2;
void wakeUp()
VarSpeedServo servoY;
int posY = 90;   // начальная позиция сервопривода
int RECV_PIN = 2;          // ИК приёмник
unsigned long keyCode = 0; // код, полученный с пульта
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  pinMode(wakeUpPin, INPUT);
  servoY.attach(10); // сервопривод подключен к 10 пину
  irrecv.enableIRIn();}
void loop()
{
    if (irrecv.decode(&results))
{
    keyCode = results.value;    // присваиваем полученный код к переменной keyCode
    servoControl();             // и выполняем функцию servoControl()
    irrecv.resume(); }}
void servoControl()
{
int y = posY;
    if(keyCode == 0xE0E034CB && posY <= 180)        // если получен код кнопки "вверх" и не достигнут верхний предел
{
    posY = posY + 90;
    servoY.slowmove (posY, 10);}
    else if(keyCode == 0xE0E0C837 && posY >= 0)    // если получен код кнопки "вниз" и не достигнут нижний предел
{
    posY = posY - 90;
    servoY.slowmove (posY, 10);}
{
    attachInterrupt(0, wakeUp, CHANGE);
    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
    detachInterrupt(0);}
    delay(200);}
 
Изменено:
  • Лойс +1
Реакции: Кирилл69

KOHb

★✩✩✩✩✩✩
25 Окт 2018
119
16
А не лучше ли использовать шаговый двигатель для этих нужд?
И лично я писал бы код через switch case.