Pergunta

I have a little script in Python which I am brand new to. I want to check if a certain word appears in ser.readline(). The syntax for the If statement is not right and I am not sure how to lay this out so it continuously reads the serial for the word "sound". I've attached an output image below so you can see how it is printing. I'd like to trigger an MP3 as it finds the word "sound" but as of yet I haven't even managed to get it to print a confirmation saying its found the word.

import serial
import time
ser = serial.Serial('COM6', 9600, timeout=0)

while 1:
 try:
  print (ser.readline())
  time.sleep(1)

  **if "sound" in ser.readline():
        print("foundsound")**

 except ser.SerialTimeoutException:
  print('Data could not be read')
  time.sleep(1)

Serial Printing

Foi útil?

Solução

You may be reading from the port more often than you intend to. I would call ser.readline() just once per iteration of your main loop:

while True:
    try:
        data = ser.readline().decode("utf-8")     # Read the data
        if data == '': continue                   # skip empty data

        print(data)                               # Display what was read
        time.sleep(1)

        if "sound" in data:
           print('Found "sound"!')

    except ser.SerialTimeoutException:
        print('Data could not be read')
        time.sleep(1)

Outras dicas

can you try:

import serial
import time
ser = serial.Serial('COM6', 9600, timeout=0)

while 1:
 try:
  line = ser.readline()
  print line
  time.sleep(1)

  **if "sound" in line:
        print("foundsound")**

 except ser.SerialTimeoutException:
  print('Data could not be read')
  time.sleep(1)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top