Chcę połączyć mój skaner kodów kreskowych z Arduino za pomocą RS232. Połączyłem 2 (RX), 3 (TX) i 5 (GND) RS232 z odpowiednimi pinami MAX232. Biorę wyjścia TTL na pinach 6 i 7 Arduino.
To jest kod programu Arduino:
#include <SoftwareSerial.h> SoftwareSerial mySerial(6, 7); // RX, TX void setup() { Serial.begin(9600); } void loop() { // run over and over if (mySerial.available()) { byte x = mySerial.read(); Serial.println(x); } }
Nie jestem uzyskiwanie jakichkolwiek danych wyjściowych na monitorze szeregowym podczas skanowania produktu.
Komentarze
- Edytuj swoje pytanie i dołącz schemat.
- Czy każdy z was znalazł odpowiedź?
- @Ahnet: Tak, w tamtym czasie mieliśmy też inne problemy, jak wspomniano w komentarzu, więc nie ' t wtedy postaw czek. Dzięki za przypomnienie.
Odpowiedź
Zakładając, że Twoje Arduino ma tylko jedno sprzętowe połączenie szeregowe (to coś w rodzaju Uno zamiast Mega) masz rację używając oprogramowania szeregowego, Arduino będzie już używać pinów 2 i 3 do komunikacji przez USB z monitorem szeregowym, więc nie możesz ich używać do komunikacji ze skanerem.
Jakkolwiek uważnie przyjrzyj się pierwszej linii kodu, poprosiłeś program szeregowy o użycie pinów 6 & 7, a mimo to podłączyłeś skaner kodów kreskowych do pinów 2 & 3. Przenieś te szpilki do wskazanego „s”.
Po drugie, w funkcji konfiguracji rozpocząłeś komunikację ze sprzętem Serial, ale nie programowym. „Będę musiał dodać coś takiego jak mySerial.begin (XXX), gdzie XXX jest szybkością transmisji dla skanera.
W końcu nie powiedziałeś Arduino, jakiego pinMode używać dla 6 i 7. Będziesz„ ll chcę też pinMode (6, INPUT) i pinMode (7, OUTPUT).
C omments
- Po dodaniu mySerial.begin (XXXX) kod działał poprawnie. Za każdym razem, gdy lekko poruszam pinami RS232, na ekranie pojawiają się cyfry. Ale nie podczas skanowania.
- Czy na pewno ' dostałeś je we właściwy sposób?
Odpowiedź
RS 232 działa na innych poziomach napięcia niż Arduino, wierzę, że wartości, które otrzymujesz na ekranie, nie będą miały żadnego znaczenia, jeśli wyjście skanera to TTL wtedy tak, to by zadziałało, ale z mojego własnego doświadczenia wynika, że logika jest odwrócona i trzeba dodać 1 do numeru seryjnego oprogramowania:
SoftwareSerial mySerial (6, 7, 1); // RX, TX
Pierwszym krokiem jest sprawdzenie, jaki poziom napięcia jest podawany na wyjściu skanera.
Odpowiedź
Też próbowałem, z jakiegoś powodu NIE DZIAŁA na pinach 6 i 7, ale działa idealnie, używając zamiast tego pinów 10 i 11. Oczywiście nadal musisz dodać mySerial.begin()
.