【求助】自定义串口通讯协议
本帖最后由 maxims 于 2015-7-23 08:10 编辑数据生成:协议头+固定数据+和值校验
void setup()
{
Serial.begin(115200);
randomSeed(analogRead(0));
}
void loop()
{
uint8_t sum = 0x80 + 0x8F + 0xEA + 0x16 + 0x50 + 0x08;
Serial.write(0x80);
Serial.write(0x8F);
Serial.write(0xEA);
Serial.write(0x16);
Serial.write(0x50);
Serial.write(0x08);
for(int i = 0; i < 20; i++)
{
//uint8_t randomShit = random(0,256);
uint8_t randomShit = 5;
sum += randomShit;
Serial.write(randomShit);
}
Serial.write(sum % 256);
delay(5000);
}
接收端解码:
struct engineData {
float RPM;
float MAP;
float TPS;
float ECT;
float IAT;
float O2S;
float SPARK;
float FUELPW1;
float FUELPW2;
float UbAdc;
} data;
const uint8_t preamble[] = {0x80, 0x8F, 0xEA, 0x16, 0x50, 0x08};
uint8_t buf;
uint8_t commPointer = 0;
int checkSum() {
for (int i = 0; i < 26; i++)
{
buf += buf;
}
if (buf == buf)
{
return 1;
}
else
{
return 0;
}
}
void produceData() {
data.RPM = (buf * 256 + buf) / 4;
data.MAP = (buf * 256 + buf) / 256;
data.TPS = (buf * 256 + buf) / 655.36;
data.ECT = (buf * 256 + buf) - 40;
data.IAT = (buf * 256 + buf) - 40;
data.O2S = (buf * 256 + buf) / 204.8;
data.SPARK = (buf * 256 + buf) / 2;
data.FUELPW1 = (buf * 256 + buf) / 1000;
data.FUELPW2 = (buf * 256 + buf) / 1000;
data.UbAdc = (buf * 256 + buf) / 160;
}
void printData() {
Serial.print("New Data\n");
Serial.print(data.RPM);
Serial.print("\n");
Serial.print(data.MAP);
Serial.print("\n");
Serial.print(data.TPS);
Serial.print("\n");
Serial.print(data.ECT);
Serial.print("\n");
Serial.print(data.IAT);
Serial.print("\n");
Serial.print(data.O2S);
Serial.print("\n");
Serial.print(data.SPARK);
Serial.print("\n");
Serial.print(data.FUELPW1);
Serial.print("\n");
Serial.print(data.FUELPW2);
Serial.print("\n");
Serial.print(data.UbAdc);
Serial.print("\n");
}
void setup()
{
Serial.begin(115200);
Serial.println("System Int OK");
}
void loop()
{
if (Serial.available() > 0)
{
uint8_t incomingByte = Serial.read();
if (commPointer < 6 && (preamble == incomingByte))
{
buf = incomingByte;
commPointer++;
}
else if ((commPointer > 5) && (commPointer < 27))
{
buf = incomingByte;
commPointer++;
}
else if (commPointer == 27 && checkSum())
{
buf=00;
produceData();
printData();
commPointer = 0;
}
else
commPointer = 0;
}
}
卡在“int checkSum()”函数里边了。。。
代码是抄来的,自己改了一部分
已经修改为调试通过的代码了 本帖最后由 maxims 于 2015-7-22 22:23 编辑
int checkSum()里边,我输出了sum和buf到串口,都是一样的hex值。但是在下边的if判断里边,死活不能成立
好吧,现在已经知道是int类型和char比较不成立
怎么改呢? uint8_t buf
int sum=0
需要加强制转换符 Vincent2014 发表于 2015-7-22 23:38 static/image/common/back.gif
uint8_t buf
int sum=0
需要加强制转换符
不好意思,昨晚累了,没有来得及更新。
我已经解决问题了。
我修改了一楼的代码 maxims 发表于 2015-7-23 08:09 static/image/common/back.gif
不好意思,昨晚累了,没有来得及更新。
我已经解决问题了。
不要直接修改原來的代碼, 把一個沒問題的程式放在問題之下, 會浪費大家時間.
我就是看了幾遍也看不出大概的問題, 下次不敢再看你的帖了. :P
Super169 发表于 2015-7-23 09:29 static/image/common/back.gif
不要直接修改原來的代碼, 把一個沒問題的程式放在問題之下, 會浪費大家時間.
我就是看了幾遍也看不出 ...
{:3_43:}
哎哟,一楼代码我已经调通了,然后更改为最新通过的代码了。 楼主 这贴的代码校验和那函数里 buf 改成 buf[
我试过这代码了,头一次接收不回 ,得发送第二遍才有返回的打印值。 多加了个数据位 就是 一发一回了!
页:
[1]