Skocz do zawartości

Odczyt kodów z pilota RC5


Pomocna odpowiedź

Dzien dobry,

 

Dlaczego jak klikam klawisz 2 na pilocie to raz wyswietla mi sie kod 2370 a raz 322? Ponizej kod na odczyt klawiszy z pilota. Uzywam odbiornika CHQ1838 38kHz. Pilot philips 36kHz.

 

Na drugim zdj widac ze - dla klawiszy wyswietlaja sie nastepujace wartosci - które chcialbym wgrać do robota zdalnie sterowanego. 

2klawisz - 2370 i potem w nast. linijce 322

4klawisz - 2372 i potem w nast. linijce 324

6klawisz - 2374 i potem w nast. linijce 326

8klawisz - 2376 i potem w nast. linijce 328

 

image.thumb.png.36544fe4a8e11dddefc279ea0718db62.png

Ponizej zamieszczam program :

 

#include <IRremote.h>


int receiverpin=13;         // definiujemy PIN odbiornika
IRrecv irrecv(receiverpin); // nadajemy nazwe odbiornika
decode_results results;     // odwolujemy sie odbiornika podczerwieni


void setup() {

 Serial.begin(9600);               // uruchom monitor portu szeregowego
 irrecv.enableIRIn();       // uruchamia odbiornik podczerwieni

}

void loop() {

if (irrecv.decode(&results)); // spr.czy otrzymalismy sygnał z nadajnika

{
  

Serial.print(results.value);      // wyswietl wartosc w monitorze portu szeregowego
Serial.println("Kod z pilota dla przycisku");

irrecv.resume();
                // odbiera następną wartość
delay(10000);
}

}

image.thumb.png.641a8d8745abc5a0bec64cbcb3221727.png

Edytowano przez mateusz797
Link to post
Share on other sites

Być może jest tak, że to co nadaje Twój pilot niefortunnie pasuje do dwóch standardów kodowania i raz odbierane są dane w jednym a raz w drugim. Na szczęście w results jest więcej informacji niż tylko kod binarny. Niech Twój program wygląda mniej więcej tak (kod z przykładu):

void loop() {
    if (IrReceiver.decode()) {
        IrReceiver.printResultShort(&Serial);
        Serial.println();
        IrReceiver.resume(); // Receive the next value
    }
    delay(100);
}

albo chociaż dodaj:

Serial.println(results.decode_type);

Ta liczba pokaże algorytm jaki został przyjęty podczas dekodowania. Jeśli wszystko działa w sposób pewny, powinien być zawsze ten sam.

Link to post
Share on other sites
(edytowany)

Spr, Twoj progranm - ponizej wstawiam. Pokazuje mi błąd. i Napewno z tym kodem mi nie działa Robot IR - KOD PONIZEJ. 


#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 2370:
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   case 2372:

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

   case 2374:


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


   case 2376:

    tyl();
    
      break;     // 8 - Jazda do tylu

 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

 

Zmienilem program na Twoj. Taki mam blad:

 

Arduino:1.8.13 (Windows Store 1.8.42.0) (Windows 10), Płytka:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"



sketch_dec11a:6:26: error: expected initializer before '.' token
 decode_results IrReceiver.decode;     // odwolujemy sie odbiornika podczerwieni
                          ^
C:\Users\Lenovo\Documents\Arduino\RobotIR\Kody z pilota - odczyt\sketch_dec11a\sketch_dec11a.ino: In function 'void loop()':
sketch_dec11a:20:9: error: 'IrReceiver' was not declared in this scope
     if (IrReceiver.decode())
         ^~~~~~~~~~
C:\Users\Lenovo\Documents\Arduino\RobotIR\Kody z pilota - odczyt\sketch_dec11a\sketch_dec11a.ino:20:9: note: suggested alternative: 'IRreceiverpin'
     if (IrReceiver.decode())
         ^~~~~~~~~~
         IRreceiverpin
sketch_dec11a:25:9: error: expected ';' before 'IrReceiver'
         IrReceiver.resume(); // Receive the next value
         ^~~~~~~~~~
exit status 1
expected initializer before '.' token


Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
 

#include <IRremote.h>


int IRreceiverpin=13;         // definiujemy PIN odbiornika
IRrecv irrecv(IRreceiverpin); // nadajemy nazwe odbiornika
decode_results IrReceiver.decode;     // odwolujemy sie odbiornika podczerwieni


