arduino 串口通信,以及命令分析。-Arduino中文社区 - Powered by Discuz! Archiver

z01228 发表于 2020-6-11 23:57

arduino 串口通信,以及命令分析。

本帖最后由 z01228 于 2020-6-11 23:56 编辑

      我也是刚刚接触单片机编程。arduino 系列 esp系列开发板,这几个小东西很有意思。先后也做了 网络遥控电动窗帘 ,投影仪幕布联动器,网络红外遥控器。这个几个东西,很有意思 也方便了生活。小发明就应该这样。
      最近做一个新东西在编程中,其中也遇到了一些情况。程序中用到了 U8g2和AccelStepper库。我使用的是nano这个开发板,在极力修改程序压小体时。没想到u8g2在下命令给OLED12864显示时会影响步进电机的运行情况,这个是不允许的。于是想到了用两个开发板,一个用于显示以及编码器一个用于控制步进电机 并且使用串口传递命令以及数据实现同步运行(变向2线程:lol)。
    下面就是我的试验情况,用软件模拟出一个串口与硬件串口进行通信。其中附带了命令、参数的分析,在实际应用是连接两个开发板的Rx-Tx,Tx-Rx就可以了波特率要设置清楚;目前就只能分析两个命令还是数字型的和一个参数 并且分给不同的变量,但是像Abc这样的字母就不能分析了 有没有大师看看是什么问题。
   效果图:


   程序:
/*Nano的通讯实验(2)软件串口通信与硬件串口通信
* 实际使用时可以连接两个开发板进行命令参数的传递
注:连线要接对。TX-RX RX-TX
程序里关于软串口的定义是这样的:
SoftwareSerial SerialA(RX,TX);
*/

#include<SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
String Serial_String="";
char cmd1;      //指令字符
char cmd2;      //指令字符
long data;      //指令参数(可以是正常正负)
long data1=-1224;

void setup() {
Serial.begin(9600);
mySerial.begin(9600);


}
void loop() {
    mySerial.print(14); //电机指令是两位数 且为1-9不可以出现0,如果10,01,00 这种情况。后期数据分析分别分给cmd1,cmd2用于
    mySerial.print(data1);
    delay(5000);
if (Serial.available()>0) {   // 检查串口缓存是否有数据等待传输
    delay(100);
if (Serial.available()>0) {
    cmd1 = Serial.read();      // 获取上位机电机标志位
    Serial.print(F("cmd1 = "));
    Serial.print(cmd1);   
    Serial.print(F(" , "));
    delay(10);
   
    cmd2 = Serial.read();      // 获取上位机电机标志位
    Serial.print(F("cmd1 = "));
    Serial.print(cmd2);   
    Serial.print(F(" , "));
    delay(10);
   
    data = Serial.parseInt();   // 获取上位机电机指令中参数信息
    Serial.print(F("data = "));
    Serial.print(data);   
    Serial.print(F(""));
    Serial.println(F(""));
   delay(10);
   }
   while(Serial.read()>= 0){}
   
}
}




页: [1]
查看完整版本: arduino 串口通信,以及命令分析。