qr.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //https://blog.csdn.net/luyang14/article/details/115796909
  2. #include <HardwareSerial.h>
  3. // 定义串口对象Serial2
  4. HardwareSerial Serial2(1);
  5. #define PIN_RX 1
  6. #define PIN_TX 0
  7. #define PIN_BUTTON 2
  8. String qrData = "";
  9. int qrType=0;
  10. String qrOpen = "c:...";
  11. String qrEnd = "c:end";
  12. // 串口2接收中断服务程序
  13. void serialEvent() {
  14. while (Serial2.available() > 0) {
  15. if(qrType==0)qrData = "";
  16. qrType = 1;
  17. char incomingByte = Serial2.read();
  18. qrData += (char)incomingByte;
  19. }
  20. if(qrType==1){
  21. Serial.println("qrData: " + qrData);
  22. String str = "c:" + qrData;
  23. pCharacteristic->setValue(str.c_str());
  24. digitalWrite(PIN_BUTTON,HIGH); //这里扫码成功后需要你自己拉高电频 不然扫码成功后返回数据你再次拉低失败的
  25. qrType = 0;
  26. }
  27. }
  28. void qrCommand(){
  29. String command = pCharacteristic->getValue().c_str();
  30. if (command.startsWith("2:0")) {
  31. pCharacteristic->setValue(qrOpen.c_str());
  32. digitalWrite(PIN_BUTTON,LOW);
  33. } else if (command.startsWith("2:1")) {
  34. pCharacteristic->setValue(qrEnd.c_str());
  35. digitalWrite(PIN_BUTTON,HIGH);
  36. }
  37. }
  38. void qrSetup(){
  39. Serial2.begin(9600, SERIAL_8N1,PIN_RX,PIN_TX); // 设置串口的波特率、1数据位、奇偶校验位和停止位
  40. pinMode(PIN_BUTTON,OUTPUT);//设置引脚为输出
  41. digitalWrite(PIN_BUTTON,HIGH);//高电平关
  42. // digitalWrite(PIN_BUTTON,LOW);//低电平开
  43. }
  44. int loopQrSize=1000; //loop间隔
  45. int qrMillisTime;
  46. void qrLoop(){
  47. //1秒读取一次指令
  48. int qrTimeCurrent = millis();
  49. if(qrTimeCurrent<=0)qrMillisTime = qrTimeCurrent;
  50. if((qrTimeCurrent - qrMillisTime)>loopQrSize){
  51. qrMillisTime = qrTimeCurrent;
  52. qrCommand();
  53. serialEvent();
  54. }
  55. }