Guten Abend zusammen,
Mein Vorhaben:
Ich habe folgendes vor, ich möchte jeden Barcode Scanner mit einem NodeMCU Lolin V3 bestücken,
(Ins 4 Stück) Dann möchte ich über Telegram einen Text schicken, dieser wird dann verarbeitet und alle parametrierten Scanner sollen einen Barcode Scannen, und diesen dann untereinander vergleichen. das Ergebnis soll mir dann über Telegram geschickt werden.
Mein Equipment:
NodeMCU lolin V3
Waveshare Barcode Scanner
Anleitung vom Scanner
Logiclvl Converter
Mein aktueller Stand:
Ich habe mit dem NodeMCU schon erfolgreich Temperatur und Füllstandswerte abgefragt und über Telegram geschickt bekommen.
Da ich die Lvl converter noch nicht habe, habe ich den Barcode Scanner noch nicht an dem NodeMCU angeschlossen sondern erstmal mit einem Arduino Uno Nachbau herum probiert.
Ich kriege ausgelesen was der Scanner liest (UART). Jedoch nur wenn ich den dafür vorgesehenen Knopf drücke.
Mein aktuelles Problem:
Ich schaffe es nicht dem Scanner über software Serial zu sagen, dass er jetzt scannen soll.
Hier der Code mit dem das auslesen funktioniert, wenn ich den Knopf drücke:
// QR
// Restore Factory Settings
// UART Output
// Continuous Mode
// Non-Scanning Interval
// Lighting - No light
#include <Arduino.h>
#include <wiring_private.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
// data coming from the serial port
String inputString = "";
// the line has arrived
boolean stringComplete = false;
int countstr=0;
// to search for an ending
unsigned long millisendstr=0;
void setup() {
//
Serial.begin(9600);
mySerial.begin(9600); // Begin Serial1
inputString.reserve(50);
}
void loop() {
//
serialScanerEvent();
//
if (stringComplete) {
Serial.println(inputString);
inputString = "";
stringComplete = false;
countstr=0;
}
}
void serialScanerEvent() {
//
if (mySerial.available()>0) {
// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
inputString += inChar;
countstr++;
millisendstr=millis();
}
else {
if(millis()-millisendstr>1000 && countstr>0) {
stringComplete=true;
}
}
}
Meine Versuche zum schicken eines Scan Befehls:
Das hier habe ich dazu gefunden:
4. Command Mode
In command mode, scanner will begin scanning after receive the command from
MCU. (That is set bit0 to 1 on address 0x0000).
Note: The scanning command (UART) is that:7E 00 08 01 00 02 01 AB CD. The
scanner module will response bytes (02 00 00 01 00 33 31) for the command and
begin scanning at the same time.
Mein Versuch war der hier:
Serial.println("Sende einschalten");
byte message[] = {0x7E, 0x00, 0x08, 0x01, 0x00, 0x02, 0x01, 0xAB, 0xCD }; // Sende Einschalten
mySerial.write(message, sizeof(message));
jedoch kriege ich darauf keine Antowort.
Ich habe noch gelesen dass man jeden Abschnitt auch einzeln einfach nur über
mySerial.write(0x7E);
mySerial.write(0x00);
mySerial.write(0x08);
mySerial.write(0x01);
mySerial.write(0x00);
mySerial.write(0x02);
mySerial.write(0x01);
mySerial.write(0xAB);
mySerial.write(0xCD);
schicken kann, da kriege ich aber dann Fehlermeldungen die ich nicht nachvollziehen kann.
C:\Users\Sven\Documents\Arduino\ArduinoBarCodeReaderKnopf\ArduinoBarCodeReaderKnopf.ino: In function 'void loop()':
ArduinoBarCodeReaderKnopf:36:22: error: call of overloaded 'write(int)' is ambiguous
mySerial.write(0x00);
^
In file included from C:\Users\Sven\Documents\Arduino\ArduinoBarCodeReaderKnopf\ArduinoBarCodeReaderKnopf.ino:10:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src/SoftwareSerial.h:102:18: note: candidate: virtual size_t SoftwareSerial::write(uint8_t)
virtual size_t write(uint8_t byte);
^~~~~
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:233,
from C:\Users\Sven\Documents\Arduino\ArduinoBarCodeReaderKnopf\ArduinoBarCodeReaderKnopf.ino:8:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:52:12: note: candidate: size_t Print::write(const char*)
size_t write(const char *str) {
^~~~~
ArduinoBarCodeReaderKnopf:39:22: error: call of overloaded 'write(int)' is ambiguous
mySerial.write(0x00);
^
In file included from C:\Users\Sven\Documents\Arduino\ArduinoBarCodeReaderKnopf\ArduinoBarCodeReaderKnopf.ino:10:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src/SoftwareSerial.h:102:18: note: candidate: virtual size_t SoftwareSerial::write(uint8_t)
virtual size_t write(uint8_t byte);
^~~~~
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:233,
from C:\Users\Sven\Documents\Arduino\ArduinoBarCodeReaderKnopf\ArduinoBarCodeReaderKnopf.ino:8:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:52:12: note: candidate: size_t Print::write(const char*)
size_t write(const char *str) {
^~~~~
exit status 1
call of overloaded 'write(int)' is ambiguous
Hatte mir schon überlegt, mir es einfacher zu machen und an dem Knopf zum starten Scan einfach eine Ader anzulöten und diesen über einen Pin zu schalten.
Hat einer von euch noch eine Idee?