Ик приемник

mantana977
Offline
Зарегистрирован: 24.01.2014
#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

Как мне решить проблему нескольких кодов с пульта . Я хочу чтобы при нажатии на кнопку 1 серав поворачивалась в право а при нажатии кнопки 2 серва поворачивалась на лево . Но то мешает делать сигнал у которого несколько кодов . Помогите

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

 

Как мне решить проблему нескольких кодов с пульта . Я хочу чтобы при нажатии на кнопку 1 серав поворачивалась в право а при нажатии кнопки 2 серва поворачивалась на лево . Но то мешает делать сигнал у которого несколько кодов . Помогите

#define RECV_PIN 11 //вход ИК приемника



IRrecv irrecv(RECV_PIN);

decode_results results;



unsigned long Value1 = 0xECE16110;

unsigned long Value2 = 0x4AB0F7B6;
unsigned long Value3 = 0xC5548CC3;
unsigned long Value4 = 0x9646FaB8;

Servo sg90;

int sg90pos = 0;



void setup()

{

irrecv.enableIRIn(); // включить приемник
sg90.attach(3);

}



void loop()
{
if (irrecv.decode(&results))
{
if (results.value == Value1 ||  results.value == Value2) sg90pos++;
else if(results.value == Value3 ||  results.value == Value4) sg90pos--;

sg90pos = constrain(sg90pos, 0, 180);
sg90.write(sg90pos);
delay(20);

irrecv.resume();
}
}

 

maxi_10
Offline
Зарегистрирован: 05.01.2012

mantana977 пишет:

 

Как мне решить проблему нескольких кодов с пульта . Я хочу чтобы при нажатии на кнопку 1 серав поворачивалась в право а при нажатии кнопки 2 серва поворачивалась на лево . Но то мешает делать сигнал у которого несколько кодов . Помогите

#define RECV_PIN 11 //вход ИК приемника



IRrecv irrecv(RECV_PIN);

decode_results results;



unsigned long Value1 = 0xECE16110;

unsigned long Value2 = 0x4AB0F7B6;
unsigned long Value3 = 0xC5548CC3;
unsigned long Value4 = 0x9646FaB8;

Servo sg90;

int sg90pos = 0;



void setup()

{

irrecv.enableIRIn(); // включить приемник
sg90.attach(3);

}



void loop()
{
if (irrecv.decode(&results))
{
if (results.value == Value1 ||  results.value == Value2) sg90pos++;
else if(results.value == Value3 ||  results.value == Value4) sg90pos--;

sg90pos = constrain(sg90pos, 0, 180);
sg90.write(sg90pos);
delay(20);

irrecv.resume();
}
}

 

Хочу заметить что некоторые пульты, шлют код кнопки только первый посылкой, далее если кнопка все еще нажата они шлют код повторения что то формата 0xFFFFFFFF.

Собственно к чему я это пишу, непонятно чего хочет топик стартер (поворачивать серву при нажатии на кнопку пульта на единицу градусов, или поворачивать серву пока нажата кнопка пульта).

maxi_10
Offline
Зарегистрирован: 05.01.2012

Извиняюсь не заметил, что оба сообщения принадлежат автору.

 

в общем: 1) необходимо определится с алгоритмом работы, 2) понять, что шлет пульт, когда кратковременно нажата кнопка один, и что шлет пульт если ее нажать и удерживать.

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

При одно кратном нажатии выдает код х , а при задержки конопки код у , если после задержки нажать одно кратко то мы дает код у и так все время выдает рандомно эти 2 кода . Код у повторяеться при нажатии всех остальных кнопок , а код х у них у всех разный . Как быть 

maxi_10
Offline
Зарегистрирован: 05.01.2012

mantana977 пишет:

При одно кратном нажатии выдает код х , а при задержки конопки код у , если после задержки нажать одно кратко то мы дает код у и так все время выдает рандомно эти 2 кода . Код у повторяеться при нажатии всех остальных кнопок , а код х у них у всех разный . Как быть 


#define RECV_PIN 11 //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long Value1 = 0xECE16110;
unsigned long Value2 = 0x4AB0F7B6;
unsigned long Code 
Servo sg90;
int sg90pos = 0;

void setup(){
irrecv.enableIRIn(); // включить приемник
sg90.attach(3);
}

void loop(){
if (irrecv.decode(&results)){
	if (results.value != 0xFFFFFFFF) {
		Code = results.value;
		ChCode;
	}
	else {
		ChCode
	}
	irrecv.resume();
}

ChCode(){
	if (Code == Value1){
		sg90pos++;
		ServWrite;
	}
	if (Code == Value2){
		sg90pos--;
		ServWrite;
	}
}

ServWrite(){
	sg90pos = constrain(sg90pos, 0, 180);
	sg90.write(sg90pos);
	delay(20);
}

Необходимо создать переменную которая будет ловить первый код и предоставлять его в случае если придет код повтора.

приблизительно както так. код написал для примера, проверить его не могу.

maxi_10
Offline
Зарегистрирован: 05.01.2012

 

...

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

а что такое ChCode

maxi_10
Offline
Зарегистрирован: 05.01.2012

Это функция.

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

Вот выдает такие вот ошибки при компиляции , что нужнго сделать ?

maxi_10
Offline
Зарегистрирован: 05.01.2012

необходимо писать void ChCode()

просто по запарке забыл написать (код писал в блокноте).

Ну и проверь чтоб везде где нужно стояла ;

maxi_10
Offline
Зарегистрирован: 05.01.2012

У меня просто нет компилятора под рукой.

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

Точно , спасибо большое . Только вот еще одна проблема

maxi_10
Offline
Зарегистрирован: 05.01.2012

Если не ошибаюсь то в функции loop не хватает фигурных скобок.