Python写GPIO值

Python写GPIO值,python,Python,我是一个彻头彻尾的傻瓜,使用树莓皮试着制作一个程序,用GPIO 4上设置的PIR传感器跟踪运动实例,现在这个程序可以毫无问题地工作,直到我尝试导出数据,长话短说,我尝试gspread和ubidots,但这两个程序都无法工作,即使只是使用一个测试文件。因此,我的下一个尝试是一个简单的txt文件,它将捕获时间和日期,并将编写一个1 这就是我所拥有的: import time import datetime import RPi.GPIO as GPIO sensor = 4 GPIO.setm

我是一个彻头彻尾的傻瓜,使用树莓皮试着制作一个程序,用GPIO 4上设置的PIR传感器跟踪运动实例,现在这个程序可以毫无问题地工作,直到我尝试导出数据,长话短说,我尝试gspread和ubidots,但这两个程序都无法工作,即使只是使用一个测试文件。因此,我的下一个尝试是一个简单的txt文件,它将捕获时间和日期,并将编写一个1

这就是我所拥有的:

import time
import datetime
import RPi.GPIO as GPIO

sensor = 4


GPIO.setmode(GPIO.BCM)
GPIO.setup(sensor, GPIO.IN, GPIO.PUD_DOWN)

prevstate = False
currState = False

while True:
        time.sleep(0.1)
        prevState = currState
        currState = GPIO.input(sensor)
        if currState != prevState:
                newState = "1" if currState else "0"
                print("GPIO pin %s is %s" % (sensor, newState))

                try:
                    values  = [datetime.datetime.now(), newState]
                    with open("test.txt", "a") as text_file:
                        text_file.write("values")

time.sleep(1.5)
所以我现在真的不知道为什么,但是在我点击value部分之前,一切都正常,然后我得到一个unindent错误,如果我从try down中删除,我什么也得不到

我以前有过:

except: 
    print: "cannot open file" 

但那真的不是什么问题。unindent仍然出现。

您必须始终在try语句后面加上except或finally语句,但是您提到try语句也有错误?这是否也包括:打印后(不应该)?这应该起作用:

            try:
                values  = [datetime.datetime.now(), newState]
                with open("test.txt", "a") as text_file:
                    text_file.write(values)
            except: 
                print: "cannot open file" 

请注意,我还删除了text_file.write(values)中围绕值的引号。

您有缩进问题。看起来您开始允许Idle使用tab-8进行缩进,然后切换到4。您需要取消缩进并重新缩进所有内容

您处理文件的方式是,每次通过时都会覆盖它。文件中只有一个条目。尝试在主循环之前打开文件:

import time
import datetime
import RPi.GPIO as GPIO

sensor = 4

GPIO.setmode(GPIO.BCM)
GPIO.setup(sensor, GPIO.IN, GPIO.PUD_DOWN)

prevstate = False
currState = False

with open("test.txt", "a") as text_file:  
    while True:
        time.sleep(0.1)
        prevState = currState
        currState = GPIO.input(sensor)
        if currState != prevState:
            newState = "1" if currState else "0"
            print("GPIO pin %s is %s" % (sensor, newState))

            try:
                values  = [datetime.datetime.now(), newState]
                text_file.write("values")
            except: 
                print "cannot open file" 

去掉冒号“:“打印后,主循环后的睡眠没有任何作用。

这真的没什么作用:添加except语句只是在那一行出现语法错误,表示制表符和缩进的使用不一致:
try:values=[datetime.datetime.now(),newState]打开(“test.txt”,“a”)作为文本文件:文本文件。写入(值)除了:打印:“无法打开文件”时间。睡眠(1.5)
删除行前的所有制表符和空格,并缩进,使其看起来与上面相同,这是由于缩进时制表符和普通空格的混合。此代码现在可以工作,正如您得到所有适当的响应一样,`try:values=“[datetime.datetime.now(),new_state]”打开(“test.txt”,“a”)作为text_file:text_file.write(values),唯一的问题是它只会写入[datetime.datetime.now(),new_state],因此无法从datetime导入……有什么想法吗?