Merge branch 'dev'

This commit is contained in:
Sam Perry
2016-10-01 11:25:09 +01:00
3 changed files with 137 additions and 1 deletions
+4 -1
View File
@@ -1,2 +1,5 @@
.build
.DS_Store
bin/*/
*build*
*~
+112
View File
@@ -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()
+21
View File
@@ -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()
{
// initialize serial comms
Serial.begin(9600);
}
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);
}