板子提供了丰富的接口,这一篇我们以ADC为例实现一个简单的示波器的Demo,体验开发板快速的接口开发能力。
使用P22的ADC输入,外接滑动变阻器分压实现不同电压输入。注意+和-一定要接滑动变阻器的两端,ADC引脚接分压点。避免+和-引脚短路。
参考实现ADC的采集
https://wiki.unihiker.com/pinpong_python_lib#target_16
# -*- coding: UTF-8 -*-
#实验效果:打印行空板P22口模拟值
#接线:行空板P22口接一个旋钮模块
import time
from pinpong.board import Board,Pin
Board().begin() #初始化
# ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22
#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入 模拟输入方法1
adc22 = Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2
while True:
#v = adc22.read() #读取A0口模拟信号数值 0-4095 模拟输入方法1
v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2
print("P22=", v)
time. Sleep(0.5)
参考https://wiki.unihiker.com/unihiker_python_lib_3
实现直线的显示。
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
gui.draw_line(x0=10, y0=60, x1= 80, y1=60, width=5, color=(122,222,44), onclick=lambda: print("line clicked"))
import time
while True:
#增加等待,防止程序退出和卡住
time.sleep(1)
根据以上实现的ADC值采集,和直线的显示,将ADC值显示为曲线,就实现了简单的示波器。
X作为时间轴横坐标,采集一个点往后移动一个时间单位(采样间隔),以后面的ADC值和前面的ADC值画直线,移动到屏幕X轴最后之后绕到屏幕左边显示。
即持续画直线(x,ADC(i)),(x+1,ADC(i+1))
# -*- coding: UTF-8 -*-
#实验效果:打印行空板P22口模拟值
#接线:行空板P22口接一个旋钮模块
import time
from pinpong.board import Board,Pin
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
Board().begin() #初始化
# ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22
#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入 模拟输入方法1
adc22=Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2
LCDY=320
LCDX=240
X=0 #时间轴,新增一个点往后移1像素
ADC0=0
ADC1=1
while True:
#v = adc22.read() #读取A0口模拟信号数值 0-4095 模拟输入方法1
v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2
ADC1 = v*LCDY/4096 #新的数据
print("P22=", v)
gui.draw_line(x0=X, y0=ADC0, x1=X+1, y1=ADC1, width=5, color=(122,222,44), onclick=lambda:print("line clicked"))
ADC0=ADC1
X=X+1
if X>LCDX:
#清除屏幕
gui.clear()
X=0
time.sleep(0.1)
借助开发板丰富的接口,和完善的python库,我们很快就实现示波器的Demo。该Demo具备一定的实用性,再完善下界面显示,比如调整时间分辨率,幅值分辨率等,加上模拟前端就可以实现更实用的便携示波器。
这也体现了该开发板,作为学习板,作为二次开发快速原型开发都适用的能力。