#1 Re: Програмування Arduino » Сканер штрих кодів та wifi » 2018-03-06 11:06:44

Дійшов до такого варіанту. Тілька одна проблема залишилась вертає тільку першу цифру штрих коду. 

#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;
}
}

#2 Re: Програмування Arduino » Сканер штрих кодів та wifi » 2018-03-02 14:03:27

Це перший скетч він опитує ультразвукові датчики та виводить на на екран інформацію з них та відправляє ці дані по 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 після зчитування штрих коду, штрих код теж треба відправляти

#3 Програмування Arduino » Сканер штрих кодів та wifi » 2018-03-01 20:01:22

ZmeyGo
відповідей: 3

Доброго вечора маю два робочі скетчі. Окремо для сканера штрих кодів та для відправки даних з ультразвуковаих датчиків по wifi. Є хтось хто може їх обєднати в один, та зробити так щоб коли натиснута кнопка на сканері відправлялись:
- Штрих код
- Дані з датчиків

Хто може допомогти. За грошову подяку звісно.

Підвал форуму