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

@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 🙂

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. 

(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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...