学习目录:树莓派学习之路-GPIO Zero

官网地址:https://gpiozero.readthedocs.io/en/stable/source_values.html

环境:UbuntuMeta-16.04

树莓派:3代B型

GPIO Zero提供了一种使用声明性编程范例将设备连接在一起的方法:将一个设备的值提供给另一个设备,例如将按钮的值输入到LED中:

  1. from gpiozero import LED, Button
  2. from signal import pause
  3.  
  4. led = LED()
  5. button = Button()
  6.  
  7. led.source = button.values
  8.  
  9. pause()

这相当于:

  1. from gpiozero import LED, Button
  2. from time import sleep
  3.  
  4. led = LED()
  5. button = Button()
  6.  
  7. while True:
  8. led.value = button.value
  9. sleep(0.01)

每个设备都有一个value属性(设备的当前值)。 输入(Input)设备只能读取其值,但输出(Output)设备也可以设置其值以更改设备的状态:

  1. >>> led = PWMLED()
  2. >>> led.value # LED is initially off
  3. 0.0
  4. >>> led.on() # LED is now on
  5. >>> led.value
  6. 1.0
  7. >>> led.value = # LED is now off

每个设备同样都有一个值属性(一个生成器连续产生设备的当前值)。 所有输出设备都有一个source属性,可以设置为任何迭代器。 设备将迭代所提供的值,以source_delay属性中指定的速率将设备的值设置为每个元素。

最常见的用法是将输出设备的源设置为输入设备的值,如上例所示。 一个更有趣的例子是控制LED亮度的电位器:

  1. from gpiozero import PWMLED, MCP3008
  2. from signal import pause
  3.  
  4. led = PWMLED()
  5. pot = MCP3008()
  6.  
  7. led.source = pot.values
  8.  
  9. pause()

也可以将输出设备的源设置为另一个输出设备的值,以使它们匹配:

  1. from gpiozero import LED, Button
  2. from signal import pause
  3.  
  4. red = LED()
  5. green = LED()
  6. button = Button()
  7.  
  8. red.source = button.values
  9. green.source = red.values
  10.  
  11. pause()

设备的值也可以在传递到源之前进行处理: 

例如:

  1. from gpiozero import Button, LED
  2. from signal import pause
  3.  
  4. def opposite(values):
  5. for value in values:
  6. yield not value
  7.  
  8. led = LED()
  9. btn = Button()
  10.  
  11. led.source = opposite(btn.values)
  12.  
  13. pause()

或者,可以使用自定义生成器来提供来自人工源的值:

例如:

  1. from gpiozero import LED
  2. from random import randint
  3. from signal import pause
  4.  
  5. def rand():
  6. while True:
  7. yield randint(, )
  8.  
  9. led = LED()
  10. led.source = rand()
  11.  
  12. pause()

如果迭代器一直迭代(即无限生成器),则元素将被处理,直到源被更改或设置为None。

如果迭代器是有限次的(例如列表),则一旦处理完所有元素(将设备的值保留在最终元素),就终止:

  1. from gpiozero import LED
  2. from signal import pause
  3.  
  4. led = LED()
  5. led.source = [, , , , , , , , , ]
  6.  
  7. pause()

 7.1. Composite devices(复合设备)

大多数设备的值范围介于0和1之间。某些设备的范围介于-1和1之间(例如Motor)。 复合设备的值是这些值的命名元组。 例如,Robot类:

  1. >>> from gpiozero import Robot
  2. >>> robot = Robot(left=(, ), right=(, ))
  3. >>> robot.value
  4. RobotValue(left_motor=0.0, right_motor=0.0)
  5. >>> tuple(robot.value)
  6. (0.0, 0.0)
  7. >>> robot.forward()
  8. >>> tuple(robot.value)
  9. (1.0, 1.0)
  10. >>> robot.backward()
  11. >>> tuple(robot.value)
  12. (-1.0, -1.0)
  13. >>> robot.value = (, ) # robot is now driven forwards

 7.2. Source Tools(源工具)

GPIO Zero提供了一组用于处理源/值的现成函数,称为源工具。 这些是从gpiozero.tools导入的。

其中一些源工具是人工源,无需输入:

在此示例中,0到1之间的随机值传递给LED,使其产生闪烁的烛光效果:

  1. from gpiozero import PWMLED
  2. from gpiozero.tools import random_values
  3. from signal import pause
  4.  
  5. led = PWMLED()
  6. led.source = random_values()
  7. led.source_delay = 0.1
  8.  
  9. pause()

有些工具采用单一来源处理其值:

