Merge branch 'dev'
This commit is contained in:
+4
-1
@@ -1,2 +1,5 @@
|
|||||||
.build
|
.DS_Store
|
||||||
|
bin/*/
|
||||||
|
*build*
|
||||||
|
*~
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
"""
|
||||||
|
ldr.py
|
||||||
|
Display analog data from Arduino using Python (matplotlib)
|
||||||
|
Author: Mahesh Venkitachalam
|
||||||
|
Website: electronut.in
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys, serial, argparse
|
||||||
|
import numpy as np
|
||||||
|
from time import sleep
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.animation as animation
|
||||||
|
|
||||||
|
|
||||||
|
# plot class
|
||||||
|
class AnalogPlot:
|
||||||
|
# constr
|
||||||
|
def __init__(self, strPort, maxLen):
|
||||||
|
# open serial port
|
||||||
|
self.ser = serial.Serial(strPort, 9600)
|
||||||
|
|
||||||
|
self.ax = deque([0.0]*maxLen)
|
||||||
|
self.ay = deque([0.0]*maxLen)
|
||||||
|
self.maxLen = maxLen
|
||||||
|
|
||||||
|
# add to buffer
|
||||||
|
def addToBuf(self, buf, val):
|
||||||
|
if len(buf) < self.maxLen:
|
||||||
|
buf.append(val)
|
||||||
|
else:
|
||||||
|
buf.pop()
|
||||||
|
buf.appendleft(val)
|
||||||
|
|
||||||
|
# add data
|
||||||
|
def add(self, data):
|
||||||
|
assert(len(data) == 2)
|
||||||
|
self.addToBuf(self.ax, data[0])
|
||||||
|
self.addToBuf(self.ay, data[1])
|
||||||
|
|
||||||
|
# update plot
|
||||||
|
def update(self, frameNum, a0, a1):
|
||||||
|
try:
|
||||||
|
line = self.ser.readline()
|
||||||
|
data = [float(val) for val in line.split()]
|
||||||
|
# print data
|
||||||
|
if(len(data) == 2 and not pause):
|
||||||
|
self.add(data)
|
||||||
|
a0.set_data(range(self.maxLen), self.ax)
|
||||||
|
a1.set_data(range(self.maxLen), 0)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print('exiting')
|
||||||
|
|
||||||
|
if not pause:
|
||||||
|
return a0,
|
||||||
|
|
||||||
|
# clean up
|
||||||
|
def close(self):
|
||||||
|
# close serial
|
||||||
|
self.ser.flush()
|
||||||
|
self.ser.close()
|
||||||
|
|
||||||
|
pause = False
|
||||||
|
def onClick(event):
|
||||||
|
global pause
|
||||||
|
pause = not pause
|
||||||
|
|
||||||
|
# main() function
|
||||||
|
def main():
|
||||||
|
# create parser
|
||||||
|
parser = argparse.ArgumentParser(description="LDR serial")
|
||||||
|
# add expected arguments
|
||||||
|
parser.add_argument('--port', dest='port', required=True)
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
#strPort = '/dev/tty.usbserial-A7006Yqh'
|
||||||
|
strPort = args.port
|
||||||
|
|
||||||
|
print('reading from serial port %s...' % strPort)
|
||||||
|
|
||||||
|
# plot parameters
|
||||||
|
analogPlot = AnalogPlot(strPort, 300)
|
||||||
|
|
||||||
|
print('plotting data...')
|
||||||
|
|
||||||
|
# set up animation
|
||||||
|
fig = plt.figure()
|
||||||
|
|
||||||
|
ax = plt.axes(xlim=(0, 300), ylim=(0, 1023))
|
||||||
|
a0, = ax.plot([], [])
|
||||||
|
a1, = ax.plot([], [])
|
||||||
|
fig.canvas.mpl_connect('button_press_event', onClick)
|
||||||
|
anim = animation.FuncAnimation(fig, analogPlot.update,
|
||||||
|
fargs=(a0, a1),
|
||||||
|
frames=None,
|
||||||
|
interval=50)
|
||||||
|
|
||||||
|
# show plot
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# clean up
|
||||||
|
analogPlot.close()
|
||||||
|
|
||||||
|
print('exiting.')
|
||||||
|
|
||||||
|
|
||||||
|
# call main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -1,8 +1,29 @@
|
|||||||
|
|
||||||
|
// analog-plot
|
||||||
|
//
|
||||||
|
// Read analog values from A0 and A1 and print them to serial port.
|
||||||
|
//
|
||||||
|
// electronut.in
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
|
// initialize serial comms
|
||||||
|
Serial.begin(9600);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
// read A0
|
||||||
|
int val1 = analogRead(0);
|
||||||
|
// read A1
|
||||||
|
int val2 = analogRead(1);
|
||||||
|
// print to serial
|
||||||
|
Serial.print(val1);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(val2);
|
||||||
|
Serial.print("\n");
|
||||||
|
// wait
|
||||||
|
delay(50);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user