void setup() {

 Serial.begin(9600);               // uruchom monitor portu szeregowego
 irrecv.enableIRIn();       // uruchamia odbiornik podczerwieni

}


  
void loop() 
{
    if (IrReceiver.decode()) 
    {
      
        IrReceiver.printResultShort(&Serial);
        Serial.println()
        IrReceiver.resume(); // Receive the next value
    }
    delay(100);

}

 

Edytowano przez mateusz797
Link to post
Share on other sites

I naprawdę nie widzisz co trzeba zmienić w tym ostatnim programie, by stał się poprawnym? To jak sobie poradzisz, gdy zrobisz literówkę we fragmencie, który nie został skopiowany ctrl/C-ctrl/V z innego gotowca?

Wskazówka: jaki obiekt (jaką mający nazwę) zadeklarowałeś jako odbiornik?

@ethanakUgryzłeś się w język, żeby nie zasłużyć na kolejnego "specjalistę od Arduino"? Słusznie. Ciekawe kim ja za chwilę zostanę?..

Edytowano przez marek1707
Link to post
Share on other sites
(edytowany)

Ten program mi zadziałał, trzeba tylko było w if pozmieniać irrecv.decode tak jak u mnie. Otrzymałem takie wyniki na porcie szeregowym. Czyli rozumiem ze do programu robota musze wpisać tak. Dobrze to rozumiem? 🙂

2 - 0x2370 prosto

4 - 0x2372 lewo

6- 0x2374 prawo

8- 0x2376 tył

#include <IRremote.h>


int receiverpin=13;         // definiujemy PIN odbiornika
IRrecv irrecv(receiverpin); // nadajemy nazwe odbiornika
decode_results results;     // odwolujemy sie odbiornika podczerwieni


void setup() {

 Serial.begin(9600);               // uruchom monitor portu szeregowego
 irrecv.enableIRIn();       // uruchamia odbiornik podczerwieni

}

void loop() {

if (irrecv.decode()); // spr.czy otrzymalismy sygnał z nadajnika
irrecv.printResultShort(&Serial);

Serial.println();

irrecv.resume();
                // odbiera następną wartość
delay(100);
}

Program do Robota IR:


#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 0x2370:
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   case 0x2372:

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

   case 0x2374:


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


   case 0x2376:

    tyl();
    
      break;     // 8 - Jazda do tylu

 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

image.thumb.png.78b1f359fe7c089854e1d25dc5746566.pngimage.png

Edytowano przez mateusz797
Link to post
Share on other sites
(edytowany)

No wystawiłem zrzuty Protocol unknown data=0x0 (0 bits) . Czyli to znaczy że zero na początku wstawiamy potem x i kod dla danego przycisku np. 2370, 2372...  Takie kody mi wczesniej generuje mi program np.2370 322 dla dwójki itd. (tak jak print screen) Pilot jest od philipsa (na dalszych zdj). Był kupowany w sklepie botland. Pisze wyraźnie ze ma standard kodowania RC5 i 36kHz. Odbiornik podczerwieni - 38kHz (kolejne zdj). Wpisałem do programu robota 0x2370 . Robot sie nie rusza. A zostały spełnione następujące kryteria:

Windows 10 zainstalowany - ----> Biblioteka poprawnie wgrana ------->odczytuje już poprawnie arduino------> arduino mega działa poprawnie wykrywa porty USB--------->program sie kompiluje i wgrywa do płytki, nie ma w nim błędów ------->

Więc ja nie rozumiem gdzie tutaj tkwi problem, czy ktoś wie jak to w końcu rozwiązać?

 

image.thumb.png.ef363dd9be6a70d8b75091bab07d4f99.png

image.thumb.png.b398f2bc9715293d19ee5f9b55da7baa.pngimage.thumb.png.5c5faf266e8c7069b1c39f28781cdd8a.png

Program do pilota:

#include <IRremote.h>


int receiverpin=13;         // definiujemy PIN odbiornika
IRrecv irrecv(receiverpin); // nadajemy nazwe odbiornika
decode_results results;     // odwolujemy sie odbiornika podczerwieni


void setup() {

 Serial.begin(9600);               // uruchom monitor portu szeregowego
 irrecv.enableIRIn();       // uruchamia odbiornik podczerwieni

}

void loop() {

if (irrecv.decode(&results)); // spr.czy otrzymalismy sygnał z nadajnika

{
  

Serial.print(results.value);      // wyswietl wartosc w monitorze portu szeregowego
Serial.println("Kod z pilota dla przycisku");

irrecv.resume();
                // odbiera następną wartość
delay(5000);
}

}

