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