简体   繁体   English

简单的python程序分段错误

[英]simple python program segmentation fault

A simple program to open and close 2 doors with servo motor depending on the content of unlock.txt file. 一个简单的程序,用于根据unlock.txt文件的内容使用伺服电机打开和关闭2个门。

It just give Segmentation Fault . 它只是给Segmentation Fault

I did: 我做了:

ulimit -s 20000

Earlier it was around 8000, since i am on my raspberry pi 3. 早些时候大约是8000,因为我在树莓派3上。

Still getting Segmentation Fault . 仍然出现Segmentation Fault

from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)

GPIO.setup(40,GPIO.OUT)
GPIO.setup(38,GPIO.OUT)

GPIO.output(40,GPIO.LOW)
GPIO.output(38,GPIO.LOW)

pwm1=GPIO.PWM(40,50)
pwm2=GPIO.PWM(38,50)

flag=0
prevlok=0

while(True):

    with open('/home/pi/Documents/HAP/unlock.txt','r') as f1:
        unlock=f1.read()

    if flag == 0:
        if unlock == '1':
            pwm1.start(2.5)
            pwm2.start(2.5)
            sleep(2)
            pwm1.stop()
            pwm2.stop()
            flag=1
        else:
            pwm1.start(7.5)
            pwm2.start(7.5)
            sleep(2)
            pwm1.stop()
            pwm2.stop()
            flag=1

    if prevlok != unlock:
        flag=0
    else:
        flag=1

    prevlok=unlock

Thankyou for reading... I fixed the issue with following code... Wondering if there is a way to stop pwm or not run servo motor to save power in the loop, I was trying to do in the question... 谢谢您的阅读...我用以下代码解决了这个问题...想知道是否有一种方法可以停止pwm或不运行伺服电机以节省回路功率,我正在尝试解决这个问题...

from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)

GPIO.setup(40,GPIO.OUT)
GPIO.setup(38,GPIO.OUT)

GPIO.output(40,GPIO.LOW)
GPIO.output(38,GPIO.LOW)

pwm1=GPIO.PWM(40,50)
pwm2=GPIO.PWM(38,50)
pwm1.start(7.5)
pwm2.start(7.5)

flag=1
prevlok=0

while(True):

    with open('/home/pi/Documents/HAP/unlock.txt','r') as f1:
        unlock=f1.read()

    if flag == 1:
        if unlock == '1':
            pwm1.ChangeDutyCycle(2.5)
            pwm2.ChangeDutyCycle(2.5)
            sleep(2)
            flag=0
        else:
            pwm1.ChangeDutyCycle(7.5)
            pwm2.ChangeDutyCycle(7.5)
            sleep(2)
            flag=0

    if prevlok != unlock:
        flag=1
    else:
        flag=0

    prevlok=unlock

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM