1 在Arduino程序中开启串口通信,波特率设置为和串口监视器相同的速率,例如9600。
2 读取串口监视器发送的浮点数数据,可以使用串口parseFloat()函数:
cpp
float val = serialparseFloat(); // 读取浮点数
3 设置LED点亮和熄灭的条件判断语句:
cpp
if (val == 6890) { // 如果接收到的数值为6890
digitalWrite(13, HIGH); // LED点亮
}
else if (val > 7225) { // 如果接收到的数值大于7225
digitalWrite(13, LOW); // LED熄灭
}
4 在循环中不断读取串口数据并判断,点亮或熄灭LED:
cpp
void loop() {
if (serialavailable() > 0) { // 如果串口有输入的数据
float val = serialparseFloat(); // 读取浮点数
if (val == 6890) {
digitalWrite(13, HIGH);
}
else if (val > 7225) {
digitalWrite(13, LOW);
}
}
}
这样就可以实现当串口监视器输入的浮点数达到设置条件时,控制LED的点亮和熄灭。
完整代码如下:
cpp
int led = 13; // LED连接的针脚
void setup() {
pinMode(led, OUTPUT); // 设置LED为输出
Serialbegin(9600); // 启动串口通信,波特率9600
}
void loop() {
if (Serialavailable() > 0) { // 如果串口有输入的数据
float val = SerialparseFloat(); // 读取浮点数
if (val == 6890) { // 如果数值为6890
digitalWrite(led, HIGH); // 点亮LED
}
else if (val > 7225) { // 如果数值大于7225
digitalWrite(led, LOW); // 熄灭LED
}
}
}
希望这个示例程序能帮助你理解并解决问题!关于共用体的知识这里就不重复了,首先需要知道的是共用体可以使不同的数据类型来共享相同的地址空间。
#include <stdioh>
#include <stringh>
int main(void)
{
union result
{
float d;
unsigned char data[4];
}r1,r2;
// 特别需要注意的是在单片机中int float double 类型的字长和PC机中是不一样的,需要注意
r1d=7215487 23131;
r2data[0]=r1data[0];
r2data[1]=r1data[1];
r2data[2]=r1data[2];
r2data[3]=r1data[3];
printf('byte0= %d byte1= %d byte2= %d byte3= %d r1=%f r2=%f \n',r1data[0],r1data[1],r1data[2],r1data[3],r1d,r2d);
getchar();
getchar();
return 0;
}
使用上述的方法,如果需 要在PC与MCU之间通过串口来传送浮点数double/float就可以了,两边都使用共用体,一次传输一个BYTE,然后依次放入char型数组中,使用的时候直接使用对应的浮点数就可以了。
2 内存 *** 作函数/调用库函数
可以直接使用库函数,既然共用体是不同数据类型之间的地址空间共享,那么我们也可以通过使用内存拷贝的方式来完成共用体要完成的功能了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)