Есть телевизор на поворотном кронштейне, в комнате 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);}
Изменено: