Skocz do zawartości

Odczyt kodów z pilota RC5


Pomocna odpowiedź

(edytowany)

Gdybym miał problemy to. 

Nie wiedziałbym wogole jak wysterowac silniki, jak podłączyć cały układ, nadać stany, napisać program na odczyt kodów z pilota, potem do robota IR. Mam już wszystko. Złączony układ dwa programy. Jedyne co brakuje to ostatniej kropki nad i. Czyli zgrać wszystko tak z odbiornikiem podczerwieni zeby robot jechał tam gdzie chce użytkownik. Czujnik juz nawet odczytuje kody. I brakuje tylko ostatniej kropki nad i. Nie bede sie uczył C jak arduino ma inne komendy i gotowe biblioteki. Przecież to już ostatni punkt projektu jest tego robota. 99,8proc. Dla mnie to ogromny fun ze juz tak daleko zaszedlem 🙂

Edytowano przez mateusz797
Link to post
Share on other sites

@mateusz797 to tak nie działa, każdy soft i biblioteka na Arduino to w sumie C/C++ pod spodem, więc musisz znać oba te języki (C++ nie aż tak bardzo), by rozumieć, co się dzieje i się odnaleźć. W dodatku część bibliotek Arduino jest dość kiepskich, więc tu też są schody. Można się naciąć i wykorzystać jakąś bibliotekę, która za chwile okaże się kulą u nogi 😕

Za jakiś czas pewnie z rozwojem umiejętności/ambicji będziesz chciał wyjść poza Arduino i użyć jakiejś innej płytki, lub gołego procka z kompletnie innej rodziny i wtedy znajomość C to "must have".

Jeśli embedded Cię kręci - a skoro robisz takie rzeczy to pewnie tak, to serio, ucz się tego C, jak każdy inny, bo innej drogi nie ma 🙂

Link to post
Share on other sites

Ok a co jak powiem ze mialem juz kiedyś jezyk C i poza miganiem dioda juz nie rozumiałem dalszych programów co sie dzieje. Nawet jesli chodzi o wyswietlacz siedmiosegmentowy to juz niewiedzialem i nie potrafiłem zrozumieć co sie dzieje w kodzie. Dlatego nie zajmuje sie programowaniem zawodowo tylko zostałem przy arduino for fun. Właśnie arduino jest dla tych osób co dla zabawy sobie jakies rzeczy tworzą. No fakt ktos jest profesjonalista C to sobie bez problemu poradzi z arduino. Gdyby jezyk C byl taki prosty nie wymyślonoby arduino. A właśnie ono jest poto żeby ułatwić początkującym programowanie. poprzez chociażby gotowe biblioteki. Dlaczego w jezyku C jak np. Buduje sie robota IR to niewiadomo ile trzeba by pisać. W arduino sie to opiera na switch case w sumie i ifach. 

Link to post
Share on other sites
(edytowany)

Próbowałem wgrać te dodatkowe casey tak jak mowiłeś marek1707 oraz wypróbowałem kod z flaga. Robot reaguje tylko na 1 poczatkowa komende. Czyli zalozmy ze:

Klikne po włączeniu go 2 jedzie do przodu , nie da sie go zatrzymac, skrecic w lewo, prawo, czy do tyłu

Klikne po włączeniu go 4 skreca w lewo , nie da sie go zatrzymac, skrecic prawo, czy jechać do tyłu

Klikne po włączeniu  go 6 skreca w prawo , nie da sie go zatrzymac, skrecic w lewo,  czy do tyłu

Klikne 8 jedzie do tyłu , nie da sie go zatrzymac, skrecic w lewo, prawo, czy jechac do przodu.

 

Z tego wynika że jak chce nim jechać w przeciwnym kierunku to musze go najpierw złapać podczas jazdy, wyłączyć od zasilania i dopiero potem po włączeniu kliknąć 4 i wtedy bedzie tylko w lewo skrecał. Itd. Chodzi o to że nie mozna w trakcie jazdy kierunkow zmieniać. Mam takie dwa programy i tak reaguje.


#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

int receiverpin = 13;         // def.PIN odbiornika
IRrecv irrecv (receiverpin);  // nazwa odb
decode_results results;       // odwolanie do odbiornika


const int IN1 = 7;
const int IN2 = 6;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 11;
const int ENB = 3;            // Piny silników


void setup() {

irrecv.enableIRIn();         // uruchamia odbiornik podczerwieni
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);      // ust.silnikow jako wyjscia


}

void przod() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void lewo() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void prawo() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void tyl() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void stop() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 0);
analogWrite  (ENB, 0);

}

void IRtranslate(){

switch(results.value){
 
   case 0x942:
   case 0x142:
   
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   case 0x944:
   case 0x144:

   lewo();
    
    break;     // 4 - Skret w lewo

   case 0x946:
   case 0x146:


    prawo();
    
      break;     // 6 - Skret w prawo


   case 0x948:
   case 0x148:

    tyl();
    
      break;     // 8 - Jazda do tylu
      
  case 0x940:
  case 0x140:
  stop();
 
}


}
void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

int receiverpin = 13;         // def.PIN odbiornika
IRrecv irrecv (receiverpin);  // nazwa odb
decode_results results;       // odwolanie do odbiornika


const int IN1 = 7;
const int IN2 = 6;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 11;
const int ENB = 3;            // Piny silników


void setup() {

irrecv.enableIRIn();         // uruchamia odbiornik podczerwieni
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);      // ust.silnikow jako wyjscia


}

void przod() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void lewo() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void prawo() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void tyl() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void stop() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 0);
analogWrite  (ENB, 0);

}

void IRtranslate(){

switch(results.value & 0x07FF){
 
   
   case 0x142:
   
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   
   case 0x144:

   lewo();
    
    break;     // 4 - Skret w lewo

   
   case 0x146:


    prawo();
    
      break;     // 6 - Skret w prawo


  
   case 0x148:

    tyl();
    
      break;     // 8 - Jazda do tylu
      
 
  case 0x140:
  stop();
 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

 

Edytowano przez mateusz797
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.