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В (подобрать только номинал резистора базы). Сам недавно столкнулся с такой же проблемой и долго не мог понять почему в сериал порт "сыплется" какая та "фигня" но только не штрих-код.