michal2904 Napisano Luty 8, 2022 Udostępnij Napisano Luty 8, 2022 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; } Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 8, 2022 Udostępnij Luty 8, 2022 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 2 Cytuj Link do komentarza Share on other sites More sharing options...
michal2904 Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 (edytowany) @Belferek widziałem lecz gdy je po przełączam to również nie działa wszystko chodzi na leonardo Edytowano Luty 8, 2022 przez michal2904 Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 8, 2022 Udostępnij Luty 8, 2022 (edytowany) 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 Luty 8, 2022 przez Belferek 2 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
michal2904 Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 @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 Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 8, 2022 Udostępnij Luty 8, 2022 Rzuć okiem także do tego artykułu: https://starter-kit.nettigo.pl/2017/03/sterownie-arduino-pomoca-pilota-tv/ 1 Cytuj Link do komentarza Share on other sites More sharing options...
michal2904 Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 @Belferek dalej nie działa 😕 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 8, 2022 Udostępnij Luty 8, 2022 A na jaki pin uzywa Uno?? Moze musi byc to pin z przerwaniem a ty na leonardo uzywasz zwyklego...? Cytuj Link do komentarza Share on other sites More sharing options...
michal2904 Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 @farmaceuta sprawdzałem to co napisał kolega na górze i wszystko idzie na pinie 4 Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 8, 2022 Udostępnij Luty 8, 2022 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 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 8, 2022 Udostępnij Luty 8, 2022 Pilot mozna sprawdzic przez kamere w tel...widac ze dioda mryga na fiolet... Cytuj Link do komentarza Share on other sites More sharing options...
michal2904 Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 @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; } Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 8, 2022 Udostępnij Luty 8, 2022 (edytowany) 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 Luty 8, 2022 przez Belferek 2 Cytuj Link do komentarza Share on other sites More sharing options...
michal2904 Luty 9, 2022 Autor tematu Udostępnij Luty 9, 2022 @Belferek Widzisz może to przez wersję biblioteki bo ja gdzieś czytałem że nie działało na innych wersjach tyko na 1.0 jeszcze raz sprawdzę 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!