在此示例中,仅在未按下按钮时LED才会亮起:

  1. from gpiozero import Button, LED
  2. from gpiozero.tools import negated
  3. from signal import pause
  4.  
  5. led = LED(1)
  6. btn = Button(2)
  7.  
  8. led.source = negated(btn.values)
  9.  
  10. pause()

有些工具结合了多个来源的价值:

在此示例中,只有按下两个按钮(如AND门),LED才会亮起:

  1. from gpiozero import Button, LED
  2. from gpiozero.tools import all_values
  3. from signal import pause
  4.  
  5. button_a = Button()
  6. button_b = Button()
  7. led = LED()
  8.  
  9. led.source = all_values(button_a.values, button_b.values)
  10.  
  11. pause()

7、源与值(Source/Values)的更多相关文章

  1. 单源最短距离 Single Source Shortest Path

    单源最短距离_示例程序_图模型_用户指南_MaxCompute-阿里云 https://help.aliyun.com/document_detail/27907.html 单源最短距离 更新时间:2 ...

  2. 查看java源码显示source not found

    除了下载的jar包之外,还要下载src源码的zip包. 进项目的Java Build Path里找到你想看源码的jar包 Source Attachment Configuration--Extern ...

  3. 取出关联数组的key值和values值

    取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...

  4. Eclipse无法查看源码 提示source not found

    学习项目代码的时候想要看一下Cookie的源码,已经确定下载到了本地,可是Ctrl+左键点进去,提示source not found(如下图),百度了以后,大家普遍认为需要安装反编译插件jad. 看了 ...

  5. Swift 可选值(Optional Values)介绍

    Optional的定义 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil.此 ...

  6. [解决]ASP.NET MVC 4/5 源码调试(source code debug)

    ========================ASP.NET MVC 4============================ ASP.NET MVC 4 source code download ...

  7. mariadb多源复制 muiltil source replication

    环境:centos-6.5      Mariadb:10.1.13-MariaDB 多源复制:企业数据库中写的需求较大,以至于I/O负载比较大,那么就必须把写的操作分摊到多台主服务器上进行,然后在将 ...

  8. Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 关于MyEclipse查看底层源码出现source not found的问题(MyEclipse、Eclipse配置JAD)

    一.MyEclipse 第一步:      下载jad.exe文件:jad下载地址 eclipse插件:net.sf.jadclipse_版本号.jar下载地址一 net.sf.jadclipse_版 ...

随机推荐

  1. 在多租户(容器)数据库中如何创建PDB:方法5 DBCA远程克隆PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:DBCA静默远程克隆PDB.将 CDB1 中的 PDB1 克隆为 CDB2 中的 ERP2 对应路径:Creating a PDB ...

  2. 【转载】各种SQL在PIG中实现

    转自:http://guoyunsky.iteye.com/blog/1317084 我这里以Mysql 5.1.x为例,Pig的版本是0.8 同时我将数据放在了两个文件,存放在/tmp/data_f ...

  3. css之float(浮动)的特性

    详解CSS float属性  float本身不脱离文档流,但是和 position:absolute;搭配使用会脱离文档流 阅读目录 基础知识 float的详细细节 float特殊情况 clear属性 ...

  4. Python基础与科学计算常用方法

    Python基础与科学计算常用方法 本文使用的是Jupyter Notebook,Python3.你可以将代码直接复制到Jupyter Notebook中运行,以便更好的学习. 导入所需要的头文件 i ...

  5. apache http server 和tomcat的区别 以及nginx

    Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器. 要明白他们之间的区别,我们首先需要明白HTTP协议.HTML页面.JSP.Servlet之 ...

  6. egg.js 配置cors跨域

    1.egg简述 Egg.js,为企业级框架和应用而生,是阿里开源的企业级 Node.js 框架. 2.特点 Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开 ...

  7. 前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue

    前端框架vue.js系列(9):Vue.extend.Vue.component与new Vue 本文链接:https://blog.csdn.net/zeping891103/article/det ...

  8. php中文乱码问题的终极解决方案汇总

    乱码是我们在开发可能经常遇见,也是最让人头疼的一个问题了,下面这篇文章主要介绍了在php开发中,可能遇见中文乱码问题的终极解决方案,文中介绍好几个情况下的解决方法,需要的朋友可以参考借鉴,下面来一起看 ...

  9. Flink架构(三)- 事件-时间(Event-Time)处理

    3. 事件-时间(Event-Time)处理 在“时间语义”中,我们强调了在流处理应用中时间语义的重要性,并解释了处理时间与事件时间的不同点.处理时间较好理解,因为它基于本地机器的时间,它产生的是有点 ...

  10. 【资源分享】Garry's mod 自制整合包

    *----------------------------------------------[下载区]----------------------------------------------* ...