如何用Gnuplot绘制Arduino采集的433MHz高低时序数据波形图
绘制433MHz收发器高低电平波形的实现方法
要把你从433MHz收发器读取的高低电平时序数据转换成波形图,核心是先把时长数据转换成时间-电平坐标对,再用常规绘图工具生成阶梯状波形,具体步骤如下:
1. 数据预处理:将时长转换为时间序列点
原始数据是「总读数个数 + 高/低电平时长交替排列」,我们需要把这些时长数据转换成可绘图的坐标点:
- 初始化时间起点为0,初始电平设为高电平(因为第一个数据是高电平时长)
- 遍历每一段时长:
- 记录当前时间点和对应电平值(比如高电平用1,低电平用0)
- 计算下一个时间点:当前时间 + 当前时长
- 记录下一个时间点和相同的电平值(这段时长内电平保持不变)
- 切换电平状态,处理下一段时长
- 举个简单例子:如果数据是
[4, 2, 3, 1, 4](总读数4,高2ms、低3ms、高1ms、低4ms),转换后的坐标点就是:(0,1) → (2,1) → (2,0) → (5,0) → (5,1) → (6,1) → (6,0) → (10,0)
2. 工具实现方案
Python + Matplotlib 绘图(推荐,适合数据分析)
用Python的matplotlib可以快速生成清晰的波形图,关键是用drawstyle='steps-post'参数绘制阶梯状电平:
import matplotlib.pyplot as plt # 替换成你的实际数据:总读数个数 + 交替的高低电平时长 raw_data = [250, 2, 3, 1, 4, 2, 2] # 示例:125组高低,总读数250 total_readings = raw_data[0] durations = raw_data[1:] time_points = [0] level_values = [1] # 初始为高电平 current_time = 0 current_level = 1 for idx, duration in enumerate(durations): current_time += duration time_points.append(current_time) level_values.append(current_level) # 最后一个读数不需要切换电平 if idx != total_readings - 1: current_level = 0 if current_level == 1 else 1 time_points.append(current_time) level_values.append(current_level) # 绘制波形 plt.plot(time_points, level_values, drawstyle='steps-post', linewidth=2) plt.xlabel('时间 (ms)') plt.ylabel('电平') plt.yticks([0, 1], ['低电平', '高电平']) plt.title('433MHz收发器电平波形') plt.grid(True, linestyle='--', alpha=0.7) plt.show()
Arduino 串口绘图器实时查看
如果你想直接在Arduino上查看波形,可以通过串口按时间间隔发送当前电平值,用Arduino IDE自带的串口绘图器显示:
// 假设durations数组已存储读取到的所有时长数据,total为总读数个数 unsigned long current_time = 0; int current_level = HIGH; void setup() { Serial.begin(9600); } void loop() { for (int i = 0; i < total; i++) { unsigned long start = millis(); // 每1ms发送一次当前电平 while (millis() - start < durations[i]) { Serial.println(current_level); delay(1); } // 切换电平 current_level = (current_level == HIGH) ? LOW : HIGH; } // 循环结束后停止,或者按需修改 while(1); }
3. 注意事项
- 如果总读数个数是奇数,最后一段时长对应的电平不会切换,绘图时要保留最后一个点的电平状态
- 数据量较大(125组)时,Python的matplotlib可以轻松处理,无需担心性能问题
- 调整绘图细节:比如增加线宽、设置y轴标签为「高/低电平」、添加网格线,让波形更易读
内容的提问来源于stack exchange,提问作者tim.roberts
相关产品推荐
相关产品推荐

