Skip to main content

Čitanje barkodova preko SoftwareSerial

Što ovaj primjer prikazuje​

Kontroler čita svaki kod koji skener pošalje i ispisuje ga u Serial Monitor. Ovdje je skener spojen na dva obična digitalna pina kojima upravlja SoftwareSerial.

Primjer koristi pin 4 kao RX kontrolera (spojite ga na TX skenera) i pin 5 kao njegov TX (spojite ga na RX skenera); promijenite ta dva broja prema svom ožičenju. Pločica radi s logikom od 3,3 V, zato koristite kontroler od 3,3 V. Prvo prebacite skener na UART skeniranjem konfiguracijskog barkoda POR232.

Ovaj primjer koristi i SoftwareSerial, koji nije dio Soldered DE2120 biblioteke. Komentar u primjeru navodi da ga možete pronaći u Arduino Library Manageru.

Kôd primjera​

Select Board
SoftwareScan.ino
/**
**************************************************
*
* @file SoftwareScan.ino
* @brief Scan and output barcodes using the DE2120 1D/2D barcode
* scanner module over SoftwareSerial.
*
* The scanner must first be put into TTL/RS232 mode by
* scanning the POR232 barcode from the DYScan settings
* manual. The library will automatically negotiate the
* baud rate down from 115200 to 9600 bps on first connect.
* Change the SoftwareSerial pin arguments to match
* your wiring before uploading.
*
* Make sure you have SoftwareSerial library installed. It
* can be found in Arduino library manager.
*
* @authors Fran Fodor @ soldered.com
***************************************************/

#include "SoftwareSerial.h"
SoftwareSerial softSerial(4, 5); // change according to your wiring

#include "DE2120-SOLDERED.h"
DE2120_Soldered scanner;

#define BUFFER_LEN 40
char scanBuffer[BUFFER_LEN];

void setup()
{
Serial.begin(115200);
Serial.println("DE2120 Scanner Example");

if (scanner.begin(softSerial) == false)
{
Serial.println("Scanner did not respond. Please check wiring. Did you scan the POR232 barcode? Freezing...");
while (1)
;
}
Serial.println("Scanner online!");
}

void loop()
{
if (scanner.readBarcode(scanBuffer, BUFFER_LEN))
{
Serial.print("Code found: ");
for (int i = 0; i < strlen(scanBuffer); i++)
Serial.print(scanBuffer[i]);
Serial.println();
}

delay(200);
}

Očekivani rezultat:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
DE2120 Scanner Example
Scanner online!

Zatim pritisnite tipku okidača na pločici i usmjerite je prema kodu. Svaki kod koji skener pročita ispisuje se u zasebnom retku kao Code found: , a zatim sadržaj koda. Kada skener ne odgovori, skica ispisuje Scanner did not respond. Please check wiring. Did you scan the POR232 barcode? Freezing... i zaustavlja se.

Korištene funkcije​

SoftwareSerial(rxPin, txPin, inverse_logic)returns None

Konstruktor iz biblioteke SoftwareSerial. Stvara serijski port na dva digitalna pina, izveden softverski. Istodobno može primati samo jedan SoftwareSerial port.

ReturnsKonstruktor; nema povratne vrijednosti.

Parametri

TipNazivOpis
broj pinarxPinPin koji prima, spojen na TX skenera. Primjer koristi 4.
broj pinatxPinPin koji šalje, spojen na RX skenera. Primjer koristi 5.
boolinverse_logicInvertira smisao signala. Neobavezno, prema zadanim postavkama false; primjer ga izostavlja.
DE2120_Soldered()returns None

Stvara objekt skenera. Još ne sadrži pinove ni port: begin() ga povezuje sa serijskim portom.

ReturnsKonstruktor; nema povratne vrijednosti.

scanner.begin(SoftwareSerial &serialPort)returns bool

Povezuje objekt skenera sa SoftwareSerial portom i provjerava odgovara li skener. Pokreće port na 9600 baud i traži verziju firmvera. Bez odgovora ponovno pokušava na 115200 baud, nalaže skeneru da prijeđe na 9600 baud i ponovno pita. Pri uspjehu prazni prijemni međuspremnik kako bi se prvo skeniranje pročitalo čisto. Ne trebate sami pozivati softSerial.begin().

Returnstrue kada je skener odgovorio, false kada nije.

Parametri

TipNazivOpis
SoftwareSerial &serialPortPort na koji je skener spojen, ovdje softSerial.
scanner.readBarcode(char *resultBuffer, uint8_t size)returns bool

Čita bajtove koje skener čeka poslati u resultBuffer. Skeniranje završava znakom za povrat na početak retka (carriage return); kada on stigne, funkcija vraća true, a međuspremnik sadrži kod, carriage return i završnu nulu. Međuspremnik koji već sadrži završeno skeniranje briše se prije sljedećeg. Pozivajte je opetovano iz loop().

Returnstrue kada je u međuspremniku potpuno skeniranje, false kada potpuno skeniranje još nije stiglo.

Parametri

TipNazivOpis
char *resultBufferMeđuspremnik u koji se prikuplja kod. Primjer koristi 40 bajtova.
uint8_tsizeVeličina međuspremnika. Čita se najviše toliko bajtova, pa se dulji kod skraćuje.

Sve zajedno​

scanner.begin() sam pokreće SoftwareSerial port, pronalazi skener i postavlja ga na 9600 baud. Od tada loop() svakih 200 ms provjerava readBarcode(). Kada vrati true, skica ispisuje međuspremnik znak po znak nakon Code found: .

Skener se pokreće u ručnom načinu rada, pa čita dok je tipka okidača pritisnuta ili dok je TRIG držan na niskoj razini. Ako vaša pločica ima slobodan hardverski UART, primjer s hardverskim UART-om radi isti posao na njemu.