Dan W
Dan W

Reputation: 365

Finding string Python Arduino

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

Upvotes: 0

Views: 543

Answers (2)

Jonathon Reinhart
Jonathon Reinhart

Reputation: 137398

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)

Upvotes: 1

Narek
Narek

Reputation: 616

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)

Upvotes: 1

Related Questions