Witam zaproggramowalem Arduino Uno i aduino mega 2560 które przesyłają między sobą dane wszystko działa super ale gdy oddalę je na 10 M to po włączeniu Arduino zawiesza się z tego co wyczytałem okazało się że to działa tylko na bliskich odległościach czego nie przemyślałem czy mogę użyć takiego expandera aby to działało
https://botland.com.pl/czujniki/18234-ex...93EALw_wcB
Czasami może zadziałać jako przedłużenie, ale co do zasady to są magistrale do kilkudziesięciu cm, jak ekspander to podwoi to i tak daleko do 10m. Używanie na siłę zaprzęgu konnego do latania może nie być dobrym pomysłem. UART z małymi prędkościami powinien działać na te 10m, a jak chcesz mieć pewność działania to są układy RS485.
(25-11-2021, 22:14)kaczakat napisał(a): [ -> ]Czasami może zadziałać jako przedłużenie, ale co do zasady to są magistrale do kilkudziesięciu cm, jak ekspander to podwoi to i tak daleko do 10m. Używanie na siłę zaprzęgu konnego do latania może nie być dobrym pomysłem. UART z małymi prędkościami powinien działać na te 10m, a jak chcesz mieć pewność działania to są układy RS485.
Zgadzam się. 10m jest mocno wątpliwe, jeżeli znasz angielski na stronie Adafruit jest informacja jakie odległości możesz osiągać.
Moje Uno i Mega w odległości 5m od siebie spokojnie, bez problemu radzą sobie na połączeniu UART. Tylko pamiętamy o masach
Wysłane z mojego POCOPHONE F1 przy użyciu Tapatalka
kupiłem taki konwenter
https://abc-rc.pl/product-pol-9572-Konwerter-RS422-TTL-na-MAX490-Modul-do-komunikacji-na-dalekie-odleglosci-1km-Arduino.html
tylko nie wiem czy dobrze go podłączyłem złącza TXD i RXD podłączyłem do pinów w arduino tylko nie wiem jak podłączyć wyjścia ARK bo ja podłączyłem :
A do Y
B do Z
Z do B
Y do A
a kod w arduino jest taki
zmienne które zczytuje i wysyła
Kod:
if (zapis.available()) {
Serial.println(ar);
Serial.println(h);
Serial.println (den_gora);
Serial.println(den_dol);
Serial.println(przekladnia_gora);
Serial.println(przekladnia_dol);
Serial.println(klapa_gora);
Serial.println(klapa_dol);
Serial.println(koncowa_przekladnia);
Serial.println(koncowa_den);
Serial.println(silownik3);
zapis.restart();
}
i drugi które je odbiera
Kod PHP:
if (odczyt.available()) {
if (Serial.available() > 0) {
// slave may send less than requested
ar = Serial.read();
h = Serial.read();
den_gora = Serial.read();
den_dol = Serial.read();
przekladnia_gora = Serial.read();
przekladnia_dol =Serial.read();
klapa_gora =Serial.read();
klapa_dol = Serial.read();
koncowa_przekladnia =Serial.read();
koncowa_den = Serial.read();
}
odczyt.restart();
czy to jest dobrze zrobione bo nie odczytuje mi jak wchodzę w port szeregowy to dane sie nie zgadzają
Komunikacja trwa wolniej niż odczytujesz , wiec wszystko będzie się mieszać. Druga sprawa Serial.read() odczytuje tylko jeden bajt a po tym co wstawiłeś nie widać co wysyłasz. Czy zmienna "ar" z wysyłki to char/byte? czy większa? bo jak większa to całkiem nie tak to ma wyglądać. Większe zmienne wysyłają więcej bajtów a twój program odbiorczy tego nie obejmuje
Albo wysyłaj jakiś znak na początku i dopiero od niego odczytuj, a jeszcze lepiej z potwierdzeniem końca danych.