arduino 部分: 重點就是 先 serial read...再serial write
===================================================================
int firstSensor =0;
int ledState = LOW;
const int ledPin = 2; // D2 the number of the LED pin
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 500;
unsigned char inByte;
void setup()
{
pinMode(ledPin, OUTPUT);
// start serial port at 9600 bps:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
}
unsigned char cnt=0;
void loop()
{
char buf[12];
if (Serial.available() > 0)
{
// get incoming byte:
inByte = Serial.read();
// read first analog input, divide by 4 to make the range 0-255:
firstSensor = analogRead(A0);
Serial.println(firstSensor);
}
//Serial.println("Hello, World!");
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
======================================================
raspberry pi 部分... 先送serial write.... 再serial read....然後把讀到的資料存
進去ring buffer...然後畫曲線畫出來
======================================================
# -*- coding: utf-8 -*-
# Author: Massimo Menichinelli
# Homepage: http://www.openp2pdesign.org
# License: MIT
#
import wx
import serial
# A new custom class that extends the wx.Frame
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title,
size=(300, 300))
# Attach the paint event to the frame
self.Bind(wx.EVT_PAINT, self.OnPaint)
# Create a timer for redrawing the frame every 100 milliseconds
self.Timer = wx.Timer(self)
self.Timer.Start(100)
self.Bind(wx.EVT_TIMER, self.OnPaint)
# Show the frame
self.Centre()
self.Show()
self.index = 0
# Create the paint surface
dc = wx.PaintDC(self)
# Refresh the display
self.Refresh()
# Get data from serial port
arduino.write('0')
value = arduino.readline()
try:
value = int(value)/4
except:
value = 0
#print "value : " + str(value)
for i in range(0,data_size-1,1):
data_array[i] = data_array[i+1]
data_array[data_size-1] = (255 - value)
        # Draw the serial data
        # Set up colors:
        thickness = 3
        border_color = "#990000"
        border_color2 = "#999900"
        fill_color = "#FF944D"
        fill_color2 = "#00944D"
        dc.SetPen(wx.Pen(border_color, thickness))
        dc.SetBrush(wx.Brush(fill_color))
        # Draw a line
        #dc.DrawLine(50, 40, 50+value, 40)
        for i in range(0,data_size-1):
            dc.DrawLine(i, data_array[i % data_size], i+1, data_array[(i+1) % data_size])
        # Draw a rectangle
        #dc.DrawRectangle(50,50,value,50)
        #dc.SetPen(wx.Pen(border_color2, thickness))
        #dc.SetBrush(wx.Brush(fill_color2))
        #for i in range(0,data_size-1):
            #dc.DrawLine(i, 255-data_array[i % data_size], i+1, 255-data_array[(i+1) % data_size])
# Main program
if __name__ == '__main__':
    # Connect to serial port first
    try:
        arduino = serial.Serial('/dev/ttyUSB0', 9600)
    except:
        print "Failed to connect"
        exit()
    data_array = []
    data_size = 200
    for i in range(0,data_size):
       data_array.append(255)
    # Create and launch the wx interface
    app = wx.App()
    MyFrame(None, 'Serial data test')
    app.MainLoop()
    # Close the serial connection
    arduino.close()
Reference : http://fabacademy.org/archives/2015/doc/wxpython.html
沒有留言:
張貼留言