//https://blog.csdn.net/luyang14/article/details/115796909 #include // 定义串口对象Serial2 HardwareSerial Serial2(1); #define PIN_RX 1 #define PIN_TX 0 #define PIN_BUTTON 2 String qrData = ""; int qrType=0; String qrOpen = "c:..."; String qrEnd = "c:end"; // 串口2接收中断服务程序 void serialEvent() { while (Serial2.available() > 0) { if(qrType==0)qrData = ""; qrType = 1; char incomingByte = Serial2.read(); qrData += (char)incomingByte; } if(qrType==1){ Serial.println("qrData: " + qrData); String str = "c:" + qrData; pCharacteristic->setValue(str.c_str()); digitalWrite(PIN_BUTTON,HIGH); //这里扫码成功后需要你自己拉高电频 不然扫码成功后返回数据你再次拉低失败的 qrType = 0; } } void qrCommand(){ String command = pCharacteristic->getValue().c_str(); if (command.startsWith("2:0")) { pCharacteristic->setValue(qrOpen.c_str()); digitalWrite(PIN_BUTTON,LOW); } else if (command.startsWith("2:1")) { pCharacteristic->setValue(qrEnd.c_str()); digitalWrite(PIN_BUTTON,HIGH); } } void qrSetup(){ Serial2.begin(9600, SERIAL_8N1,PIN_RX,PIN_TX); // 设置串口的波特率、1数据位、奇偶校验位和停止位 pinMode(PIN_BUTTON,OUTPUT);//设置引脚为输出 digitalWrite(PIN_BUTTON,HIGH);//高电平关 // digitalWrite(PIN_BUTTON,LOW);//低电平开 } int loopQrSize=1000; //loop间隔 int qrMillisTime; void qrLoop(){ //1秒读取一次指令 int qrTimeCurrent = millis(); if(qrTimeCurrent<=0)qrMillisTime = qrTimeCurrent; if((qrTimeCurrent - qrMillisTime)>loopQrSize){ qrMillisTime = qrTimeCurrent; qrCommand(); serialEvent(); } }