7、源与值(Source/Values)
学习目录:树莓派学习之路-GPIO Zero
官网地址:https://gpiozero.readthedocs.io/en/stable/source_values.html
环境:UbuntuMeta-16.04
树莓派:3代B型
GPIO Zero提供了一种使用声明性编程范例将设备连接在一起的方法:将一个设备的值提供给另一个设备,例如将按钮的值输入到LED中:
from gpiozero import LED, Button
from signal import pause led = LED()
button = Button() led.source = button.values pause()
这相当于:
from gpiozero import LED, Button
from time import sleep led = LED()
button = Button() while True:
led.value = button.value
sleep(0.01)
每个设备都有一个value属性(设备的当前值)。 输入(Input)设备只能读取其值,但输出(Output)设备也可以设置其值以更改设备的状态:
>>> led = PWMLED()
>>> led.value # LED is initially off
0.0
>>> led.on() # LED is now on
>>> led.value
1.0
>>> led.value = # LED is now off
每个设备同样都有一个值属性(一个生成器连续产生设备的当前值)。 所有输出设备都有一个source属性,可以设置为任何迭代器。 设备将迭代所提供的值,以source_delay属性中指定的速率将设备的值设置为每个元素。

最常见的用法是将输出设备的源设置为输入设备的值,如上例所示。 一个更有趣的例子是控制LED亮度的电位器:
from gpiozero import PWMLED, MCP3008
from signal import pause led = PWMLED()
pot = MCP3008() led.source = pot.values pause()
也可以将输出设备的源设置为另一个输出设备的值,以使它们匹配:
from gpiozero import LED, Button
from signal import pause red = LED()
green = LED()
button = Button() red.source = button.values
green.source = red.values pause()
设备的值也可以在传递到源之前进行处理: 
例如:
from gpiozero import Button, LED
from signal import pause def opposite(values):
for value in values:
yield not value led = LED()
btn = Button() led.source = opposite(btn.values) pause()
或者,可以使用自定义生成器来提供来自人工源的值:

例如:
from gpiozero import LED
from random import randint
from signal import pause def rand():
while True:
yield randint(, ) led = LED()
led.source = rand() pause()
如果迭代器一直迭代(即无限生成器),则元素将被处理,直到源被更改或设置为None。
如果迭代器是有限次的(例如列表),则一旦处理完所有元素(将设备的值保留在最终元素),就终止:
from gpiozero import LED
from signal import pause led = LED()
led.source = [, , , , , , , , , ] pause()
7.1. Composite devices(复合设备)
大多数设备的值范围介于0和1之间。某些设备的范围介于-1和1之间(例如Motor)。 复合设备的值是这些值的命名元组。 例如,Robot类:
>>> from gpiozero import Robot
>>> robot = Robot(left=(, ), right=(, ))
>>> robot.value
RobotValue(left_motor=0.0, right_motor=0.0)
>>> tuple(robot.value)
(0.0, 0.0)
>>> robot.forward()
>>> tuple(robot.value)
(1.0, 1.0)
>>> robot.backward()
>>> tuple(robot.value)
(-1.0, -1.0)
>>> robot.value = (, ) # robot is now driven forwards
7.2. Source Tools(源工具)
GPIO Zero提供了一组用于处理源/值的现成函数,称为源工具。 这些是从gpiozero.tools导入的。
其中一些源工具是人工源,无需输入:

在此示例中,0到1之间的随机值传递给LED,使其产生闪烁的烛光效果:
from gpiozero import PWMLED
from gpiozero.tools import random_values
from signal import pause led = PWMLED()
led.source = random_values()
led.source_delay = 0.1 pause()
有些工具采用单一来源处理其值:

在此示例中,仅在未按下按钮时LED才会亮起:
from gpiozero import Button, LED
from gpiozero.tools import negated
from signal import pause led = LED(1)
btn = Button(2) led.source = negated(btn.values) pause()
有些工具结合了多个来源的价值:

