Č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
/**
**************************************************
*
* @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:
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 NoneKonstruktor 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
| Tip | Naziv | Opis |
|---|---|---|
| broj pina | rxPin | Pin koji prima, spojen na TX skenera. Primjer koristi 4. |
| broj pina | txPin | Pin koji šalje, spojen na RX skenera. Primjer koristi 5. |
bool | inverse_logic | Invertira smisao signala. Neobavezno, prema zadanim postavkama false; primjer ga izostavlja. |
DE2120_Soldered()returns NoneStvara objekt skenera. Još ne sadrži pinove ni port: begin() ga povezuje sa serijskim portom.
ReturnsKonstruktor; nema povratne vrijednosti.
scanner.begin(SoftwareSerial &serialPort)returns boolPovezuje 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
| Tip | Naziv | Opis |
|---|---|---|
SoftwareSerial & | serialPort | Port 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
| Tip | Naziv | Opis |
|---|---|---|
char * | resultBuffer | Međuspremnik u koji se prikuplja kod. Primjer koristi 40 bajtova. |
uint8_t | size | Velič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.