Skocz do zawartości

Sterowanie ir alphabot nie działa


michal2904

Pomocna odpowiedź

Witam mam następujący problem- Posiadam robota alphabot https://botland.com.pl/waveshare-roboty-edukacyjne/8077-alphabot-2-kolowa-platforma-robota-z-czujnikami-i-napedem-dc-waveshare-12249-5903351240291.html takiego jak w linku gdy wgrywam kod do sterowania ir kod nie działa czytałem że trzeba po przełączać jakieś zworki ale które nie wiem wstawiam również kod bo może to jest jego wina dodam że kod jest dołączony w instrukcji od robota z góry dziękuję za odpowiedź 🙂 

#include "AlphaBot.h"

#define KEY2 0x18                 //Key:2 
#define KEY8 0x52                 //Key:8 
#define KEY4 0x08                 //Key:4 
#define KEY6 0x5A                 //Key:6 
#define KEY1 0x0C                 //Key:1 
#define KEY3 0x5E                 //Key:3 
#define KEY5 0x1C                 //Key:5
#define SpeedDown 0x07            //Key:VOL-
#define SpeedUp 0x15              //Key:VOL+
#define ResetSpeed 0x09           //Key:EQ
#define Repeat 0xFF               //press and hold the key

#define IR  4                     //he infrare remote receiver pin 
unsigned long n = 0;
AlphaBot ArduinoCar = AlphaBot();

unsigned char t[30];
unsigned char results;
char IR_decode(unsigned char code);
void translateIR();

void setup()
{
  Serial.begin(115200);
  pinMode(IR, INPUT);
  ArduinoCar.SetSpeed(150);
}

void loop()
{
  if (IR_decode(&results))
  {
    translateIR();
  }

    if (millis() - n > 200)
  {
    ArduinoCar.Brake();
  }
}

/*-----( Declare User-written Functions )-----*/
void translateIR() // takes action based on IR code received
// describing KEYES Remote IR codes
{
  n = millis(); ;
  switch (results)
  {
    case KEY1:
      ArduinoCar.LeftCircle();
      break;

    case KEY2:
      ArduinoCar.Forward();
      break;

    case KEY3:
      ArduinoCar.RightCircle();
      break;

    case KEY4:
      ArduinoCar.Left();
      break;

    case KEY5:
      ArduinoCar.Brake();
      break;

    case KEY6:
      ArduinoCar.Right();
      break;

    case KEY8:
      ArduinoCar.Backward();
      break;

    case Repeat:
      break;

    default:
      ArduinoCar.Brake();
  }// End Case
} //END translateIR

char IR_decode(unsigned char * code)
{
  char flag = 0;
  unsigned int count = 0;
  unsigned char i, index, cnt = 0, data[4] = {0, 0, 0, 0};
  if (digitalRead(IR) == LOW)
  {
    count = 0;
    while (digitalRead(IR) == LOW && count++ < 200)  //9ms
      delayMicroseconds(60);
    t[0] = count;
    count = 0;
    while (digitalRead(IR) == HIGH && count++ < 80)   //4.5ms
      delayMicroseconds(60);
    t[1] = count;
    for (i = 0; i < 32; i++)
    {
      count = 0;
      while (digitalRead(IR) == LOW && count++ < 15) //0.56ms
        delayMicroseconds(60);
      count = 0;
      while (digitalRead(IR) == HIGH && count++ < 40) //0: 0.56ms; 1: 1.69ms
        delayMicroseconds(60);
      if (count > 20)data[index] |= (1 << cnt);
      if (cnt == 7)
      {
        cnt = 0;
        index++;
      }
      else cnt++;
    }
    if (data[0] + data[1] == 0xFF && data[2] + data[3] == 0xFF) //check
    {
      code[0] = data[2];
      Serial.println(code[0], HEX);
      flag = 1;
    }
    if (data[0] == 0xFF && data[1] == 0xFF && data[2] == 0xFF && data[3] == 0xFF)
    {
      code[0] = 0xFF;
      Serial.println("rep");
      flag = 1;
    }
  }
  return flag;
}

 

