arduino接收串口屏指令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino接收串口屏指令?相关的知识,希望对你有一定的参考价值。

我想请问一个关于arduino的问题。我想做一个简单的展示,就是用串口屏幕做了一个界面。点开键控制arduino上自己的灯亮,点关控制灯灭,在程序里如何实现呢,开键发送的指令的是A5 5A 06 83 00 20 01 00 01 关的是A5 5A 06 83 00 20 01 00 02 请问代码如何实现?

首先根据按键对应的口线进行按键状态扫描,加入按键消抖程序,确认按键后,执行开灯/关灯程序执行。然后执行对应报文的发送即可。 参考技术A 接收串口屏指令的话,猜测一个数据,然后提供给他以后按照口令来进行指出。 参考技术B 接收窗口屏的直流非常简单,这些东西非常完美,特别好 参考技术C Arduino通过TTL转RS232 扩展板(RS232 shield)或TTL转RS485 扩展板(RS485 shield)与WinView触摸屏的串口或485口相连,进行数据通讯。追问

硬件连接我已经完成了 arduino的代码部分不会写 指令a5 5a是针头,06是后面有6个字节,83是指令,0020是键值存放地址,01是键值一位,0001是键值,我问过他们官方,他们说arduino他们不懂 用户手册里也不教你代码怎么写

参考技术D arduino发送数据,上位机接受数据就行了啊,注意串口和速率一致就行了。 第5个回答  2020-11-23 接收的串口屏指令没有这方面的信息,你必须要咨询上架才可以了解

arduino串口接收的问题

我用auduino的串口向人机界面发送了16进制数据串,例如: 发送【 01 3E 00 88 A3】 人机界面马上会返回一串16进制数 【01 3E 04 23 32 2E 87 EF A4】 ,所以发送完数据后需要马上开始接收,怎么写程序能不漏掉数据,怎么样能够及时准确的接收数据,接收到以后需要把它存在数组中再判断或提取数据
/*********************************** 下面是串口发送16进制串的函数 *******************************************/
void UART_SendPacked(unsigned char Command,unsigned char *p,unsigned char num)

unsigned char Index=0;
unsigned char check=0;
while(UART_TX_Status==1);//等待串口空闲
UART_TX_Status = 1;//,串口忙标志置1,开始新一轮传输
Serial.flush();//Clear serial_buf

UART_TX_Buffer[Index++] = 0x55; //UART_TX_Buffer[0]=Command;命令1字节
UART_TX_Buffer[Index++] = num+1; //UART_TX_Buffer[1]=num+1; 长度1字节
UART_TX_Buffer[Index++] = Command; //校验=命令+数据(num+1字节)和取低8位
check = Command;
while(num--) //计算校验值(在Command基础上继续累加num个数据)得到校验原值

UART_TX_Buffer[Index++] = *p;
check += *p++;

UART_TX_Buffer[Index++] = check;// 校验原值的低8位【1个字节】作为校验值
UART_TX_Buffer[Index++] = 0xaa;//结束标志:0xAA

UART_TX_Number = Index;//所有数据已写入数组中,得到数组长度

Serial.write(UART_TX_Buffer,UART_TX_Number);
UART_TX_Status=0;

/* 例如,执行下面函数会发送16进制串,屏幕收到后会进入休眠,并返回一串16进制数给arduino */
void LCDSetWaitMode(void)//一级休眠

Send_Buffer[0] = 0xa5;
UART_SendPacked(0x8c,Send_Buffer,1);

/*然后就是怎么接收返回的16进制串的问题,我是这样写的,但是不放心,觉得不靠谱,还请大家帮忙*/
// 分数不够了,大家谅解一下,感谢!
void rev(int num_rev)


Serial.flush(); //清空串口缓存区
while(Serial.read() >= 0); //这句好像也是可以清空串口缓存区,好像用上面那句的话有时候会有旧数 据,不能全部替换为新数据,前几天遇到过这个问题,很奇怪。

if(Serial.available())

Receive_Buffer[cc++]=Serial.read();

if(cc>num_rev)

Serial.write(Receive_Buffer,cc);
cc=0;

参考技术A 我建议用串行中断子程序,基本不会错.
void serialEvent()
//statements
int inByte = Serial.read();
Serial.write(inByte);


这个函数错误很小追问

serial.event() 是中断方式接收数据吗? 就是我不用在主程序中写接收函数了,只要判断自定义的那个数组中的数据就行?

我是16进制数,那串口的中断是怎么触发的,是来一个字节的起始位,触发一次中断,接收一个完字节后,存入缓冲区,avalible()++,然后才进入void event()函数吗?我是这样理解的不知道是不是对

追答

来数据就执行中断程序,你中断里读数据,读完后清除缓存,这就基本不会错。很问题屡试不爽!

本回答被提问者采纳

以上是关于arduino接收串口屏指令?的主要内容,如果未能解决你的问题,请参考以下文章

arduino 串口不工作

我想用arduino leonardo的串口即0脚和1脚连接XBEE传输数据,并由电脑接收,请问应该怎么实现。

arduino 如何通过串口将变量传给电脑??

arduino串口接收的问题

arduino接收16进制数据?

arduino接收不了16进制数据?