Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python : While True or False

I am not an experienced programmer, I have a problem with my code, I think it's a logical mistake of mine but I couldn't find an answer at http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/whilestatements.html . What I want is to check if the serial device is locked, and the different between conditions that "it is locked" and "it isn't locked" is that there are 4 commas ,,,, in the line which contains GPGGA letters. So I want my code to start if there isn't ,,,, but I guess my loop is wrong. Any suggestions will be appreciated. Thanks in advance.

import serial
import time
import subprocess


file = open("/home/pi/allofthedatacollected.csv", "w") #"w" will be "a" later
file.write('\n')
while True:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
        True
    else:
        False    
        print "locked and loaded"

. . .

like image 887
Tolga Varol Avatar asked May 16 '26 06:05

Tolga Varol


2 Answers

Use break to exit a loop:

while True:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
    else:
        print "locked and loaded"
        break

The True and False line didn't do anything in your code; they are just referencing the built-in boolean values without assigning them anywhere.

like image 85
Martijn Pieters Avatar answered May 18 '26 19:05

Martijn Pieters


You can use a variable as condition for your while loop instead of just while True. That way you can change the condition.

So instead of having this code:

while True:
    ...
    if ...:
        True
    else:
        False    

... try this:

keepGoing = True
while keepGoing:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
        keepGoing = True
    else:
        keepGoing = False    
        print "locked and loaded"

EDIT:

Or as another answerer suggests, you can just break out of the loop :)

like image 29
Morten Jensen Avatar answered May 18 '26 20:05

Morten Jensen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!