Link do komentarza
Share on other sites

A odkryłeś stronę WIKI tej platformy? Znajdziesz tam manual, schematy i przykłady. Na stronie 33-34 manuala masz opisane sterowanie IR i jak te zworki musisz ustawić.

https://www.waveshare.com/w/upload/c/c7/AlphaBot-User-Manual.pdf

WIKI:

https://www.waveshare.com/wiki/AlphaBot

  • Lubię! 2
Link do komentarza
Share on other sites

Nie znam Leonardo ale masz dokumentację tej platformy. Myślę, że Leonardo nie jest w pełni kompatybilne z UNO więc czy Twój moduł jest w 100% kompatybilny z platformą AlphaBot? Ja bym poszedł małymi kroczkami i uruchomiłbym najpierw np. obsługę odbiornika IR, później obsługę silnika, a na koniec wszystko z sobą połączył. Piszesz, że nie wiesz jakie zworki jak ustawić. Platforma ta posiada wyprowadzone wejścia/wyjścia swoich układów elektronicznych na złącza, które za pomocą zworek umożliwiają ich dołączenie do odpowiedniego pinu RPi lub Arduino. W mojej platformie w ostatnim polu opisanym na platformie jako G (IR Receiver) znajduję 3 "bolce" gdzie środkowy to "IR Receiver" czyli wyjście odbiornika IR. Za pomocą zworki możesz podłączyć to wyjście albo do pinu D4 Arduino, albo do pinu P18 RPi.

D4__IR__P18

Skup się więc na "uruchomieniu" odbiornika. Możesz analizować czy cokolwiek odbiera wyświetlając w monitorze portu szeregowego odbierane dane.
Opanujesz sterowanie IR weź się za uruchomienie silników.
Tak na marginesie - jeśli pierwszy raz użyłeś tego pilota to czy usunąłeś folię z baterii?

Edytowano przez Belferek
  • Lubię! 2
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

@Belferek Mam również uno silniki działają na obu platformach uruchomiłem wtedy run test z dołączonego pliku i wszystko ładni działało próbowałem przełączać oraz patrzyłem na monitor portu i nic się nie działo tylko co jakiś czas wyświetlało się mniej więcej coś takiego (sony1)1 (sony2)1 (rec1)1 (rec2)1

 

Link do komentarza
Share on other sites

A pilot działa? Poniżej znajdziesz programy przykładowe dołączone do tej platformy. Jest tam folder IRemote (na marginesie to standardowa biblioteka Arduino) z całkiem dużą liczbą programów, które możesz wykorzystać do testowania. Próbowałeś użyć innego pilota. Z ciekawości sam zaraz uruchomię tę platformę i zobaczę jak reaguje na piloty.

 

 

 

AlphaBot_Demo.zip

Link do komentarza
Share on other sites

@Belferek Działa działa sprawdzałem wcześniej ale silniki dalej nie działają 😞 w tamtym kodzie co wcześniej wstawiłem trzeba było zmienić adres wysyłany przez pilota ponieważ tam były np. 0xff i i zmieniłem na to co odbiera program co podesłał kolega @Belferek i dalej nie działa 

#include "AlphaBot.h"

#define KEY2 0xFF18E7                 //Key:2 
#define KEY8 0xFF4AB5                 //Key:8 
#define KEY4 0xFF10EF                 //Key:4 
#define KEY6 0xFF5AA5                //Key:6 
#define KEY1 0xFF30CF         //Key:1 
#define KEY3 0xFF7A85                 //Key:3 
#define KEY5 0xFF38C7                 //Key:5
#define SpeedDown 0xFFE01F            //Key:VOL-
#define SpeedUp 0xFFA857              //Key:VOL+
#define ResetSpeed 0xFF906F           //Key:EQ
#define Repeat 0xFF               //press and hold the key

