搜索
bottom↓
回复: 4

arduino 串口接收 发送 小例子

[复制链接]

出0入0汤圆

发表于 2019-12-27 11:15:28 | 显示全部楼层 |阅读模式
本帖最后由 sunplus 于 2019-12-27 11:32 编辑
  1. #include "Arduino.h"


  2. void setup()
  3. {
  4.         Serial.begin(9600);
  5. }

  6. #define LEN 1024
  7. uint8_t gWriteBuffer[LEN];
  8. uint8_t gReadBuffer[LEN];
  9. volatile static int iWpos = 0;
  10. volatile static int iRpos = 0;

  11. void loop()
  12. {
  13.         while (true)
  14.         {
  15.                 int iLen =0;

  16.                 iLen = Serial.available();
  17.                 //写buffer
  18.                 if(iLen > 0 && iLen <= LEN)
  19.                 {               
  20.                         if (iLen + iWpos < LEN)
  21.                         {
  22.                                 Serial.readBytes(gWriteBuffer+iWpos,iLen);
  23.                                 iWpos += iLen;
  24.                         }
  25.                         else
  26.                         {
  27.                                 Serial.readBytes(gWriteBuffer+iWpos,LEN - iWpos);
  28.                                 Serial.readBytes(gWriteBuffer,iLen -(LEN - iWpos));               
  29.                                 iWpos = iLen -(LEN - iWpos);                       
  30.                         }
  31.                 }
  32.                 else if(iLen > LEN)
  33.                 {
  34.                         Serial.flush();                       
  35.                 }

  36.                 int iReadTempPos = 0;
  37.                 iReadTempPos = iWpos;
  38.                 int iRlen = 0;
  39.                 //读buffer
  40.                 if (iReadTempPos != iRpos)
  41.                 {
  42.                         memset(gReadBuffer,0,sizeof(gReadBuffer));
  43.                         if (iReadTempPos > iRpos)
  44.                         {
  45.                                 memcpy(gReadBuffer,gWriteBuffer+iRpos,iReadTempPos - iRpos);
  46.                                 iRlen = iReadTempPos - iRpos;                                               
  47.                         }
  48.                         else
  49.                         {
  50.                                 memcpy(gReadBuffer ,gWriteBuffer+iRpos,LEN - iRpos);
  51.                                 memcpy(gReadBuffer+(LEN - iRpos) ,gWriteBuffer,iReadTempPos);
  52.                                 iRlen = (LEN - iRpos) + iReadTempPos;                                                       
  53.                         }
  54.                         iRpos = iReadTempPos;
  55.                 }

  56.                 Serial.printf("serial iWpos %d ,iRpos %d ,iRlen %d \r\n",iWpos,iRpos,iRlen);               
  57.                 Serial.write(gReadBuffer,iRlen);

  58.         }
  59. }
复制代码

出0入0汤圆

发表于 2019-12-27 11:17:00 | 显示全部楼层
感谢分享。

出200入2554汤圆

发表于 2019-12-27 16:57:47 | 显示全部楼层
Serial 类已经集成了 FIFO 机制,自己再做一套..... 多用用 parseInt 吧

出0入0汤圆

 楼主| 发表于 2019-12-27 17:06:56 | 显示全部楼层
t3486784401 发表于 2019-12-27 16:57
Serial 类已经集成了 FIFO 机制,自己再做一套..... 多用用 parseInt 吧

谢啦,你说的对。再做接收,确实多此一举了。

出200入2554汤圆

发表于 2019-12-27 17:46:01 | 显示全部楼层
sunplus 发表于 2019-12-27 17:06
谢啦,你说的对。再做接收,确实多此一举了。

以前串口接收都自己写超时的,结果发现 Serial 直接有 setTimeout,简单拆包一把搞定。

不过复杂的工业项目就算了,宁可自己搭一遍底层。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 11:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表