• (18)管脚口操作


    第一个小实验是让蓝绿两色LED小灯交替闪烁,在查阅电路图后我们发现,两个LED小灯由GPIO20,21控制,这里简单讲一下Python控制树莓派GPIO的方式,首先要引入RPi.GPIO库文件,然后要设置树莓派GPIO的工作模式,参数为BCM和BOARD,BCM代表着引脚的按GPIO编号声明,BOARD代表引脚按板载编号声明。如图2.1。事实上,不同版本的GPIO个数是不一样的,导致不同版本板载编号不同,所以建议同学们以BCM作为工作模式的声明方式。第二步是用.setup()函数声明指定引脚的输入输出。例如,控制LED需要对LED进行“写”操作,所以参数应该是GPIO.OUT。对应的,对于一些传感器,例如触摸传感器,温湿度传感器,我们要对传感器的检测结果进行读,那时参数就应该是GPIO.IN。接下来改变输出引脚的电平即可对LED进行亮灭控制。最后不要忘记通过GPIO.cleanup()释放工作状态,以免影响下次正常使用。/home/pi/yahboom/GPIO/led.py详细代码如下:

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    
    
    import RPi.GPIO as GPIO
    
    import time
    #设置工作模式为bcm
    GPIO.setmode(GPIO.BCM)
    #找到将使用的引脚
    GPIO.setup(20, GPIO.OUT)
    GPIO.setup(21, GPIO.OUT)
    #运行十次
    for i in range(0,10):
        GPIO.output(20,True)
        time.sleep(0.5)
        GPIO.output(20,False)
        GPIO.output(21,True)
        time.sleep(0.5)
        GPIO.output(21,False)
    GPIO.cleanup()
    

      

    测试LED

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    import time
    import RPi.GPIO as GPIO
    
    GPIO.setwarnings(False) 
    GPIO.setmode(GPIO.BCM)
    
    pinA1=6
    pinA2=13
    pinB1=19
    pinB2=26
    
    GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
    GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式
    
     
    a = 10  #闪烁10次
    
    while a > 0:
        
        a -= 1
        
        print ("HIGH")
        GPIO.output(pinA1, GPIO.HIGH)  #亮
        GPIO.output(pinA2, GPIO.HIGH)  #亮
        time.sleep( 0.2 )   #延时 秒
     
        print ("LOW")
        GPIO.output(pinA1, GPIO.LOW)   #暗
        GPIO.output(pinA2, GPIO.LOW)   #暗
        time.sleep( 0.2 )  #延时 秒
     
    

      

    控制电机运动

    实物图

    引脚接口

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    import time
    import RPi.GPIO as GPIO
    
    GPIO.setwarnings(False) 
    GPIO.setmode(GPIO.BCM)
    
    # 树梅派插着USB和网线口那一侧为下面   从下往上数  左列 1-GND   2-5引脚  对应  26 19 13  5
    pinA1=6     # 左电机1
    pinA2=13  # 左电机 2
    pinB1=19  # 右电机 1
    pinB2=26  # 右电机 2
    
    GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
    GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式
    GPIO.setup(pinB1, GPIO.OUT) #设置脚为输出模式
    GPIO.setup(pinB2, GPIO.OUT) #设置脚为输出模式
    
    go_time_intever=0.2  # 运动步长(秒) 通过改时间来改每一步的运动距离 
    def go_ahead():
        print ("go_ahead")
        GPIO.output(pinA1, GPIO.HIGH)  #  A往前转
        GPIO.output(pinA2, GPIO.LOW)  #灭
        GPIO.output(pinB1, GPIO.HIGH)  # B往前转
        GPIO.output(pinB2, GPIO.LOW)  #灭
        time.sleep( go_time_intever )   #延时 秒
        
    def stop():
        print ("stop")
        GPIO.output(pinA1, GPIO.LOW)  #  A停止
        GPIO.output(pinA2, GPIO.LOW)  #灭
        GPIO.output(pinB1, GPIO.LOW)  # B停止
        GPIO.output(pinB2, GPIO.LOW)  #灭
        time.sleep( go_time_intever )   #延时 秒    
         
    def tuen_left():
        print ("tuen_left")
        GPIO.output(pinA1, GPIO.LOW)  # A往后转
        GPIO.output(pinA2, GPIO.HIGH)  #灭
        GPIO.output(pinB1, GPIO.HIGH)  #B往前转
        GPIO.output(pinB2, GPIO.LOW)  #灭
        time.sleep( go_time_intever )   #延时 秒
    
         
    def turn_right():
        print ("turn_right")
        GPIO.output(pinA1, GPIO.HIGH)  #A往前转
        GPIO.output(pinA2, GPIO.LOW)  #灭
        GPIO.output(pinB1, GPIO.LOW)  #B往后转
        GPIO.output(pinB2, GPIO.HIGH)  #灭
        time.sleep( go_time_intever )   #延时 秒
         
         
    a = 10  #闪烁10次
    
    while a > 0:
        
        a -= 1
        go_ahead()
        tuen_left()
        turn_right()
        stop()
    

      

    第二个实验同样是控制小灯,但是这次我们将使用PWM的工作方式控制RGB小灯,下面的程序提供了以脉冲调制解调控制小灯的方法,程序实现了一个呼吸灯使得小灯的颜色进行红绿蓝之间的渐变。程序位于/home/pi/yahboom/GPIO/BST-AI.py程序完整代码如下:

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    import RPi.GPIO as GPIO
    import time
    #led由三个引脚控制,蜂鸣器由16引脚控制
    R,G,B=9,10,11
    buzzer=16
    GPIO.setmode(GPIO.BCM)
    
    GPIO.setup(R, GPIO.OUT)
    GPIO.setup(G, GPIO.OUT)
    GPIO.setup(B, GPIO.OUT)
    GPIO.setup(buzzer, GPIO.OUT)
    #先让蜂鸣器停下来
    
    GPIO.output(buzzer, False)
    time.sleep(2)
    GPIO.output(buzzer,True)
    #设置pwm的工作模式为pwm
    pwmR = GPIO.PWM(R, 70)
    pwmG = GPIO.PWM(G, 70)
    pwmB = GPIO.PWM(B, 70)
    
    pwmR.start(0)
    pwmG.start(0)  
    pwmB.start(0)
    #写四种模式,实际可以由更多变化方式
    try:
    	t = 0.01
    	while True:
                for i in range(0,71):
                    pwmG.ChangeDutyCycle(70)
                    pwmB.ChangeDutyCycle(i)
                    pwmR.ChangeDutyCycle(70-i)
                    print(i)
                    time.sleep(t)
                for i in range(70,-1,-1):
                    pwmG.ChangeDutyCycle(0)
                    pwmB.ChangeDutyCycle(i)
                    pwmR.ChangeDutyCycle(70-i)
                    print(i-1000)
                    time.sleep(t)
    
            
    except KeyboardInterrupt:
    	pass
    pwmR.stop()
    pwmG.stop()
    pwmB.stop()
    GPIO.cleanup()
    		

     

     
     
  • 相关阅读:
    Delphi SQL语句字符串拼接
    DELPHI的MEMO组件
    学习 SQL 语句
    Windows7系统目录迁移:Users,Progr…
    Delphi中Sender对象的知识
    Delphi处理事件函数中的Sender: TObject代表什么?
    (sender as TButton).some 和 TButton(sender).some 的区别是什么?
    什么情况下需要检测预装Win8/8.1电脑内置激活密钥(即Win8/8.1 OEM key)?
    用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
    DELPHI 解决DBGrid SHIFT键多选问题
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/11123138.html
Copyright © 2020-2023  润新知