Sterowanie IR

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
maniek_com
Młodszy majsterkowicz
Posty: 12
Rejestracja: 1 maja 2013, 10:35

Sterowanie IR

Post autor: maniek_com » 11 maja 2013, 11:47

Witam wszystkich mam pytanko mam taki kod wyświetla napis po wciśnięciu odpowiedniego przycisku ,jak zrobić aby wyświetlało to samo ale pod warunkiem, że np został naciśnięty przycisk 1 potem przycisk 2(np 0xFD4AB5 i 0xFD0AF5) dzięki za wszelką pomoc
#include <IRremote.h>
#define irPin 12
IRrecv irrecv(irPin);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {

if (results.value==0xFD4AB5) {
{

Serial.println("w lewo");
}}

irrecv.resume();
}
}
Ostatnio zmieniony 12 maja 2013, 19:58 przez maniek_com, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1187
Rejestracja: 18 lis 2011, 02:18

Re: Sterowanie IR

Post autor: Marhef » 11 maja 2013, 23:00

Jeżeli chcesz, żeby wyświetlało przy jednoczesnym wciśnięciu dwóch przycisków, zamień linijkę:
if (results.value==0xFD4AB5) {
na:
if ((results.value==0xFD4AB5) && (results.value==0xFD0AF5)) {
Jeżeli ma się wyświetlać po wciśnięciu jednego lub drugiego przycisku, linijka będzie wyglądała tak:
if ((results.value==0xFD4AB5) || (results.value==0xFD0AF5)) {

Ale ten temat, jak i drugi założony przez Ciebie w tym dziale, powinien zostać przeniesiony do działu Arduino -> Jak to zrobić?
maniek_com
Młodszy majsterkowicz
Posty: 12
Rejestracja: 1 maja 2013, 10:35

Re: Sterowanie IR

Post autor: maniek_com » 12 maja 2013, 00:47

OK następnym razem będę wiedział bo ja chyba nie mogę przenieść tylko admin może to zrobić a co do kodu to
if ((results.value==0xFD4AB5) && (results.value==0xFD0AF5)) to nie działa ,natomiast chodziło mi o to czy da się tak zrobić że wciskam przycisk 1 następnie wciskam przycisk 2 i wtedy wyświetla coś tam -chodzi mi o to żeby za pomocą pilota np wpisać kod dostępu.
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Sterowanie IR

Post autor: rafalzaq » 12 maja 2013, 01:49

A sprawdziłeś co odbiornik odbiera jak naciśniesz jednocześnie oba przyciski? Posądzam, że nie da się czegoś takiego zrobić. Musiałby być jakiś inny kod sygnalizujący przyciśnięcie dwóch przycisków naraz. Prawdopodobnie będzie wysyłany kod przycisku, który został wciśnięty później (bo trudno wcisnąć oba idealnie w tym samym momencie).
Może użyć np. dwóch zmiennych,których wartość będzie ustawiana na 1 jeśli zostanie rozpoznany dany kod. Jeśli obie zmienne będą miały wartość 1 to ma się stać to co tam chcesz. Do tego trzeba dodać resetowanie wartości po upływanie jakiegoś czasu. To powinno być pomocne http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Awatar użytkownika
cube
Złota rączka
Posty: 834
Rejestracja: 2 gru 2012, 17:02

Re: Sterowanie IR

Post autor: cube » 12 maja 2013, 10:40

Zapoznaj się z tablicami i przerwaniami.
Odbieranie kodu IR zrób w przerwaniu. Następnie, już w loop(), przepisz zmienną, na której operowało przerwanie do tablicy. Po np. 4 cyklach (oczywiście musisz mieć instrukcję warunkową sprawdzającą, które pozycje tablicy są już zajęte) robisz porówanie tablic z tablicą, w któej wcześniej zapisałeś kod na sztywno - jest do tego funkcja. W dodatku, powinieneś użyć jakiejś biblioteki do odmierzania czasu, np. Timers, aby po 3-5 sek. zapisać roboczą tablicę zerami - aby po 5 sek trzeba było wpisywać kod od nowa.
maniek_com
Młodszy majsterkowicz
Posty: 12
Rejestracja: 1 maja 2013, 10:35

Re: Sterowanie IR

Post autor: maniek_com » 12 maja 2013, 14:44

Rozumiem ,dziękuje za wskazówki myślałem że da się to obejść łatwiej no cóż zapowiadają się długie godziny pracy .
Awatar użytkownika
jacek
Młodszy majsterkowicz
Posty: 47
Rejestracja: 28 mar 2013, 22:17
Kontakt:

Re: Sterowanie IR

Post autor: jacek » 12 maja 2013, 16:10

maniek_com pisze:...to if ((results.value==0xFD4AB5) && (results.value==0xFD0AF5)) to nie działa ...
Nie działa i nie może działać, bo zmienna results.value nie może mieć dwóch wartości na raz ... ten warunek zawsze będzie miał wartość false.
pozdrawiam
Jacek
Awatar użytkownika
jacek
Młodszy majsterkowicz
Posty: 47
Rejestracja: 28 mar 2013, 22:17
Kontakt:

Re: Sterowanie IR

Post autor: jacek » 12 maja 2013, 16:18

rafalzaq pisze:A sprawdziłeś co odbiornik odbiera jak naciśniesz jednocześnie oba przyciski?
Prawdopodobnie nie da się nacisnąć obu przycisków na raz, a tylko po kolei w bardzo krótkim odstępie czasu i nadajnik wyśle oba kody. Proponuję następujące rozwiązanie:

Kod: Zaznacz cały

#define CODE1 0xFD4AB5
#define CODE2 0xFD0AF5
#define MAX_DELAY 200 // maksymalny odstęp pomiędzy naciśnięciami przycisków

uint32_t time_p1 = 0, time_p2 = 0;

if (results.value == KOD1) 
  time_p1 = millis();
if (results.value == KOD2) 
  time_p2 = millis();

if ((time_p1 != 0) && (time_p2 != 0) && (abs (time_p1 - time_p2) < MAX_DELAY))
{
  // ob przyciski zostały naciśnięte
}
pozdrawiam
Jacek
Awatar użytkownika
cube
Złota rączka
Posty: 834
Rejestracja: 2 gru 2012, 17:02

Re: Sterowanie IR

Post autor: cube » 12 maja 2013, 16:42

Naciskanie 2 przycisków na raz i tak jest nieskuteczne, bo dioda na pilocie wyśle najpierw pierwszy kod, później drugi. W dodatku, w większości wypadków, kod po naciśnięciu przycisku jest wysyłany kilkukrotnie, a jedynie funkcje w bibliotece powodują że wyświetlany jest raz. Dane wysyłasz szeregowo, to i szeregowo musisz je odbierać, nie ma innej opcji.
maniek_com
Młodszy majsterkowicz
Posty: 12
Rejestracja: 1 maja 2013, 10:35

Re: Sterowanie IR

Post autor: maniek_com » 12 maja 2013, 20:01

Jeżeli naciskam dwa przyciski to nic nie jest wyświetlane natomiast chodziło mi o to ,że wciskam przycisk 1 następnie wciskam przycisk 2 (np wprowadzenie hasła za pomocą pilota i jak podamy hasło to coś tam się dzieje) chyba Cube ma rację i nie ma innego wyjścia.
ODPOWIEDZ

Strony partnerskie: