Skip to main content

Slanje konfiguracijske naredbe

Što ovaj primjer prikazuje​

Bilo koju postavku skenera moguće je promijeniti iz vaše skice pomoću sendCommand(), čak i onu za koju biblioteka nema posebnu funkciju. Ovaj primjer uključuje i isključuje Code ID. Kada je Code ID uključen, skener ispred svakog poslanog koda stavlja identifikator simbologije (na primjer A za Code 128 i Q za QR Code), pa vaš program može razlikovati vrste barkodova.

Upišite y ili n u Serial Monitor kako biste ga uključili ili isključili. Skica ispisuje skenirane kodove i dok čeka vaš odgovor.

Primjer koristi pin 4 kao RX kontrolera (povežite ga na TX skenera) i pin 5 kao njegov TX (povežite ga na RX skenera); promijenite ta dva broja prema svom povezivanju. Koristite kontroler od 3,3 V i prvo prebacite skener na UART skeniranjem konfiguracijskog barkoda POR232.

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

Kôd primjera​

Select Board
SendCommand.ino
/**
**************************************************
*
* @file SendCommand.ino
* @brief Toggle Code ID prefix transmission on the DE2120
* 1D/2D barcode scanner module over SoftwareSerial.
*
* When Code ID is enabled, the scanner prepends a
* symbology identifier character to every scanned barcode
* (e.g. 'A' for Code 128, 'Q' for QR Code). This can help
* the host application distinguish barcode types at runtime.
*
* The sketch presents a Serial Monitor prompt and also
* continuously polls for barcodes while waiting for input.
* Sending 'y' enables Code ID via the CIDENA command;
* sending 'n' disables it.
*
* The scanner must first be put into TTL/RS232 mode by
* scanning the POR232 barcode from the DYScan settings
* manual. 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()
{
flushRx(); // Clear the serial rx buffer to avoid line endings

Serial.println();
Serial.println("Transmit Code ID with Barcode? (y/n)");
Serial.println("-------------------------------------");
Serial.println("Type 'y' or 'n' or scan a barcode: ");

// Wait for the user to reply but look for barcodes in the meantime
while (Serial.available() == false)
{
if (scanner.readBarcode(scanBuffer, BUFFER_LEN))
{
Serial.println("...");
Serial.print("Code found: ");
for (int i = 0; i < strlen(scanBuffer); i++)
Serial.print(scanBuffer[i]);
Serial.println();
}

delay(200);
}

switch (Serial.read())
{

case 'y':
Serial.println("Code ID will be displayed on scan");
scanner.sendCommand("CIDENA", "1");
break;

case 'n':
Serial.println("Code ID will NOT be displayed on scan");
scanner.sendCommand("CIDENA", "0");
break;

default:
Serial.println("Command not recognized");
break;
}
}

void flushRx(){
while(Serial.available()){
Serial.read();
delay(1);
}
}

Očekivani rezultat:

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

Transmit Code ID with Barcode? (y/n)
-------------------------------------
Type 'y' or 'n' or scan a barcode:

Pošaljete li y, skica ispisuje Code ID will be displayed on scan; pošaljete li n, ispisuje Code ID will NOT be displayed on scan. Svaki drugi znak ispisuje Command not recognized. Zatim se upit ponovno prikazuje. Kôd skeniran dok upit čeka ispisuje se kao ..., a zatim Code found: i sadržaj koda, s identifikatorom ispred koda nakon što se Code ID uključi.

Korištene funkcije​

SoftwareSerial(rxPin, txPin, inverse_logic)returns None

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

ReturnsKonstruktor; nema povratne vrijednosti.

Parametri

TipNazivOpis
broj pinarxPinPin koji prima, povezan na TX skenera. Primjer koristi 4.
broj pinatxPinPin koji šalje, povezan 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. Nakon uspjeha prazni prijemni međuspremnik kako bi se prvo skeniranje pročitalo čisto.

Returnstrue kada je skener odgovorio, false kada nije.

Parametri

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

Čita bajtove koji čekaju od skenera u resultBuffer. Skeniranje završava znakom carriage return; kada on stigne, funkcija vraća true, a međuspremnik sadrži kôd, carriage return i završnu nulu. Međuspremnik koji već sadrži završeno skeniranje briše se prije sljedećeg.

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

Parametri

TipNazivOpis
char *resultBufferMeđuspremnik koji prikuplja kôd. Primjer koristi 40 bajtova.
uint8_tsizeVeličina međuspremnika. Čita se najviše toliko bajtova, pa se dulji kôd skraćuje.
scanner.sendCommand(const char *cmd, const char *arg, uint32_t maxWaitInms)returns bool

Šalje skeneru jednu konfiguracijsku naredbu, uokvirenu na način koji skener očekuje: ^_^, naredba, argument i završna točka (ovdje ^_^CIDENA1.). Zatim čeka odgovor skenera: ACK bajt (0x06) ili NACK bajt (0x15). Naredba i argument zajedno stanu u 9 znakova.

Returnstrue kod ACK; false kod NACK ili kada maxWaitInms istekne bez odgovora.

Parametri

TipNazivOpis
const char *cmdNaredba ili naziv svojstva, na primjer CIDENA (prijenos Code ID-a).
const char *argVrijednost, na primjer 1 za uključivanje ili 0 za isključivanje. Prema zadanim postavkama prazna.
uint32_tmaxWaitInmsKoliko dugo čekati odgovor, u milisekundama. Prema zadanim postavkama 3000.

Sastavljanje cjeline​

loop() prvo briše sve što je ostalo u ulazu Serial Monitora, poput završetka retka nakon vašeg zadnjeg odgovora, a zatim ispisuje upit. Dok tipka ne stigne, svakih 200 ms poziva readBarcode(), pa se skeniranja i dalje prikazuju. y ili n postaje sendCommand("CIDENA", "1") ili sendCommand("CIDENA", "0").

Isti obrazac šalje bilo koju drugu postavku. Biblioteka imenuje one koje poznaje u SparkFun_DE2120_Arduino_Library.h, na primjer BEPSUC (zvučni signal pri uspješnom dekodiranju, prema zadanim postavkama 1) ili IMGREG (područje čitanja).