在此示例中,只有按下两个按钮(如AND门),LED才会亮起:
from gpiozero import Button, LED
from gpiozero.tools import all_values
from signal import pause button_a = Button()
button_b = Button()
led = LED() led.source = all_values(button_a.values, button_b.values) pause()
7、源与值(Source/Values)的更多相关文章
- 单源最短距离 Single Source Shortest Path
单源最短距离_示例程序_图模型_用户指南_MaxCompute-阿里云 https://help.aliyun.com/document_detail/27907.html 单源最短距离 更新时间:2 ...
- 查看java源码显示source not found
除了下载的jar包之外,还要下载src源码的zip包. 进项目的Java Build Path里找到你想看源码的jar包 Source Attachment Configuration--Extern ...
- 取出关联数组的key值和values值
取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...
- Eclipse无法查看源码 提示source not found
学习项目代码的时候想要看一下Cookie的源码,已经确定下载到了本地,可是Ctrl+左键点进去,提示source not found(如下图),百度了以后,大家普遍认为需要安装反编译插件jad. 看了 ...
- Swift 可选值(Optional Values)介绍
Optional的定义 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil.此 ...
- [解决]ASP.NET MVC 4/5 源码调试(source code debug)
========================ASP.NET MVC 4============================ ASP.NET MVC 4 source code download ...
- mariadb多源复制 muiltil source replication
环境:centos-6.5 Mariadb:10.1.13-MariaDB 多源复制:企业数据库中写的需求较大,以至于I/O负载比较大,那么就必须把写的操作分摊到多台主服务器上进行,然后在将 ...
- Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 关于MyEclipse查看底层源码出现source not found的问题(MyEclipse、Eclipse配置JAD)
一.MyEclipse 第一步: 下载jad.exe文件:jad下载地址 eclipse插件:net.sf.jadclipse_版本号.jar下载地址一 net.sf.jadclipse_版 ...
随机推荐
- 呼叫到达率100%,网易云信信令SDK免费上线!
近期,网易云信推出一款稳定可靠.到达率高.扩展性较强的信令通道产品--信令SDK.它能够提供可靠的消息通道,可用于搭建音视频场景下的呼叫邀请机制.信令SDK目前兼容市面上所有主流的音视频SDK,呼叫到 ...
- 网易云信融合CDN方案及实践
日前,网易云信视频云架构师席智勇在第七届GFIC全球家庭互联网大会进行了题为<网易云信融合CDN方案及实践>的分享,以下是演讲内容回顾. 图为 网易云信视频云架构师席智勇 CDN所面临的问 ...
- foreach中如何取全部长度的值
foreach($data as $num=>$key ){ return $num; } 关键就是这个$num;
- Python - 反向遍历序列(列表、字符串、元组等)的五种方式
1. reversed() a = [1, 2, 3, 4] for i in reversed(a): print(i) 2. range(len(a)-1, -1, -1) a = [1, 2, ...
- java连接mysql数据库8.0以上版本过程中遇到的坑
来自:https://blog.csdn.net/u013276277/article/details/80255468 首先,我居然不能用navicat客户端连接上mysql8.0数据库报1251错 ...
- 19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)
Dubbo与注册中心Zookeeper了解多少ConcurrentHashMap的原理 集合 HashMap 和 HashTable和ConcurrentHashMap的原理以及区别HashMap初始 ...
- 图的最短路径算法Dijkstra算法模板
Dijkstra算法:伪代码 //G为图,一般设为全局变量,数组d[u]为原点到达个点的额最短路径, s为起点 Dijkstra(G, d[u], s){ 初始化: for (循环n次){ u = 是 ...
- python 更换数据源
1.Win+R打开cmd输入%HOMEPATH%打开自己的HOMEPATH路径文件夹 2.在此路径下建立一个文件夹pip, 里边放一个文件pip.ini内容如下: [global] timeout = ...
- 爬虫入门 requests库
写在最前的具体资料: https://2.python-requests.org//zh_CN/latest/user/quickstart.html https://www.liaoxuefeng. ...
- Python核心编程:8个实践性建议
前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触P ...