Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Arduino - dwustronna komunikacja Bluetooth HC-05 <--> IR

Kondordt 09 Mar 2017 01:36 1356 6
  • #1
    Kondordt
    Level 10  
    Witam.
    Potrzebuje wskazówek odnośnie zmian w kodzie tego projektu:

    Turning a LED on and off with an Arduino, Bluetooth and Android. 3 LEDs and 3 Switches

    W skrócie – przy pomocy aplikacji łączę się z Arduino ( bluetooth HC-05 ) i mam możliwość załączania/wyłączania diod zarówno smartfonem, jak i przyciskami zwiernymi. Jeśli wciskam przycisk aplikacja również reaguje, monitoruje aktualny stan LOW lub HIGH.
    Zamiast przycisków zwiernych, chcę mieć możliwość sterowania pilotem IR, ale nie wiem czy switch ... case będzie do tego odpowiednia.

    W chwili obecnej:

    Code: c
    Log in, to see the code


    >wciskam jeden raz wybrany przycisk na pilocie
    > odbiornik IR odczytuje kod
    > BTserial wysyła do aplikacji na smartfonie ciąg znaków, np: <L,1,1>
    > aplikacja odczytuje <L,1,1> jako: włącz diodę nr 1 i zmień wygląd przycisku ( czerwony > zielony, off > on)

    Połowa sukcesu, bo musi działać też w drugą stronę. Tylko co zrobić, żeby wciskając drugi raz ten sam przycisk IR odebrał kod, BTserial wysłał informację <L,1,0> do aplikacji - zmień wygląd przycisku ( zielony > czerwony, on > off) i dioda nr 1 zgasła?

    Cały kod:
    Code: c
    Log in, to see the code

    Pozdrawiam.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Helpful post
    #2
    McMarycha
    Level 31  
    Jeżeli wcisniesz drugi raz ten sam przycisk to wyśle ten sam komunikat. Możesz to zrobić za pomocą inkrementalni zmiennej.
    Tworzysz zmienną np. int a = 1;
    Tzn gdy wciśniesz raz przycisk i dioda się zapala to zmienna a++;
    i wtedy zmienna "a" bedzie wynosić 2. Przy następnym wciśnięciu przycisku sprawdzasz czy a==2, jeżeli tak to wciśnięcie spowoduje zgaśnięcie diody i trzeba sprawić aby zmienna zmniejszyłą wartość tzn a--;
    W przypadku gdy a == 1 zamiast 2 to po wciśnięciu dioda się ma zapalić.

    Nie napisze Ci kodu bo nie pamiętam jak programuje się arduino. Ale mam nadzieje ze mój post Cię nakieruje.
  • #3
    Kondordt
    Level 10  
    Dziękuję za zainteresowanie. Algorytm jest zrozumiały, ale nie mam doświadczenia w programowaniu, więc nie wiem jak to opisać w języku arduino. Czy da się to zrobić w switch...case, czy może lepiej użyć if...else.
    Mam coś takiego:

    Code: c
    Log in, to see the code


    Dioda włącza się i stan w aplikacji również zmienia się, ale nie mogę jej wyłączyć.
  • #4
    McMarycha
    Level 31  
    A czy wyświetlana zmienna "a" zmienią swoją wartość ?
  • #5
    Kondordt
    Level 10  
    Powyższy fragment kodu zmienia stan przycisku w aplikacji, ale dioda zapala się na ułamek sekundy i gaśnie, a Serial monitor wyświetla jednocześnie:
    0xFF6897
    2
    1

    To jest fragment, który sprawdza stan przycisków zwiernych i wysyła informację do aplikacji.

    Code: c
    Log in, to see the code

    Być może tu da się coś zmienić, ale nie rozumiem co dzieje się na początku.
  • #6
    McMarycha
    Level 31  
    Po pierwsze to zmień
    "if (results.value == 0xFF6897)"
    na
    "if ((results.value == 0xFF6897) && (a == 1))"

    I pytanie, czy dioda gaśnie w trakcie jak jeszcze trzymasz przycisk ?
    Dla sprawdzenia pomiedzy jednym warunkiem, a drugim dodaj delay(2000);
    Zauważ z jaką prędkością arduino wykonuje operacje i gdy np na 0,5 sec wciśniesz przycisk to on moze zdążyć sprawdzić to 2 razy.
  • #7
    Kondordt
    Level 10  
    Dioda jedynie lekko mrugnie i gaśnie jak jeszcze trzymam przycisk.

    Code: c
    Log in, to see the code


    W tym momencie wciskam przycisk, zapala się na 2 sek. i gaśnie.

    Dodano po 25 [minuty]:

    Dziękuję kolego za pomoc. Udało mi się rozwiązać problem w ten sposób:

    Code: c
    Log in, to see the code


    Pozdrawiam.