Ик приемник

mantana977
Offline
Зарегистрирован: 24.01.2014

У Меня есть ардуино , ик приемник и серво машинки . Хочу с помошью Ик управлять сервами . А что мне делать если у меня получается так , что у всех кнопока первый код одинаковый а второй у всех одинаковый ( "кнопка 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);
}

 

ustas
Offline
Зарегистрирован: 12.03.2012

Имхо, в данном случае FFFFFFFF - просто отработка "повтора" предыдущей команды.

Если в вашем случае это не важно - просто игнорируйте такие посылки (или обрабатывайте соответствующим образом).

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В 22 строке удалите sg20pos++.
Может ещё что есть, но для начала 22 строка

mantana977
Offline
Зарегистрирован: 24.01.2014

А зачем ведь кто я показывают что если эта кнопка срабатывает я двигаются в положительную сторону 

mantana977
Offline
Зарегистрирован: 24.01.2014

А как мне это записать ? Не очень понял  

mantana977
Offline
Зарегистрирован: 24.01.2014

Ведь для постоянного поворота сервы я должен удерживать кнопку 

maksim
Offline
Зарегистрирован: 12.02.2012
#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);
}