Arduino pyfirmata analog reading problems

236 Views Asked by At

I am having some problems reading analog values from my Arduino Mega using pyfirmata. I use Arduino Mega with a Mega Sensor Shield. I would like to read analog values from a HW-201 IR sensor (pin A5). I have uploaded the Standard firmata sketch on Arduino IDE, and I am running the following code using Anaconda Spyder:

import serial
import serial.tools.list_ports 
from pyfirmata import ArduinoMega, util
from time import sleep

def readArduinoPort():
    COM = []                                                                      
    ports = list(serial.tools.list_ports.comports())
    for p in ports:
        if "Arduino" in p.description:
            COM.append(str(p.device))
    return COM
 
COM = readArduinoPort() 
board = ArduinoMega(COM[0])                                                     

pin = board.get_pin('a:5:i')
it = util.Iterator(board)
it.start()
try:
    while True:
        print(pin.read())
        sleep(0.1)
except KeyboardInterrupt:
    pass

Now, this code runs just fine the first time I use it, generating numbers close to 1 when the sensor is detecting proximity and numbers close to 0 when not detecting anything.

However, whenever I try to run the Iterator a second time (without restarting the kernel), the code generates seemingly random numbers (almost like the pin was floating, like nothing was connected to it).

Any idea why this is happening? Is this a normal behavior? Thank you!

I already checked these questions that do not entirely address my issue:

I have the same result by not having anything pinned to pin A5 of the Arduino Mega.

I wasn't sure, but I tried adding:

board.analog[5].enable_reporting()

before the iterator and then:

board.analog[5].disable_reporting()

but nothing changed.

1

There are 1 best solutions below

0
On

Board Differences


I ran into the same problem. I own both a Mega and an Uno and needed to select the appropriate Board and Processor in the tools menu:

Tools > Board > _board_
Tools > Processor > _processor_