- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚使用 PiFace Digital element14 I/O 板设置了 Raspberry Pi。到目前为止,我已经按照几个步骤让它工作,这样我就可以连接 I/O 端口(控制 LED 并操作开关来做事)我写的 python 代码工作正常,我可以让它做事.
目前我只是在闲逛,感受在 Pi 上编程的感觉,并试图了解这些功能。我想为一个简单的 6 位二进制计数器设置一个状态机,当我告诉它时,它会向上和向下计数,我可以很容易地做到这一点。但是,当我尝试将其提升到一个新的水平并使用中断来设置状态时,我遇到了问题。
我关注了 Manual以及This Guide获取激活中断的代码。
我编写的代码执行时没有错误,但是,要么未检测到中断,要么它们什么都不做,我不确定是哪一个。我的代码如下。我知道 while 循环适用于“等待”和“计数”状态,因为我可以定义初始条件。它计数正确,所以我非常确定 while 循环没问题,只是没有状态变化。
import pifacedigitalio as pfio
import os
import time
def startCounter(event):
global state
state = 'counting'
print('counter started')
def stopCounter(event):
global state
state = 'waiting'
def stopProg(event):
global state
state = 'stop'
def resetCounter(event):
global state
state = 'reset'
def setLEDs(stateArray):
i = 0
for state in stateArray:
pfio.digital_write(i,state)
i = i + 1
def calcBools(count):
binString = bin(count).rsplit('0b')[1]
stringLength = len(binString)
zeroString = '0' * (8 - stringLength)
newString = zeroString + binString
i = 0
boolsOut = [0,0,0,0,0,0,0,0]
for bit in newString:
if bit == '1':
boolsOut[i] = 1
i = i + 1
return boolsOut
####################
### MAIN PROGRAM ###
####################
pfio.init()
pifacedigital = pfio.PiFaceDigital()
listener = pfio.InputEventListener(chip=pifacedigital)
signalDirection = pfio.IODIR_RISING_EDGE
listener.register(0, signalDirection, stopProg)
listener.register(1, signalDirection, startCounter)
listener.register(2, signalDirection, stopCounter)
listener.register(3, signalDirection, resetCounter)
listener.activate()
counter = 0
running = True
state = 'waiting'
setLEDs([0,0,0,0,0,0,0,0])
direction = 'up'
while(running):
if state == 'stop':
running = False
listener.deactivate()
counter = 0
elif state == 'waiting':
time.sleep(1)
print('waiting...')
elif state == 'counting':
if direction == 'up':
counter = counter + 1
else:
counter = counter - 1
if counter > 63:
direction = 'down'
elif counter == 0:
direction = 'up'
elif state == 'reset':
counter = 0
else:
time.sleep(0.1)
setLEDs(calcBools(counter))
print(counter)
time.sleep(0.25)
所以这段代码不起作用,我尝试了一些使用 pifacecommon 库也不起作用的东西,将一些代码行替换为:
import pifacecommon as pfc
readport = pfc.mcp23s17.GPIOA # I also tried GPIOB to no avail
listener = pfc.interrupts.PortEventListener(readport, 0)
在此之后,两种方法的监听器命令是相同的。与此同时,我尝试使用 pfc.mcp23s17.write 命令,但显然它不存在或类似的愚蠢借口。
在此先感谢您阅读本文,如果您做出回应,我们将更加感谢您,如果您对我有答案,我们将更加感谢您!
-本
编辑(已解决):我的回答在我一直提供的第二个链接的评论中 :( 结果我写的一切都正确,我只需要从终端而不是 IDLE3 运行文件。
最佳答案
所以我的问题的答案在 2nd link 的评论中我提供了整个时间。我需要做的就是从终端运行程序,而不是 IDLE3。
我认为原因在于 Linux 中处理中断的方式。 Linux ISR 不是真正的 ISR,处理器将 ISR 置于 sleep 模式,直到它被调用。谁能详细说明为什么 IDLE3 不支持中断?
关于python - Raspberry Pi 和 PiFace Digital 的中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429320/
我讨厌发布“这应该很容易,我错过了什么”问题,但是......这应该很容易,我错过了什么?我在这个测试代码上没有得到匹配,我不明白为什么。模式是(或应该是)“任何三个数字,后跟任何三个相同的数字,后跟
我在 digital ocean 上部署了一个应用程序,我想更新它的部署源 (github)。我将我的 github 存储库移到了一个组织,现在 digital ocean 似乎无法再访问它了。 我相
我在 digital ocean 上部署了一个应用程序,我想更新它的部署源 (github)。我将我的 github 存储库移到了一个组织,现在 digital ocean 似乎无法再访问它了。 我相
[抱歉,如果这不太适合 SO,Digits 的支持链接到 SO] 在我的 iOS 应用程序中,有些用户使用 Digits 登录,有些则不使用。我仍然希望能够通过 Digits 的联系人匹配使用他们的通
我有这样的查询: SELECT * FROMmesWHERE text REGEXP '#11' 我想获得#11 的所有含义,例如: #11 #11a 但不是数字后面有数字的情况: #112 所以我厌
我有一个 file.txt 看起来像这样: abe abbe cde 45a678 ae cababb 12345 在运行命令 egrep [[:digit:]] file.txt 之后它显示了两个结
我有一个生产服务器 - 一个 Digital Ocean Droplet - 上面运行着一个数据库和网站。我现在想继续制作一个临时服务器。我认为克隆它是一个好主意,但是执行此类操作的好方法是什么? 到
似乎 get.k8s.io 是部署 Kubernetes 集群的推荐方法,但该脚本不支持 Digital Ocean。 有没有一种我错过的替代方法可以在 Digital Ocean 上轻松设置集群?
我有关于 java 正则表达式的查询。实际上,我是正则表达式的新手。所以我需要帮助来为下面的语句形成一个正则表达式: Statement: a-alphanumeri
我对大家有一些特殊的要求。我需要对以下对象数组进行自定义顺序/排序。我需要订购的数组可能类似于以下示例: //array $scope.myArray = [ { orderI
我有一个数字 N。继续对数字求和,直到得到一位数字的结果。例如 35252 ==> 17 ==> 8我写了以下代码: int digitSum(int n) { int sum = 0;
我想允许用户输入以下十进制或整数值 (A) .5 0.500 3 0 0.0 30 500000 4000.22 0. 这是我使用的以下正则表达式: factor: /^-?\d*[.]??\d*$/
我正在使用if语句显示隐藏的div。用户只需按一下按钮即可循环选择他们想要预订的小时数。时间最多可达 10 小时。 if如果 checkHours 则语句会显示通知小于 5。一切都工作得很好,直到用户
如何编写正则表达式来验证此模式? 123456 - correct *1 - correct 1* - correct 124** - correct *1*2 - correct * - corre
所以这就是我想要做的。 在 git 中推送到 master 有 gitlab-ci 听说推送启动管道 管道构建代码并将 docker 容器推送到 gitlab 注册表 管道通过 ssh 登录到 d
myString.match("[\d]*") 对于 12345 和 77777 给出 true 但我正在寻找的结果是 12345 为 false,7777 为 true 最佳答案 (\d)\1*\D
在 iOS 应用程序中安装 Digits 1.15.1 时,AppDelegate.m 文件中出现以下错误: 无法在导入语句中构建模块“DigitsKit”#import 在 [Fabric wit
如何使正则表达式不匹配超过 2 位数的特定数字。例如除 13 以外的任何数字。下面的第二行代码将无法匹配 10、11...,第三行将查找不以 1 开头但具有 3 的数字: str = 'val=13'
我实际上有一个可能看起来很疯狂的问题,但在 WCF 中我有一个简单的契约(Contract),有时当我将 DataContract 设置为小数时,服务会在“.”之后发回 4 位数字。我其实很期待只有2
如果我执行以下操作: et_user_input.setKeyListener(DigitsKeyListener.getInstance("123-+")); et_user_input.setIn
我是一名优秀的程序员,十分优秀!