Program do robota IR:


#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 0x2370:
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   case 0x2372:

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

   case 0x2374:


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


   case 0x2376:

    tyl();
    
      break;     // 8 - Jazda do tylu

 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

 

Edytowano przez mateusz797
Link to post
Share on other sites

Co rozwiązać? Zapomnij na razie o tym robocie. Miałeś napisać i uruchomić prosty program, kóry pokaże jakie kody wysyła Twój pilot. Gdzie są te kody? Skąd wziąłeś te swoje 4-cyfrowe liczby? Pokaż ekran monitora portu szeregowego na którym jakieś kody widać gdy naciskasz przyciski na pilocie. Po cholerę nam cały ekran zer? Po co wstawiasz tak bezwartościowe rzeczy? A jeśli kody szybko uciekają w górę, to zwiększ opóźnienie tak by było je widać na raz wszystkie. Wtedy zobaczymy co tam program wypisuje - to są ważne informacje, nawet jeśli teraz nie ogarniasz ich znaczenia. Dotarło?

A jeśli już jakieś kody miałeś wypisane i zapamiętałeś je, to skąd założenie, że one są szesnastkowe? Bo inni tak wpisują w swoich programach? Weź się ogarnij. Przecież wypisywałeś to na konsolę we własnym programie, zwykłym printem.

Edytowano przez marek1707
Link to post
Share on other sites
(edytowany)

 

Widze wlasnie ze pomoglo to wstawienie opoznienia. Dla poszczegolnych klawiszy (2,4,6,8 na pilocie). Czyli wychodzi na to ze do instrukcji case w robocie trzeba wstawic operatory lub zeby albo takim kodem robot czytał instrukcje albo takim np.  0x942 lub 0x142. Tylko ze program mi  potem pokazal bledy.Opis nizej

 

Klawisze

2 - 0x942 lub 0x142.

4 - 0x944 lub 0x144.

6. 0x946 lub 0x146.

8. 0x948 lub 0x148

image.thumb.png.6e65be8b1f9eb0212b617259aa228d01.png

 

Opis błędów po wgraniu programu z (|| - LUB) do robota:

Arduino:1.8.13 (Windows Store 1.8.42.0) (Windows 10), Płytka:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\Lenovo\Documents\Arduino\RobotIR\RobotIR\RobotIR.ino: In function 'void IRtranslate()':
RobotIR:97:4: error: duplicate case value
    case 0x944 || 0x144:
    ^~~~
C:\Users\Lenovo\Documents\Arduino\RobotIR\RobotIR\RobotIR.ino:90:4: note: previously used here
    case 0x942 || 0x142:
    ^~~~
RobotIR:103:4: error: duplicate case value
    case 0x946 || 0x146:
    ^~~~
C:\Users\Lenovo\Documents\Arduino\RobotIR\RobotIR\RobotIR.ino:90:4: note: previously used here
    case 0x942 || 0x142:
    ^~~~
RobotIR:111:4: error: duplicate case value
    case 0x948 || 0x148:
    ^~~~
C:\Users\Lenovo\Documents\Arduino\RobotIR\RobotIR\RobotIR.ino:90:4: note: previously used here
    case 0x942 || 0x142:
    ^~~~
exit status 1
duplicate case value


Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
 


#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 || 0x142:
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   case 0x944 || 0x144:

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

   case 0x946 || 0x146:


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


   case 0x948 || 0x148:

    tyl();
    
      break;     // 8 - Jazda do tylu

 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}

image.png

image.png

Edytowano przez mateusz797
Link to post
Share on other sites

Ach, rozumiem, czyli nie znasz też języka w którym próbujesz pisać program. To co zrobiłeś w swoim switch-case jest bez sensu.

Spróbuj tego (przykład jednego przycisku):

case 0x946:
case 0x146:
    prawo();
    break;

albo postaraj się zauważyć, że oba kody dla tego samego przycisku różnią się tylko na jednym bicie. Na tej pozycji pilot RC5 za każdym razem wysyła specjalną flagę informującą, czy przycisk jest wciąż trzymany (wtedy bit jest taki sam jak w poprzednio odebranym kodzie), czy w międzyczasie został puszczony i wciśnięty ponownie (wtedy stan flagi jest odwrotny). Zatem wystarczy, że będziesz tę flagę (bit nr 11) zerował podczas analizy kodu:

