Skocz do zawartości

Zdalnie sterowany robot - program


mateusz797

Pomocna odpowiedź

1. Program na odczyt kodow z pilota

#define TSOP_PIN 13



#include <RC5.h>

RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP



//Zmienne dla RC5

byte address; 

byte command;

byte toggle;



void setup() {                

  Serial.begin(9600);

}



void loop() {

  //Jeśli odebrano komendę

  if (rc5.read(&toggle, &address, &command))

  {

    Serial.print("A:");

    Serial.print(address);

    Serial.print(" K:");

    Serial.print(command);

    Serial.print(" T:");

    Serial.println(toggle);

  }

}

2.Program do sterujacy robotem przez podczerwień

#include <RC5.h>

int TSOP_PIN = 13;         // def.PIN odbiornika



RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP

byte address; 

byte command;

byte toggle;



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() {





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 loop() {

 if (rc5.read(&toggle, &address, &command)){

     switch(command) {

      case 2: //Do przodu

       przod();

      break;



      case 4: //Do tyłu

       lewo();

      break;



      case 6: //STOP

       prawo();

      break;



      case 8: //Obrót w lewo

        tyl();

      break; 

      

      case 0:

      stop();

      break;  

      

  





}

 }

}

3. Podpowiedz jest taka ze dla innego programu mi wyswietla takie cos. drugi raz napisalem program podobny, ale chce zeby dla standardu kodowania RC5 mi wczytywało. Pod kodem efekt, tylko podkreslam ze miesiac temu mi dzialalo normalnie dla programu nr 1. czyli standard RC5 A nagle przestalo dzialac, wpisalem inny kod i cos odbiera. ale rozne sygnaly.Co tutaj sie stało ze miesiac pozniej nie odbiera mi dla RC5 tylko dla jakiegos innego programu?

 

#include <IRremote.h>

#define irPin 13

IRrecv irrecv(irPin);

decode_results results;



void setup() {

   Serial.begin(9600);

   irrecv.enableIRIn();

}



void loop() {

   if (irrecv.decode(&results)) {

      Serial.print("0x");

      Serial.println(results.value, HEX);

      delay(250);

      irrecv.resume();

      }

}

 

image.thumb.png.82a8c08a7e13801604f17f8de9e1bc95.pngimage.thumb.png.81ee8e1464243bfdd51ced5082bc76a7.png

 

W ponizszym folderze sa zapisane dwa programy - efekt jest taki ze robot przed miesiacem normalnie dzialal teraz nagle nie reaguje na wcisniecia przycisku. Kupilem nowe odbiorniki podczerw ieni jak widac w poscie.

 

image.thumb.png.f96afb242772bfa8f89762324946e666.pngimage.thumb.png.bfb9eaf4f19be59f5f297f79d10985ce.png

 

Edytowano 5 godzin temu przez mateusz797

Edytowano przez Gieneq
Link do komentarza
Share on other sites

 

Spróbuj załączonych bibliotek i poniższego kodu. Biblioteki bezpośrednio do katalogu ze sketchem. Zwracane kody to liczby całkowite z przedziału 0 - 255, więc może będzie CI prościej temat ogarnąć. Biblioteki pochodzą od chińczyka, były dedykowane dla takiego urządzenia RichUNO - dla syna kupiłem bo kabelków mu się nie chciało podłączać. Często te ich biblioteki mi problemy same rozwiązywały - czy to odtwarzacz mp3, czy wyświetlacz, czy to termometr, w załączniku cały ich pakiecik ci mi kiedyś podesłali, może się kiedyś przydadzą.

#include "RichUNOIRremote.h"; 

#define PilotPIN     11

IRrecv PILOT(PilotPIN); 

void setup() 
{
  PILOT.enableIRIn();
  Serial.begin(9600);                                  

}

void loop() 
{
  Pilot(); 
}

void Pilot()
{
  if (PILOT.decode())             
  {                               
    if(PILOT.isReleased())        
    {                             
      {                                                                               
        Serial.print(F("Odczyt z pilota !!! Kod to : ")); 
        Serial.println(PILOT.keycode);
      }                                                                               
                                                                                         
      delay(100);                                                                     
    }                                                                               
    PILOT.resume();                                                                 
  }                                                                                 
} 


nazwy zdefiniowane są tu (RichUNOIRremote.h) jak by ci nie pasowały i nie były takie same to zamienisz

/*IR remote control key code table*/
#define KEY_POWER 0x45
#define KEY_MENU  0x47
#define KEY_TEST  0x44
#define KEY_PLUS  0x40
#define KEY_BACK  0x43
#define KEY_PREV  0x07
#define KEY_PLAY  0x15
#define KEY_NEXT  0x09
#define KEY_ZERO  0x16
#define KEY_MINUS 0x19
#define KEY_C     0x0D
#define KEY_ONE   0x0C
#define KEY_TWO   0x18
#define KEY_THREE 0x5E
#define KEY_FOUR  0x08
#define KEY_FIVE  0x1C
#define KEY_SIX   0x5A
#define KEY_SEVEN 0x42
#define KEY_EIGHT 0x52
#define KEY_NINE  0x4A
/*-----------------------------------*/

A na końcu switch do obsługi pilota i już

void loop()
{
  if (IR.decode()) {//If decode is valid

	if(IR.isReleased())//
	{
	
	  switch(IR.keycode)
	  {
	    case KEY_PLUS:  break;
		case KEY_MINUS: break;
		case KEY_PLAY:  break;
		case KEY_PREV: break;
		case KEY_NEXT: break;
		case KEY_ONE:  break;
		case KEY_TWO:  break;
		default: break;
	  }	 
	  delay(100);   	  
    }
    IR.resume(); // Receive the next value
  }
  
}

RUNOIRremote.zip

Arduino libraries for Rich UNO R3.rar

Edytowano przez PowerTGS440
Link do komentarza
Share on other sites

no i jaki z tego wniosek ? w programie masz ustawione Serial.begin(57600);

a ty masz monitor portu szeregowego 9600 🙂 przestaw w monitorze na 57600 lub w programie Serial.begin(9600);
Ale wklej ten pierwszy program (kod w treści forum) bez tych ifów do SERIAL bo tak widzę o ile ArduinoPRO IDE toleruje
klamry w #if #endif to zwykłe IDE coś się mota. Wklej i sprawdź - już tam nawet przestawiłem na 9600

image.png.102065a869bc7d3ee009313effe369e9.png

Edytowano przez PowerTGS440
Link do komentarza
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

(edytowany)

 

#include "RichUNOIRremote.h" 

#define PilotPIN 13
IRrecv PILOT(PilotPIN); 

void setup() 
{
  PILOT.enableIRIn();
  Serial.begin(9600);                                  

}

void loop() 
{
  Pilot(); 
}

void Pilot()
{
  if (PILOT.decode())             
  {                               
    if(PILOT.isReleased())        
    {                             
      {                                                                               
        Serial.print(F("Odczyt z pilota !!! Kod to : ")); 
        Serial.println(PILOT.keycode);
      }                                                                               
                                                                                         
                                                                          
    }                                                                               
    PILOT.resume();                                                                 
  }                                                                                 
} 

image.thumb.png.6172f411ebba51a39a633e52792ec2c4.pngOk mimo ze usunalem takie cos wyswietla

Edytowano przez mateusz797
Link do komentarza
Share on other sites

a co to w ogóle za odbiornik podczerwieni i pilot ? Spróbuj rózne piloty nawet do TV i zobacz czy odczyty i zwraca. Bo jak oddaje 0 to znaczy w sumie że go widzi ale nie rozpoznaje kodów. 

 

Edytowano przez PowerTGS440
Link do komentarza
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!

Gość
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.