Форум программистов, компьютерный форум, киберфорум
Наши страницы
Arduino
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
komalov
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 6
1

Удержание светодиода при приеме кода залипания с ИК приемника

07.12.2014, 15:31. Просмотров 1431. Ответов 6
Метки нет (Все метки)

Здравствуйте . Я подключил IR приёмник к ардуино и всё было хорошо,пока я не захотел сделать программу в которой если кнопка на пульте зажата то светодиод горит,когда она не зажата он гаснет.Ведь пуль при передачи сигнала если кнопка зажата сначала один раз передаёт код кнопки а потом стандартный код о её залипании.Помогите пожалуйста реализовать такую программу.
0
Миниатюры
Удержание светодиода при приеме кода залипания с ИК приемника  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2014, 15:31
Ответы с готовыми решениями:

Ошибка при приеме данных через COM (Arduino-Xbee-PC)
Добрый день! Передаю данные с ардуины (Mega2560) через Xbee (EndDevice) на...

Назначение элементов в схеме приемника кода
есть схема программы с семисегментыми индикаторами!!.необходимо назначение...

Виснет USART при приеме
Добрый вечер всем. Подскажите как решить проблему с USORT. Проверяю через...

Задание при приеме на работу
Здравствуйте, уважаемые форумчане! При устройстве на работу получила перечень...

Удержание фокуса на TextBox при клике на другие элементы управления
Как сделать так, что бы не снимался фокус с текстбокса, когда нажимаешь на...

6
raxp
10186 / 6569 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.12.2014, 00:32 2
...пульт пульту - рознь. Есть те, что передают постоянно один код при нажатии и удержании.

Если ваш сферический пульт при удержании передает другую посылку, то отлавливайте ее после приема нужного кода нажатия клавиши. К примеру, пришел код нажатия "1", устанавливаем логический флаг в единицу, далее приходит код удержания, если флаг единичный - проверяем наличие кода залипания в цикле через millis(), если по прошествии заданного интервала код залипания все еще идет - держим пин на светодиод в HIGH, если нет - гасим в LOW. Профит.
0
komalov
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 6
08.12.2014, 14:01  [ТС] 3
raxp,

Подкорректируйте пожалуйста мой код .Вот всё что я смог придумать :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <IRremote.h>
 
int RECV_PIN = 3;//Контакт IR приёмника
int motor = 5;
unsigned long n; // переменная запоминающая предыдущий сигнал с пульта
IRrecv irrecv(RECV_PIN);
decode_results results;
 
void setup()
{
  pinMode(motor, OUTPUT);
  irrecv.enableIRIn(); // Включаем ресивер
 
}
void loop()
{
  if (irrecv.decode(&results))
  { if (results.value != 4294967295)//1641415931 - сигнал кнопки;4294967295-сигнал о залипании кнопки;
    { n = results.value;  if (results.value == 1641415931)
      {
        digitalWrite(motor, HIGH);
      }
      else {
        digitalWrite(motor, LOW);
      }
    }
    else {
      if (n == 1641415931) {
        digitalWrite(motor, HIGH);
      }
    }
 
    delay(50);
    irrecv.resume();
    delay(50);
  }
  else {
    digitalWrite(motor, LOW);  //Если сигнала небыло выключаю мотор;
  }
 
}
0
raxp
10186 / 6569 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.12.2014, 19:32 4
И в теги за вас обернуть и в баньку сводить. Перечитайте шаги, которые вам рекомендовал, вы их не только перепутали, но и проигнорировали некоторые.
0
komalov
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 6
08.12.2014, 22:56  [ТС] 5
raxp, Просто тот код который я показал я написал раньше,и я е понял как через millis() реализовать проверку.Ведь сигнал с пульта идёт не постоянно а через короткий промежуток времени,поэтому при выполнении моего кода светодиод очень быстро мигает.
0
raxp
10186 / 6569 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
09.12.2014, 07:46 6
Накапливайте за заданное время несколько посылок, если подряд одна и та же - считаем что данное состояние имеет место и только после этого выполняем действие. Как пользоваться millis есть на офсайте дуины.
0
komalov
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 6
09.12.2014, 21:03  [ТС] 7
raxp,
Я не понял как сделать это через millis(),поэтому я вычислил задержку между сигналами с помощью той же самой millis() и просто поставил её в своей программе.Работает идеально.Тут я контролирую уже два светодиода:
Код
#include <IRremote.h>

int RECV_PIN = 3;//Контакт IR приёмника
int L1 = 5;
int L2 = 4;
unsigned long n; // переменная запоминающая предыдущий сигнал с пульта
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  irrecv.enableIRIn(); // Включаем ресивер

}
void loop()
{
  if (irrecv.decode(&results))
  { if (results.value != 4294967295)//1641415931 - сигнал кнопки 1; 1641448571-сигнал кнопки 2;4294967295-сигнал о залипании кнопки;
    { n = results.value;
      switch (results.value) {
        case 1641415931 :
          digitalWrite(L1, HIGH);
          digitalWrite(L2, LOW);
          break;
        case 1641448571:
          digitalWrite(L1, LOW);
          digitalWrite(L2, HIGH);
          break;
        default:
          digitalWrite(L1, LOW);
          digitalWrite(L2, LOW);
      }

    }
    else {//если сигнал был 4294967295
      switch (n) {
        case 1641415931 :
          digitalWrite(L1, HIGH);
          digitalWrite(L2, LOW);
          break;
        case 1641448571:
          digitalWrite(L1, LOW);
          digitalWrite(L2, HIGH);
          break;
        default:
          digitalWrite(L1, LOW);
          digitalWrite(L2, LOW);
      }
    }


    irrecv.resume();
    delay(108);
  }

  else {
    digitalWrite(L1, LOW);
    digitalWrite(L2, LOW);  //Если сигнала небыло выключаю светодиод;
  }

}
0
09.12.2014, 21:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2014, 21:03

STM32 Зажигание светодиода при нажатии на кнопку и отключение при последующем
Здравствуйте. Использую плату STM32F030F4. Только начал изучать контроллеры,...

Отключение залипания клавиш при нажатии более 5 клавиш
Всем привет, у меня глупый вопрос. Как сделать, чтобы можно было зажимать...

SerialPort(COM) Разрыв пакета при приеме
Вся соль в приеме данных... Настроил виртуальный порты - гоняю данные все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru