【发布时间】:2022-06-13 18:31:54
【问题描述】:
我正在使用树莓派来跟踪来自动物跑轮的信息,例如行进距离和速度。
我正在使用脚本(来源:https://drive.google.com/file/d/1kKWoHWWLt008tQB-H_9C2gjgoBFygKR4/view?usp=sharing)
import RPi.GPIO as GPIO
import time
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#get current data from file
file = open("/home/pi/current_count","r")
feet_traveled = float(file.readline())
high_mph = float(file.readline())
max_mph_time = file.readline()
prev_time = 0
mark_time = 0
prev_feet_traveled = 0
mph = 0
def increase_count(channel):
global prev_time
global feet_traveled
global prev_feet_traveled
global high_mph
global max_mph_time
global mph
feet_traveled += 2.095
mark_time = time.time()
elapsed_time = mark_time - prev_time
prev_time = mark_time
fps = (feet_traveled - prev_feet_traveled) / elapsed_time
prev_feet_traveled = feet_traveled
mph = fps / 0.6818182
if mph > high_mph:
high_mph = mph
max_mph_time = time.asctime(time.localtime(time.time()))
print 'Feet per second = ' + str(fps)
print 'MPH = ' + str(mph)
print 'Highest MPH ' + str(high_mph)
# write mph log
with open('/home/pi/mph_log', 'a+') as writer:
localtime = time.asctime(time.localtime(time.time()))
mph_log = localtime + ' MPH {0} fps {1}'.format(mph,fps) + '\n'
writer.write(mph_log)
GPIO.add_event_detect(6, GPIO.RISING, callback=increase_count, bouncetime=300)
while True:
miles_traveled = float(feet_traveled)/5280
print "Distance traveled is {0:,.1f} feet or {1:.3f} miles".format(feet_traveled,miles_traveled)
sleep(10)
distance = "<h1>Distance traveled is {0:,.1f} feet or {1:.3f} miles".format(feet_traveled,miles_traveled)
max_mph = '<h1>Peak MPH was {0:.2f} at '.format(high_mph) + str(max_mph_time)
current_mph = '<h1>Last speed measured was {0:.2f}mph'.format(mph)
# write web page
with open('/var/www/html/index.html', 'w') as writer:
writer.write('<html><body>' + distance)
writer.write('</h1>')
writer.write(current_mph)
writer.write('</h1>')
writer.write(max_mph + '</body></html>')
# write current count to disk
with open('/home/pi/current_count', 'w') as writer:
writer.write(str(feet_traveled) + '\n')
writer.write(str(high_mph) + '\n')
writer.write(max_mph_time)
# write to log file
with open('/home/pi/log_file', 'a+') as writer:
localtime = time.asctime(time.localtime(time.time()))
distance = localtime + ' Distance traveled is {0:,.1f} feet or {1:.3f} miles'.format(feet_traveled,miles_traveled) + '\n'
writer.write(distance)
运行代码时出现以下错误:
Traceback(最近一次调用最后一次):文件“/home/pi/wheel.py”,行 55,在 miles_traveled = float (feet_traveled) / 5280 NameError: name 'feet_traveled' is not defined
在脚本中,我将 feet_traveled 定义为 2.09,因为这是一个轮子旋转过程中经过的距离。
我不知道为什么我会收到错误,但感谢任何帮助。
【问题讨论】:
-
您只在
increase_count()函数中定义了miles_traveled。全局变量通常是错误代码的标志,因此不要使用它们,而是将适当的参数传递给函数,并在最后以列表、元组、字典或任何您喜欢的数据结构的形式返回适当的值。
标签: python raspberry-pi gpio