Ви не увійшли.
Дійшов до такого варіанту. Тілька одна проблема залишилась вертає тільку першу цифру штрих коду.
#include <hid.h>
#include <hiduniversal.h>
#include <usbhub.h>
#include <Usb.h>
#include <hidboot.h>
#include <avr/pgmspace.h>
#include <Wire.h> //I2C
#include <LiquidCrystal_I2C.h> //LCD
#include <Ultrasonic.h> //Sonar
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 5);//RX, TX
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 or 0x3F for a 16 chars and 2 line display
Ultrasonic axisX(8,9); // (Trig PIN,Echo PIN)
Ultrasonic axisY(10,11); // (Trig PIN,Echo PIN)
Ultrasonic axisZ(12,13); // (Trig PIN,Echo PIN)
String SSID ="";
String PASS="";
#define DST_IP "" //DIST_IP
const byte BarcodeLength;
class BarcodeReader : public KeyboardReportParser
{
USB Usb;
USBHub Hub;
HIDUniversal Hid;
HIDBoot<HID_PROTOCOL_KEYBOARD> Keyboard;
uint8_t buffer[15];
byte length;
bool valid;
void addCharacter(uint8_t c);
public:
BarcodeReader();
void begin();
void task();
const uint8_t* barcode();
void reset();
protected:
virtual void OnKeyDown(uint8_t mod, uint8_t key);
};
BarcodeReader::BarcodeReader()
: Usb()
, Hub(&Usb)
, Hid(&Usb)
, Keyboard(&Usb)
, length(0)
, valid(false)
{
}
void BarcodeReader::begin()
{
if (Usb.Init() == -1) {
Serial.println("OSC did not start.");
}
Hid.SetReportParser(1, this);
}
void BarcodeReader::task()
{
Usb.Task();
}
void BarcodeReader::addCharacter(uint8_t c)
{
if (valid) {
// already have a barcode, new one will overwrite it
reset();
}
buffer[length++] = c;
//buffer[length] = '\0';
if (buffer[length] == '\0')
{
valid = true;
}
};
// return value no longer valid after another call to task()
const uint8_t* BarcodeReader::barcode()
{
return (valid) ? buffer : 0;
}
void BarcodeReader::reset()
{
length = 0;
valid = false;
}
void BarcodeReader::OnKeyDown(uint8_t mod, uint8_t key) {
uint8_t c = OemToAscii(mod, key);
if (c) addCharacter(c);
}
BarcodeReader barcodeReader;
void setup() {
Serial.begin(9600);
mySerial.begin(115200);
lcd.begin();
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello");
delay(5000);
Serial.println("Init");
mySerial.println("AT+RST");
delay(1000);
if(mySerial.find("OK"))
{Serial.println("WiFi - Module is ready");}
else
{Serial.println("Module dosn't respond.");
while(1);
}
delay(1000);
// соединение по wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{connected = true;
mySerial.println("Connected to Wi-Fi...");
break;
}
}
if (!connected)
{
mySerial.println("Coudn't connect to Wi-Fi.");
while(1);
}
delay(5000);
mySerial.println("AT+CIPMUX=0");
barcodeReader.begin();
}
void loop() {
barcodeReader.task();
const char* barcode = barcodeReader.barcode();
if (barcode) {
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",8283";
Serial.println(cmd);
mySerial.println(cmd);
if(mySerial.find("Error"))
return;
double width = 100-axisX.Ranging(CM);
Serial.println(width);
delay(50);
double lenght = 100-axisY.Ranging(CM);
Serial.println(lenght);
delay(50);
double height = 100-axisZ.Ranging(CM);
Serial.println(height);
delay(50);
delay(10000);
long format = (width*lenght*height)/1000000;
Serial.println(format);
lcd.clear();
lcd.setCursor (2,0);
lcd.print(width);
lcd.print("x");
lcd.print(lenght);
lcd.print("x");
lcd.print(height);
lcd.print("cm");
lcd.setCursor (4,1);
lcd.print ("V=" );
lcd.print(format);
lcd.print ("M.kyb");
cmd = "#A0:F3:C1:70:AA:94\n#2881C4BA0200003B1#"+String(format)+"\n##"+barcode;
delay(3000);
mySerial.print("AT+CIPSEND=");
mySerial.println(cmd.length());
Serial.println(">");
mySerial.print(cmd);
Serial.println(cmd);
mySerial.println("AT+CIPCLOSE");
barcodeReader.reset();
}
}
boolean connectWiFi()
{
String cmd="AT+CWJAP=\"" +SSID+"\",\"" + PASS + "\"";
mySerial.println(cmd);
Serial.println(cmd);
delay(2000);
if(mySerial.find("OK"))
{
Serial.println("OK, Connected to Wi-Fi.");
return true;
}
else
{
Serial.println("Can not connect to the Wi-Fi.");
return false;
}
}
Це перший скетч він опитує ультразвукові датчики та виводить на на екран інформацію з них та відправляє ці дані по WIFI
#include <Wire.h> //I2C
#include <LiquidCrystal_I2C.h> //LCD
#include <Ultrasonic.h> //Sonar
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 5);//RX, TX
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 or 0x3F for a 16 chars and 2 line display
Ultrasonic axisX(8,9); // (Trig PIN,Echo PIN)
Ultrasonic axisY(10,11); // (Trig PIN,Echo PIN)
Ultrasonic axisZ(12,13); // (Trig PIN,Echo PIN)
String SSID ="";
String PASS="";
#define DST_IP "" //DIST_IP
void setup()
{
Serial.begin(9600); // debug
mySerial.begin(115200);
lcd.begin();
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello");
delay(5000);
Serial.println("Init");
mySerial.println("AT+RST"); // Reser and check
delay(1000);
if(mySerial.find("OK"))
{Serial.println("WiFi - Module is ready");}
else
{Serial.println("Module dosn't respond.");
while(1);
}
delay(1000);
// соединение по wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{connected = true;
mySerial.println("Connected to Wi-Fi...");
break;
}
}
if (!connected)
{
mySerial.println("Coudn't connect to Wi-Fi.");
while(1);
}
delay(5000);
mySerial.println("AT+CIPMUX=0"); // Single conection
}
void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",8283";
Serial.println(cmd);
mySerial.println(cmd);
if(mySerial.find("Error"))
return;
double width = 100-axisX.Ranging(CM);
Serial.println(width);
delay(50);
double lenght = 100-axisY.Ranging(CM);
Serial.println(lenght);
delay(50);
double height = 100-axisZ.Ranging(CM);
Serial.println(height);
delay(50);
delay(10000);
long format = (width*lenght*height)/1000000;
Serial.println(format);
lcd.clear();
lcd.setCursor (2,0);
lcd.print(width);
lcd.print("x");
lcd.print(lenght);
lcd.print("x");
lcd.print(height);
lcd.print("cm");
lcd.setCursor (4,1);
lcd.print ("V=" );
lcd.print(format);
lcd.print ("M.kyb");
cmd = "#A0:F3:C1:70:AA:94\n#2881C4BA0200003B1#"+String(format)+"\n##";
delay(3000);
mySerial.print("AT+CIPSEND=");
mySerial.println(cmd.length());
Serial.println(">");
mySerial.print(cmd);
Serial.println(cmd);
mySerial.println("AT+CIPCLOSE");
}
// WI-FI conection procedure
boolean connectWiFi()
{
String cmd="AT+CWJAP=\"" +SSID+"\",\"" + PASS + "\"";
mySerial.println(cmd);
Serial.println(cmd);
delay(2000);
if(mySerial.find("OK"))
{
Serial.println("OK, Connected to Wi-Fi.");
return true;
}
else
{
Serial.println("Can not connect to the Wi-Fi.");
return false;
}
}
це другий він сканує штрих код товару та передає його в Serial
#include <hid.h> //Add to Oleg Mazurov code to Bar Code Scanner
#include <hiduniversal.h> //Add to Oleg Mazurov code to Bar Code Scanner
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <hidboot.h>
USB Usb;
HIDUniversal Hid(&Usb); //Add this line so that the barcode scanner will be recognized, I use "Hid" below
HIDBoot<HID_PROTOCOL_KEYBOARD> Keyboard(&Usb);
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key); // Add this line to print character in ASCII
protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
/* what to do when symbol arrives */
void KbdRptParser::OnKeyPressed(uint8_t key)
{
if(key!=19) Serial.println((char)key);
else Serial.println((char)0x0D);
};
KbdRptParser Prs;
void setup()
{
Serial.begin(9600);
if(Usb.Init()==-1) Serial.println("OSC did not start.");
else Serial.println("Barcode Ready");
Hid.SetReportParser(0,(HIDReportParser*)&Prs); //Change "Keyboard" for "Hid"
}
void loop()
{
Usb.Task();
}
Ніяк не можу зробити так щоб дані з датчиків відправлялись по WIFI після зчитування штрих коду, штрих код теж треба відправляти
выкладывайте сюда свои скетчи, может коллективный разум вам все сделает бесплатно...
только свое ТЗ более понятно (конкретнее) изложите.
Доброго вечора маю два робочі скетчі. Окремо для сканера штрих кодів та для відправки даних з ультразвуковаих датчиків по wifi. Є хтось хто може їх обєднати в один, та зробити так щоб коли натиснута кнопка на сканері відправлялись:
- Штрих код
- Дані з датчиків
Хто може допомогти. За грошову подяку звісно.