Ик приемник
- Войдите на сайт для отправки комментариев
Вс, 16/03/2014 - 22:40
У Меня есть ардуино , ик приемник и серво машинки . Хочу с помошью Ик управлять сервами . А что мне делать если у меня получается так , что у всех кнопока первый код одинаковый а второй у всех одинаковый ( "кнопка 1 "- (1)FF629D , (2)FFFFFFFF . "кнопка 2 " - (1)FFA857, (2 )FFFFFFF . Как в программе различать эти
кнопки если 2 сигнаал одинаковый . Пробовал так но не получаеться . Ведь эти 2 кода выдаються рандомно
#include <Servo.h>
#include <IRremote.h>
#define RECV_PIN 11 //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long Value1 = 0xFF629D;
unsigned long Value2 = 0xFFA857;
Servo sg90;
int sg90pos = 0;
int Code ;
void setup()
{
irrecv.enableIRIn(); // включить приемник
sg90.attach(3);
}
void ChCode()
{
if (Code == Value1)sg90pos++;
{
sg90pos++;
ServWrite();
}
if (Code == Value2)
{
sg90pos--;
ServWrite();
}
}
void loop()
{
if (irrecv.decode(&results)){
if (results.value != 0xFFFFFFFF)
{
Code = results.value;
ChCode();
}
else
{
ChCode();
}
irrecv.resume();
}
}
void ServWrite()
{
sg90pos = constrain(sg90pos, 0, 180);
sg90.write(sg90pos);
delay(20);
}
Имхо, в данном случае FFFFFFFF - просто отработка "повтора" предыдущей команды.
Если в вашем случае это не важно - просто игнорируйте такие посылки (или обрабатывайте соответствующим образом).
В 22 строке удалите sg20pos++.
Может ещё что есть, но для начала 22 строка
А зачем ведь кто я показывают что если эта кнопка срабатывает я двигаются в положительную сторону
А как мне это записать ? Не очень понял
Ведь для постоянного поворота сервы я должен удерживать кнопку
#include <Servo.h> #include <IRremote.h> #define RECV_PIN 11 //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; unsigned long Value1 = 0xFF629D; unsigned long Value2 = 0xFFA857; Servo sg90; int sg90pos = 0; char dir = 0; void setup() { irrecv.enableIRIn(); // включить приемник sg90.attach(3); } void loop() { if(irrecv.decode(&results)) { if(results.value == Value1) { dir = 1; ChCode(); } else if(results.value == Value2) { dir = -1; ChCode(); } else if(results.value == 0xFFFFFFFF) ChCode(); irrecv.resume(); } } void ChCode() { sg90pos += dir; ServWrite(); } void ServWrite() { sg90pos = constrain(sg90pos, 0, 180); sg90.write(sg90pos); delay(20); }