环境:uno板pin10、pin11与电子秤DB9的23腿连接,另外接一款1602IIC液晶,IDE1.8.19电子秤数据格式:第四种,(对应3)连续串行输出纯数字加回车加换行 如X.XX
硬件连接是这样:
硬件连接
我的连接
厂家配的连接线
试验过程,
1、电子秤不称重,电子秤读数是0.00g,串口读到的是251,251,251,163,159,159,229,235,0,循环6次之后,就只读到251并且一直只能读到这个数;
2、再进行称量,电子秤读数187.65g,串口读到的就是235,143,145,163,147,147,229,235,0,循环6次之后,就只读到235并且一直只能读到这个数;
电子秤读数
串口调试监测
请问:
1、前面六组数据有规律证明出口有数据进来,而且电子秤一直在不停的重复发送数据,但是串口的数和电子秤显示的数据不相符,请问是什么原因呢?接RS232口需要电平转换吗?厂家说直接连235腿就可以了。
2、读了六次之后有规律的数据就读不到了,是因为uno板串口缓冲区溢出吗?如果溢出了,那每次读串口的时候要清零缓冲区吗?怎么清零缓冲区?
程序代码:
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
SoftwareSerial mySerial(10, 11); // 10=RX, 11=TX,和外设232的RX和TX的腿对接,也就是RX和RX接,TX和TX接
int incomingByte;int i=0;
int zero;
int incom[10];
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
mySerial.begin(9600);
lcd.begin(16,2);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
//mySerial.println("Hello, world?");
}
void loop() { // run over and over
lcd.clear();
lcd.home();
lcd.setCursor(5,0);
lcd.print("Start");
Serial.println("start");
delay(1000);
lcd.clear();
lcd.home();
mySerial.listen();
Serial.println("My");
lcd.print("My");
incomingByte=mySerial.read(); //读电子秤串口数据
lcd.print(incomingByte);
Serial.println(incomingByte);
delay(1000);
incomingByte=mySerial.read();
lcd.setCursor(0,1);
while (mySerial.available() ) { //检测串口是否有数据
lcd.print("Y");
delay(1000);
incomingByte=mySerial.read(); //读电子秤串口数据
Serial.println(incomingByte);//调试串口显示电子秤串口读到的数据
lcd.print(incomingByte);
delay(1000);
if(incomingByte==93){ //是否回车
i=0;
lcd.setCursor(0,0);
Serial.println("93N");
Serial.println(incomingByte);
lcd.print("S");
lcd.print(incomingByte,DEC);//液晶显示93正确
incomingByte=mySerial.read();
if(incomingByte==13){ //是否换行
incom=incomingByte;
Serial.println("13N"); //电脑串口监测调试用
lcd.print("H");//开始显示电子秤串口数据)
lcd.print(incom,DEC);
incomingByte=mySerial.read();
}
delay(10000);
lcd.clear();
}
}
}
困扰好几天了,网上搜不到解决办法,请大家帮忙看看哪里出问题了,感谢!
|