switch(results.value & 0x07FF){

i wtedy wystarczą pojedyncze "case" z kodami zaczynającymi się na cyfry poniżej 8, czyli np. 0x148, 0x146 itd.

EDIT: A jak chcesz tego robota zatrzymywać?

Edytowano przez marek1707
Link to post
Share on other sites

Ok. Robota chce zatrzymać np. Klikne zero i powstawiam w instrukcje stop stany niskie silnika. Niskie czyli 0V a zatem tak zeby je wyłączyć albo byle jakie stany byle zeby prędkość byla 0. Czyli rozumiem zeby np. 2x pisać .

Dla 2 :

case : 0x142:

case : 0x942:

prosto();

break;

Dla 4:

case: 0x144:

case: 0x944:

lewo();

break ;

Itd. 

Rozumiem również że drugim rozwiązaniem jest zerowanie tej flagi czyli wstawienie w miejsce Switch(results.value & 0x07F){

A dlaczego akurat tutaj wpisales 0x07F czy to jest jakaś stała nazwa?? 

Jeśli chodzi o robota to nie moge o nim zapomnieć bo już dawno zostal zbudowany i poprawnie podlaczony. Zobacz fotki 😄

 

 

 

1608318534644492584445590998036.jpg

16083185498408180879578577536097.jpg

16083185617736463243326521002758.jpg

16083185865377382243976510978908.jpg

16083186034436495653241585067428.jpg

1608318614974885864707346902449.jpg

16083186265253876801433876010611.jpg

16083186438931818257410018271699.jpg

1608318652872140894715475646901.jpg

16083186632105039140953862785110.jpg

Link to post
Share on other sites
10 minut temu, mateusz797 napisał:

tutaj wpisales 0x07F czy to jest jakaś stała nazwa??

1. Nie wpisałem 0x07F, czytaj uważniej. Byłoby dobrze, gdybyś był w stanie skojarzyć bit numer 11 kodu RC5 z argumentem operacji AND. Wskazówka: rozpisz sobie tę stałą na bity i policz je od prawej, zaczynając od zera - może coś zaświta. Na Twoim miejscu natychmiast porzuciłbym prace nad "robotem" (to jednak zwykły samochodzik zdalnie sterowany) i zainteresował sie kursem języka C od postaw. Programowaniem "na czuja" daleko nie zajedziesz. Nawet taką niebieską zabawką.

2. Normalnie wystarczy jeden znak zapytania. Czy dwa jakoś podnoszą moc pytania? W jakim języku?

3. Pojazd zacny, choć martwią mnie te kabelki wtykane do mocarnego złącza akumulatora - to może się źle skończyć, no i płytka stykowa. Nie przyszło Ci do głowy kupienie normanej wtyczki XT60? A podczas pisania programu testowego odbierającego kody robot mógł nie istnieć choć podejrzewam, że takie niuanse językowe są trochę poza Twoim zasięgiem.

https://abc-rc.pl/product-pol-1571-Wtyki-XT60-Konektor-wtyk-i-gniazdo-wysoko-pradowe.html

Link to post
Share on other sites
(edytowany)

1. Nie rozumiem co w Twoim,, jezyku,, znaczy skojarzyć bit kodu RC5 z argumentem operacji AND. Nic z teho zdania nie zrozumiałem przyznam sie szczerze. Po pierwsze kabelki nie sa powtykane lecz solidnie wlutowane - nazwijmy rzeczy po imieniu 🙂 Poczytam o tej wtyczce. Pierwszy raz o takiej słyszę 🙂

2.?? To jest pytanie które moze miec ciekawa odpowiedz ale nie musi 😄

3. Robot mógł nie istnieć. No jak jest zbudowany to istnieje ale nie jest ożywiony jeszcze. Zmontowalem układem przeprowadzilem test silników nadalem stany zeby jechał w odp. Kierunku. Potem program na pilota i czas odpalić robota. 😄 Ja podchodze do arduino i robotów for fun. Nie zajmuje sie tym profesjonalnie i nie bede zajmował. Tylko dla zabawy zeby sobie  takie rzeczy porobić. 

Edytowano przez mateusz797
Link to post
Share on other sites

No to kurs C, coś "od zera do programmera", bardzo rekomenduję. Jeśli w tak prostym kodzie masz problemy natury podstawowej, to jak sobie wyobrażasz ten fun z budowy robota, skoro na każdym kroku będziesz potykał się o składnię, o semantykę, operatory czy rozumienie operacji logicznych? 

trying-to-learn-any-programming-language-100-just-a-little-7917454.thumb.png.8891c2feaef657ff40e282d2e5258c05.png

  • Lubię! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.