该程序将使用条形码扫描仪验证优惠券是否合适的天气,并根据优惠券是否有效而闪烁红灯或绿灯。
我想要这个工作的方式是打开Pi,然后立即能够扫描优惠券。所有Pi必须做的就是在我打开Pi并继续使用之后开始执行该程序。我正在使用crontab开始以下程序:
#Adam Giancola
#June 5th 2015
#This program will scan a bar code and if it matches a good bar code will flash a light
#green or red depending on the validity of the coupon.
import sys, select, os
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
greenLED = 16
redLED = 12
GPIO.setup(greenLED, GPIO.OUT)
GPIO.setup(redLED, GPIO.OUT)
GPIO.output(greenLED, GPIO.LOW)
GPIO.output(redLED, GPIO.LOW)
goodBarCode = "0827112134023"
try:
#Flash LED to test if script is running at RPi boot
GPIO.output(greenLED, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(greenLED, GPIO.LOW)
time.sleep(0.5)
while(1):
userBarCode = input("")
if userBarCode == goodBarCode:
GPIO.output(greenLED, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(greenLED, GPIO.LOW)
time.sleep(0.5)
else:
GPIO.output(redLED, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(redLED, GPIO.LOW)
time.sleep(0.5)
except:
GPIO.cleanup()
如果我使用" sudo python3 ... blah blah blah" ,但我已经使用crontab在启动时启动程序,我没有得到LED的反馈。我知道我的crontab配置正在运行,因为我已经运行了其他程序并且它们正在工作。为什么LED不响应?
答案 0 :(得分:0)
问题是条形码扫描仪假装是键盘。当您从控制台运行它时,无论条形码扫描器输出什么,都将转到您的程序,因为它是当前在控制台的stdin上读取的程序。
当你在后台运行它时,通过rc.local,cron,init脚本或其他任何方法,你的程序将不在控制台上,它将在后台,所以它不会"看到& #34;条码扫描器键入键盘的内容。
对您而言,最好的短期解决方案可能是在控制台上启用自动登录(GUI必须关闭)并在登录后立即调用您的程序。 Full explanation here,简短版本:
编辑/ etc / inittab并将相应的行更改为:
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
编辑/home/pi/.bash_profile并添加:
sudo python3 bla bla bla