#define IR  4                     //he infrare remote receiver pin 
unsigned long n = 0;
AlphaBot ArduinoCar = AlphaBot();

unsigned char t[30];
unsigned char results;
char IR_decode(unsigned char code);
void translateIR();

void setup()
{
  Serial.begin(115200);
  pinMode(IR, INPUT);
  ArduinoCar.SetSpeed(150);
}

void loop()
{
  if (IR_decode(&results))
  {
    translateIR();
  }

    if (millis() - n > 200)
  {
    ArduinoCar.Brake();
  }
}

/*-----( Declare User-written Functions )-----*/
void translateIR() // takes action based on IR code received
// describing KEYES Remote IR codes
{
  n = millis(); ;
  switch (results)
  {
    case KEY1:
      ArduinoCar.LeftCircle();
      break;

    case KEY2:
      ArduinoCar.Forward();
      break;

    case KEY3:
      ArduinoCar.RightCircle();
      break;

    case KEY4:
      ArduinoCar.Left();
      break;

    case KEY5:
      ArduinoCar.Brake();
      break;

    case KEY6:
      ArduinoCar.Right();
      break;

    case KEY8:
      ArduinoCar.Backward();
      break;

    case Repeat:
      break;

    default:
      ArduinoCar.Brake();
  }// End Case
} //END translateIR

char IR_decode(unsigned char * code)
{
  char flag = 0;
  unsigned int count = 0;
  unsigned char i, index, cnt = 0, data[4] = {0, 0, 0, 0};
  if (digitalRead(IR) == LOW)
  {
    count = 0;
    while (digitalRead(IR) == LOW && count++ < 200)  //9ms
      delayMicroseconds(60);
    t[0] = count;
    count = 0;
    while (digitalRead(IR) == HIGH && count++ < 80)   //4.5ms
      delayMicroseconds(60);
    t[1] = count;
    for (i = 0; i < 32; i++)
    {
      count = 0;
      while (digitalRead(IR) == LOW && count++ < 15) //0.56ms
        delayMicroseconds(60);
      count = 0;
      while (digitalRead(IR) == HIGH && count++ < 40) //0: 0.56ms; 1: 1.69ms
        delayMicroseconds(60);
      if (count > 20)data[index] |= (1 << cnt);
      if (cnt == 7)
      {
        cnt = 0;
        index++;
      }
      else cnt++;
    }
    if (data[0] + data[1] == 0xFF && data[2] + data[3] == 0xFF) //check
    {
      code[0] = data[2];
      Serial.println(code[0], HEX);
      flag = 1;
    }
    if (data[0] == 0xFF && data[1] == 0xFF && data[2] == 0xFF && data[3] == 0xFF)
    {
      code[0] = 0xFF;
      Serial.println("rep");
      flag = 1;
    }
  }
  return flag;
}

 

Link do komentarza
Share on other sites

Coś cicho. U mnie działa np. coś takiego:

// ----------------------------- PILOT IR ---------------------------------
#include <IRremote.h>
int IRpin = 4;
IRrecv IR(IRpin);
//klawisze na moim pilocie
#define KEY_2 0xE718FF00
#define KEY_5 0xE31CFF00
#define KEY_8 0xAD52FF00

void setup()
{
  Serial.begin(115200);
  IR.enableIRIn();
}

void loop()
{
  if(IR.decode())
   {
    //Serial.println(IR.decodedIRData.decodedRawData,HEX);
    switch(IR.decodedIRData.decodedRawData)
    {
      case KEY_2:
      Serial.println("NAPRZOD");    //tutaj np. skok do procedury ruchu pojazdu
      break;
      case KEY_5:
      Serial.println("STOP");
      break;
      case KEY_8:
      Serial.println("WSTECZ");
      break;
      default:
      break;
    }
    delay(500);
    IR.resume();
   }
}

Korzystam z biblioteki IRemote w wersji 3.5.2

Edytowano przez Belferek
  • Lubię! 2
Link do komentarza
Share on other sites

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...

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.