1

I am new to arduino and coding in general. I am trying to get a real time plot to graph the analog values from my arduino. Looking at several examples online I got some code that will try to pull up a graph but states 'str' does not support the buffer interface. Also when I open the arduino program to run on the COM3 port, the Python code says it cannot open port COM3. Here is my Arduino Code

float Concentration=0;

int val = 0;

void setup() {

 // put your setup code here, to run once:

Serial.begin(9600);

}

void loop() {

  // put your main code here, to run repeatedly:

val = analogRead(3);

Concentration =  log ((val)/486.771)/-3.478;

Serial.println(Concentration);

Serial.print("\n");

delay(100);

And here is my Python code

import serial

import numpy as np

from matplotlib import pyplot as plt

ser = serial.Serial('COM3', 9600)

plt.ion() # set plot to animated


ydata = [0] * 50

ax1=plt.axes()  

# make plot

line, = plt.plot(ydata)

plt.ylim([100,400])

# start data collection

while True:  

    data = ser.readline().rstrip() # read data from serial 
                                   # port and strip line endings
    if len(data.split(".")) == 2:

        ymin = float(min(ydata))-10

        ymax = float(max(ydata))+10

        plt.ylim([ymin,ymax])

        ydata.append(data)

        del ydata[0]

        line.set_xdata(np.arange(len(ydata)))

        line.set_ydata(ydata)  # update the data

        plt.draw() # update the plot

        plt.pause(3)
3
  • what kind of operation system you are using? what is the exactly error message? Commented Jun 19, 2015 at 7:39
  • Have you read How to Ask? Commented Jun 19, 2015 at 7:43
  • COM3 indicates a windows system, but are you completely sure that the arduino is actually on COM3, and if the IDE is connected, the port is busy, and you cant connect to it from python. Commented Jun 19, 2015 at 8:30

1 Answer 1

1

The Arduino code is ok (if you add the missing } in the code you posted.

I've thrown together a small javascript for testing some arduino code here: http://zcuba.dk/arduinoSimpleSim/

It does not simulate an arduino, but translates the sketch into javascript, and runs that in the browser.

It is not complete, and cannot do much, but enough for simple testing. (one of the things it can't do yet is converting to math functions) so copy paste, add the "}" and replace "log(" with "Math.log(" and you'll see that your code runs perfectly.

It writes values to the serial port as it's supposed to: 5V -> -0.21354 +/- noise 0V -> 1.6 +/- noise

so the problem is a python issue.

I tested your code, but without a serial connection, and it works fine on python 2.7.10 If I do:

#import serial
from random import randint

and

'''
data = ser.readline().rstrip() # read data from serial 
                               # port and strip line endings
'''
data = "1." + str(randint(0,200))

so the problem is (as far as I can see) only in the in the serial connection.

see this tutorial: http://petrimaki.com/2013/04/28/reading-arduino-serial-ports-in-windows-7/

as you can see your code should work, so my guess is that your arduino is not on COM3, or COM3 is used by the Arduino IDE

unless you are using python 3. If you use Python3x then string is not the same type as for Python 2.x see this: PySerial and readline() return binary string - convert to regular alphanumeric string?

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.