Hi, I am trying to get a live scrolling graph built from data send by two
arduino sensors. Although live data is being shown in the graph  I am not
able to get  it scrolling. The arduino and Python codes I am working with
are included below. I would very much appreciate if you can help me getting
the scrolling graph working.



PYTHON CODE:

import serial # import Serial Library

import numpy  # Import numpy

import matplotlib.pyplot as plt #import matplotlib library

from drawnow import *



tempF= []

pressure= []



arduinoData = serial.Serial('com6', 115200) #Creating our serial object
named arduinoData

plt.ion() #Tell matplotlib you want interactive mode to plot live data

cnt=0



def makeFig(): #Create a function that makes our desired plot

    plt.ylim(0,500)                                 #Set y min and max
values

    plt.title('Frequency vs Time')      #Plot the title

    plt.grid(True)                                  #Turn the grid on

    plt.ylabel('Frequency (pulses/sec)')                            #Set
ylabels

    plt.plot(tempF, 'ro-', label='pulses/sec')       #plot the temperature

    plt.legend(loc='upper left')                    #plot the legend





    plt2=plt.twinx()                                #Create a second y axis

    plt.ylim(0,500)                           #Set limits of second y axis-
adjust to readings you are getting

    plt2.plot(pressure, 'b^-', label='Pressure (Pa)') #plot pressure data

    plt2.set_ylabel('Pressrue (Pa)')                    #label second y axis

    plt2.ticklabel_format(useOffset=False)           #Force matplotlib to
NOT autoscale y axis

    plt2.legend(loc='upper right')                  #plot the legend





while True: # While loop that loops forever

    while (arduinoData.inWaiting()==0): #Wait here until there is data

        pass #do nothing

    arduinoString = arduinoData.readline() #read the line of text from the
serial port

    dataArray = arduinoString.split(',')   #Split it into an array called
dataArray

    temp = float(dataArray[0])           #Convert first element to floating
number and put in temp

    pres = float(dataArray[1])            #Convert second element to
floating number and put in P

    tempF.append(temp)                     #Build our tempF array by
appending temp readings

    pressure.append(pres)                        #Building our pressure
array by appending P readings

    drawnow(makeFig)                       #Call drawnow to update our live
graph

    plt.pause(.000001)                     #Pause Briefly. Important to
keep drawnow from crashing

    cnt=cnt+1

    if(cnt>10):                            #If you have 50 or more points,
delete the first one from the array

        tempF.pop(0)                       #This allows us to just see the
last 50 data points

        pressure.pop(0)















 ARDUINO CODE:





#include "Wire.h"    // imports the wire library for talking over I2C

#include "Adafruit_BMP085.h"  // import the Pressure Sensor Library

Adafruit_BMP085 mySensor;  // create sensor object called mySensor



float tempC;  // Variable for holding temp in C

float tempF;  // Variable for holding temp in F

float pressure; //Variable for holding pressure reading



void setup(){

Serial.begin(115200); //turn on serial monitor

mySensor.begin();   //initialize mySensor

}



void loop() {

tempC = mySensor.readTemperature(); //  Be sure to declare your variables

tempF = tempC*1.8 + 32.; // Convert degrees C to F

pressure=mySensor.readPressure(); //Read Pressure





Serial.print(tempF);

Serial.print(" , ");

Serial.println(pressure);

delay(250); //Pause between readings.

}
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to