• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
RS422 komunikacja między 2 arduino
#1
Cześć,
poproszę o pomoc/wskazówki co robię nie tak.
Chce komunikować się pomiędzy arduino UNO i nano za pomocą modułu RS422.
Chcę przesyłać krótkie wiadomości typu string.
Napisałem prosty program w którym próbuje przesłać wiadomość do drugiego arduino, jednak drugie nic nie odbiera.
Co 2s miga dioda na RS422 który wysyła, ale po drugiej stronie nic się nie dzieje.
Po kilku godzinach walki i różnych próbach już mi się skończyły pomysły.

Kod na arduino UNO wysyłający wiadomość.
Kod:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
 
String tekst = "";

void setup() {
    mySerial.begin(9600);
}

  void loop(){
    delay(2000);
    mySerial.println("wiadomosc_12");
}


Kod na arduino nano odbierający wiadomość
Kod:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
 
String tekst="";

void setup() {
    mySerial.begin(9600);
}

  void loop(){
    delay(500);
  
    if(mySerial.available()) {
    tekst = mySerial.readString();
    Serial.println(tekst);
    }
}
 
Odpowiedź
#2
Pokaż schemat, sprawdź czy biblioteka działa na poziomie UART bez modułów RS422, może biblioteka woli piny 2 i 3.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Patrzę sobie na Twój kod i na opis biblioteki SoftwareSerial i rzuca mi się w oczy jedynie SoftwareSerial::read(), a nie ::readString(), a dodatkowo używanie String w Arduino to zasadniczo zły pomysł, powinieneś używać char arrays.

Moja propozycja jest taka:
Kod:
void loop(){
    // delay(500); - to bym wyrzucił - przy odbiorze danych żaden delay nie jest potrzebny

    if(mySerial.available() > 0) {
        char ch = mySerial.read();
        Serial.println(ch);
    }
}

Będziesz widział, czy przechodzą pojedyncze znaki, czy nie. Poza tym tak jak pisał kolega kaczakat sprawdź najpierw, czy bezpośrednie połączenie dwóch Arduino po UART da jakiś odzew, pamiętaj przy tym o połączeniu GND dwóch urządzeń, bo w innym wypadku możesz kombinować z kodem i nic nie osiągnąć.

Nawet przykłady z Arduino IDE odnośnie biblioteki SoftwareSerial nie mają czegoś takiego jak readString() - może w tym jest problem.
 
Odpowiedź
#4
Zmieniłem kod wg wskazówek + użyłem piu 0, 1 - ale nadal nie działa.
Co ciekawe jak podłączyłem konwerter RS485 wysyłanie w jedną stronę śmiga bez problemu (w drugą pewnie też ale nie sprawdzałem)
Ten sam kod z 422 nic nie wysyła/odbiera.
Wyjścia konwerterów łącze A-Y, B-Z, Z-B, Y-A - może powinny być inaczej?
 
Odpowiedź
#5
"rs422 arduino schematic" w GOOGLE i widzisz jak ma być podłączone, z jednej strony R120, może być już wbudowany w moduł, sprawdź multimetrem, w karcie katalogowej chipa powinieneś to też mieć pokazane. To jest sygnał różnicowy, jak nie działa to zamień kable A z B, może masz na odwrót.
Nie używaj pinów 0 i 1 UNO bo one są już zajęte do USB, tak tylko zrobiłeś gorzej.
Ewentualnie jak użyjesz płytki Leonardo to na pinach 0 i 1 masz Serial1, albo użyj płytki MEGA i sprzętowy Serial2 lub 3 lub 4.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości