Arduino Uno + Sensor shield, подключаю сканер штрих-кодов по RS232, получаю какую-то ерунду

a59
Offline
Зарегистрирован: 21.12.2015

Использую sensor shield (см. фото), чтобы подключить сканер штрих-кодов по RS232 к Arduino Uno.
Перемычки установлены в "COM", разъем DB9 подключен ногами 2,3,5 к TD, RD, GD, кабель для заливки скетча во время работы отключен. Параметры подключения на устройствах одинаковые - скорость (9600), разрядность данных, четность, стоп-биты. Пробовал и сканер программировать на SERIAL_8N1, и у порта ставить SERIAL_7N2, как у сканера по умолчанию - читается какая-то дичь, никак не похожая на штрих-коды. Есть еще какие-то нюансы, которых я не знаю? Или я что-то делаю не так? Или шилд не в порядке - как можно проверить?

sensor shield

#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);
      }      
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

У ардуины не RS232, а TTL. Ставь преобразователь уровней MAX3232. Питается от 3,3В, никакой обвески не надо.

a59
Offline
Зарегистрирован: 21.12.2015

т.е. на шильде надпись "com" только для красоты?

Radjah
Offline
Зарегистрирован: 06.08.2014

Я на шилде ни одного преобразователя не вижу, например.

a59
Offline
Зарегистрирован: 21.12.2015

пришел из Китая MAX232

подключаю: [Com-порт на компьютере]->[MAX232]->[Arduino] - все прекрасно работает

подключаю: [сканер]->[Com-порт на компьютере] - все прекрасно работает

подключаю: [сканер]->[MAX232]->[Arduino] - вместо штрих-кодов мусор

у сканера принудительно установлены параметры: 9600, 8 bit, no parity, 1 stop bit

что еще может влиять на обмен со сканером? 

a59
Offline
Зарегистрирован: 21.12.2015

нашел ответ, моя MAX232 нормально работает только с питанием 3v, а на 5v в сочетании со сканером глючит

Radjah
Offline
Зарегистрирован: 06.08.2014

На 3 вольтах работает MAX3232, MAX232 работает на 5 вольтах и требует дополнительный обвес.

krepton85
Offline
Зарегистрирован: 02.02.2016

Все решается довольно просто и и без всяких шилдов, нужно всего лишь проинвертировать сигнал TX RS232 от сканера и подключить его к RX Ардуино. Нужен всего лишь логический элемент "НЕ", а собрать его можно на одном транзисторе n-p-n и резистор на базу последовательно, подтягивающий резистор от коллектора к vcc Ардуино можно даже не ставить т.к. на пинах RX и TX Ардуино в состоянии покоя высокий уровень (очевидно в МК используются подтягивающие резисторы). Такой способ очень безопасен для Ардуино, на вход инвертора сигнала можно подавать хоть 12В (подобрать только номинал резистора базы). Сам недавно столкнулся с такой же проблемой и долго не мог понять почему в сериал порт "сыплется" какая та "фигня" но только не штрих-код.