IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2021-07-25 -> 正文阅读

[嵌入式]2021-07-25

Miropython制作交通灯

前言

目前,比起C语言控制单片机,python控制单片机的教程以及一些能搜集到以及解决相应问题的回答以及博客很少,至少在我学习Micropython的过程中确实在搜集资料方面很费劲。因此希望自己在学习过程中受其他人的启发以及自己些许的思考写了两个交通灯的程序对看到的筒子们有所帮助,大家一起成长。

一、循环控制交通灯

首先说明一下我用的STM32F4系列的一款单片机,python编程相比C来说简单明了,因为底层已经给我们编好了,大家用就行,但基本的语法知识还是很相似,但不是相同。
比如要说的for+i++的语句我们直接可以用for i in range(n)就可以搞定。这里的循环方式的交通灯我们用for循环加上到达一定临界的判断,我们这里的循环一共进行1000次,利用余数的方式判断我们执行红灯还是绿灯大家应该可以看懂,中间等于9留个机会关闭上一次的灯,然后机上了两个中断,模拟黄灯闪烁,提醒车辆快速通过,以及加上蓝灯模拟加长绿灯时间长度,当然也可以是红灯。另外加上OLED显示倒计时,用总的闪烁9次减去已经闪烁的此说然后转换成字符串显示在OLED上,没错,连上OLED初始化开始等就这么少,是不是突然被Python吸粉了,废话不说上代码。

import time
import pyb
from ssd1306 import SSD1306
from pyb import Switch,Pin,ExtInt,LED,Timer

def my_beeper(ch):#蜂鸣器设置
    ch.pulse_width_percent(50)
    time.sleep(0.2)
    ch.pulse_width_percent(0)
def Yellow():#黄灯闪烁
    for i in range(1,5):
        if i<=4:
            pyb.LED(3).on()
            time.sleep_ms(500) 
            pyb.LED(3).off()
            time.sleep_ms(500)
def Get_X1(line):#红绿灯关闭,黄灯闪烁
    pyb.LED(1).off()
    pyb.LED(2).off()
    Yellow()
    time.sleep_ms(500)
    

def Get_X2(line):#蜂鸣器响,报警灯亮
    pyb.LED(4).toggle()
    my_beeper(chA)
def Green():#绿灯亮8s(9-1),1s(0)
    j=i%10
    z=9-j
    f=str(z)
    h='Next Red'
    display.clear()#清屏
    display.draw_text(30,30,f)
    display.draw_text(60,30,h)        
    display.display()
    pyb.LED(2).on()
def Red():#红灯亮8s(9-1),1s(0)
    j=i%10
    z=9-j
    f=str(z)
    h='Next Green'
    display.clear()#清屏
    display.draw_text(30,30,f)
    display.draw_text(60,30,h)
    display.display()
    pyb.LED(1).on()

display = SSD1306(pinout={'sda': 'PB7','scl': 'PB6'},height=128,external_vcc=False)
display.poweron()#oled显示屏开机
display.init_display()#oled显示屏初始化

beeper=Pin('PA1')
timA=Timer(2,freq=1000)
chA=timA.channel(2,Timer.PWM,pin=beeper)
chA.pulse_width_percent(0)

while True:    
    s1 = ExtInt(Pin(Pin.cpu.B9), ExtInt.IRQ_FALLING, Pin.PULL_UP, Get_X2)#S1开关中断,实现蓝灯报警,蜂鸣器响0.2s
    s2 = ExtInt(Pin(Pin.cpu.B8), ExtInt.IRQ_FALLING, Pin.PULL_UP, Get_X1)#S2开关中断,实现黄灯闪烁4次,间隔0.5s
    for i in range(1,1000):#循环多次

        if i%20<10:
            Green()
            if i%20==9:
                pyb.LED(2).off()
            time.sleep(1)
        elif i%20>=10:
            Red()
            if i%20==19:
                pyb.LED(1).off()
            time.sleep(1)

二、定时器中断方式制作交通灯

利用定时器的方式主要要的重点就是两个,一个是你要设置的频率,一个是你要设置的回调函数,也就是我们的Run函数,这里我也多加了中断,而中断还加了一个蜂鸣器,在按键进入中断后闪烁黄灯,蜂鸣器发声,跳出中断进行下一个阶段的定时器回调,差不多,下附程序。

from pyb import Timer,LED,ExtInt,Pin
import time
def Run(t):
    LED(1).toggle()
    LED(2).toggle()
def Get_X1(line):
    LED(1).off()
    LED(2).off()
    my_beeper(chA)
    LED(3).on()
    time.sleep_ms(2000)
    LED(3).off()
    LED(2).off() 
    LED(1).on()

def my_beeper(ch):    
    ch.pulse_width_percent(50)
    #time.sleep(0.5)
    time.sleep_ms(500) 
    ch.pulse_width_percent(0)
   

LED(1).on()
LED(2).off()
beeper=Pin('PA1')#
beeper

timA = Timer(2, freq=1000)
chA = timA.channel(2, Timer.PWM, pin=beeper)

chA.pulse_width_percent(0)    
while True:
    Tim=Timer(1,freq=0.1,callback=Run)
    ext1 = ExtInt(Pin(Pin.cpu.B9), ExtInt.IRQ_FALLING, Pin.PULL_UP, Get_X1)


希望和大家一起进步,也请各位批评指正。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:14:17  更:2021-07-26 12:14:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:15:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码