Arduino Uno + Sensor shield, подключаю сканер штрих-кодов по RS232, получаю какую-то ерунду
- Войдите на сайт для отправки комментариев
Пнд, 21/12/2015 - 21:05
Использую sensor shield (см. фото), чтобы подключить сканер штрих-кодов по RS232 к Arduino Uno.
Перемычки установлены в "COM", разъем DB9 подключен ногами 2,3,5 к TD, RD, GD, кабель для заливки скетча во время работы отключен. Параметры подключения на устройствах одинаковые - скорость (9600), разрядность данных, четность, стоп-биты. Пробовал и сканер программировать на SERIAL_8N1, и у порта ставить SERIAL_7N2, как у сканера по умолчанию - читается какая-то дичь, никак не похожая на штрих-коды. Есть еще какие-то нюансы, которых я не знаю? Или я что-то делаю не так? Или шилд не в порядке - как можно проверить?
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void msg1(String text) { lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print(text); msg2(String("")); } void msg2(String text) { lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(text); } void setup () { lcd.begin(16, 2); Serial.begin(9600,SERIAL_8N1); msg1("Ready"); } void loop() { char incomingByte = 0; int bufferSize = 0; String barcode; bufferSize=Serial.available(); if (bufferSize>0) { barcode=String(""); for (byte i = 0; i < bufferSize; ++i) { incomingByte=Serial.read(); barcode += String(incomingByte, DEC); if (i < (bufferSize-1)) barcode+=String(" "); } msg2(barcode); } }
У ардуины не RS232, а TTL. Ставь преобразователь уровней MAX3232. Питается от 3,3В, никакой обвески не надо.
т.е. на шильде надпись "com" только для красоты?
Я на шилде ни одного преобразователя не вижу, например.
пришел из Китая MAX232
подключаю: [Com-порт на компьютере]->[MAX232]->[Arduino] - все прекрасно работает
подключаю: [сканер]->[Com-порт на компьютере] - все прекрасно работает
у сканера принудительно установлены параметры: 9600, 8 bit, no parity, 1 stop bit
что еще может влиять на обмен со сканером?
нашел ответ, моя MAX232 нормально работает только с питанием 3v, а на 5v в сочетании со сканером глючит
На 3 вольтах работает MAX3232, MAX232 работает на 5 вольтах и требует дополнительный обвес.
Все решается довольно просто и и без всяких шилдов, нужно всего лишь проинвертировать сигнал TX RS232 от сканера и подключить его к RX Ардуино. Нужен всего лишь логический элемент "НЕ", а собрать его можно на одном транзисторе n-p-n и резистор на базу последовательно, подтягивающий резистор от коллектора к vcc Ардуино можно даже не ставить т.к. на пинах RX и TX Ардуино в состоянии покоя высокий уровень (очевидно в МК используются подтягивающие резисторы). Такой способ очень безопасен для Ардуино, на вход инвертора сигнала можно подавать хоть 12В (подобрать только номинал резистора базы). Сам недавно столкнулся с такой же проблемой и долго не мог понять почему в сериал порт "сыплется" какая та "фигня" но только не штрих-код.