diff --git a/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py b/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py index 5cd7fe331e..84cb45d5a2 100644 --- a/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py +++ b/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py @@ -1,180 +1,180 @@ -# File: ADNS3080ImageGrabber.py - -import serial -import string -import math -import time -from Tkinter import * -from threading import Timer - -comPort = 'COM8' #default com port -comPortBaud = 115200 - -class App: - grid_size = 15 - num_pixels = 30 - image_started = FALSE - image_current_row = 0; - ser = serial.Serial() - pixel_dictionary = {} - - def __init__(self, master): - - # set main window's title - master.title("ADNS3080ImageGrabber") - - frame = Frame(master) - frame.grid(row=0,column=0) - - self.comPortStr = StringVar() - self.comPort = Entry(frame,textvariable=self.comPortStr) - self.comPort.grid(row=0,column=0) - self.comPort.delete(0, END) - self.comPort.insert(0,comPort) - - self.button = Button(frame, text="Open", fg="red", command=self.open_serial) - self.button.grid(row=0,column=1) - - self.entryStr = StringVar() - self.entry = Entry(frame,textvariable=self.entryStr) - self.entry.grid(row=0,column=2) - self.entry.delete(0, END) - self.entry.insert(0,"I") - - self.send_button = Button(frame, text="Send", command=self.send_to_serial) - self.send_button.grid(row=0,column=3) - - self.canvas = Canvas(master, width=self.grid_size*self.num_pixels, height=self.grid_size*self.num_pixels) - self.canvas.grid(row=1) - - ## start attempts to read from serial port - self.read_loop() - - def __del__(self): - self.stop_read_loop() - - def open_serial(self): - # close the serial port - if( self.ser.isOpen() ): - try: - self.ser.close() - except: - i=i # do nothing - # open the serial port - try: - self.ser = serial.Serial(port=self.comPortStr.get(),baudrate=comPortBaud, timeout=1) - print("serial port '" + self.comPortStr.get() + "' opened!") - except: - print("failed to open serial port '" + self.comPortStr.get() + "'") - - def send_to_serial(self): - if self.ser.isOpen(): - self.ser.write(self.entryStr.get()) - print "sent '" + self.entryStr.get() + "' to " + self.ser.portstr - else: - print "Serial port not open!" - - def read_loop(self): - try: - self.t.cancel() - except: - aVar = 1 # do nothing - #print("reading") - if( self.ser.isOpen() ) : - self.read_from_serial(); - - self.t = Timer(0.0,self.read_loop) - self.t.start() - - def stop_read_loop(self): - try: - self.t.cancel() - except: - print("failed to cancel timer") - # do nothing - - def read_from_serial(self): - if( self.ser.isOpen() ): - while( self.ser.inWaiting() > 0 ): - - self.line_processed = FALSE - line = self.ser.readline() - - # process the line read - - if( line.find("-------------------------") == 0 ): - self.line_processed = TRUE - self.image_started = FALSE - self.image_current_row = 0 - - if( self.image_started == TRUE ): - if( self.image_current_row >= self.num_pixels ): - self.image_started == FALSE - else: - words = string.split(line,",") - if len(words) >= 30: - self.line_processed = TRUE - x = 0 - for v in words: - try: - colour = int(v) - except: - colour = 0; - #self.display_pixel(x,self.image_current_row,colour) - self.display_pixel(self.num_pixels-1-self.image_current_row,self.num_pixels-1-x,colour) - x += 1 - self.image_current_row += 1 - else: - print("line " + str(self.image_current_row) + "incomplete (" + str(len(words)) + " of " + str(self.num_pixels) + "), ignoring") - #print("bad line: " + line); - - if( line.find("image data") >= 0 ): - self.line_processed = TRUE - self.image_started = TRUE - self.image_current_row = 0 - # clear canvas - #self.canvas.delete(ALL) # remove all items - - #display the line if we couldn't understand it - if( self.line_processed == FALSE ): - print( line ) - - def display_default_image(self): - # display the grid - for x in range(0, self.num_pixels-1): - for y in range(0, self.num_pixels-1): - colour = x * y / 3.53 - self.display_pixel(x,y,colour) - - def display_pixel(self, x, y, colour): - if( x >= 0 and x < self.num_pixels and y >= 0 and y < self.num_pixels ) : - - #find the old pixel if it exists and delete it - if self.pixel_dictionary.has_key(x+y*self.num_pixels) : - self.old_pixel = self.pixel_dictionary[x+y*self.num_pixels] - self.canvas.delete(self.old_pixel) - del(self.old_pixel) - - fillColour = "#%02x%02x%02x" % (colour, colour, colour) - #draw a new pixel and add to pixel_array - self.new_pixel = self.canvas.create_rectangle(x*self.grid_size, y*self.grid_size, (x+1)*self.grid_size, (y+1)*self.grid_size, fill=fillColour) - self.pixel_dictionary[x+y*self.num_pixels] = self.new_pixel - - -## main loop ## - -root = Tk() -#root.withdraw() -#serPort = SerialHandler(comPort,comPortBaud) - -# create main display -app = App(root) -app.display_default_image() - -print("entering main loop!") - -root.mainloop() - -app.stop_read_loop() - -print("exiting") +# File: ADNS3080ImageGrabber.py + +import serial +import string +import math +import time +from Tkinter import * +from threading import Timer + +comPort = 'COM8' #default com port +comPortBaud = 115200 + +class App: + grid_size = 15 + num_pixels = 30 + image_started = FALSE + image_current_row = 0; + ser = serial.Serial() + pixel_dictionary = {} + + def __init__(self, master): + + # set main window's title + master.title("ADNS3080ImageGrabber") + + frame = Frame(master) + frame.grid(row=0,column=0) + + self.comPortStr = StringVar() + self.comPort = Entry(frame,textvariable=self.comPortStr) + self.comPort.grid(row=0,column=0) + self.comPort.delete(0, END) + self.comPort.insert(0,comPort) + + self.button = Button(frame, text="Open", fg="red", command=self.open_serial) + self.button.grid(row=0,column=1) + + self.entryStr = StringVar() + self.entry = Entry(frame,textvariable=self.entryStr) + self.entry.grid(row=0,column=2) + self.entry.delete(0, END) + self.entry.insert(0,"I") + + self.send_button = Button(frame, text="Send", command=self.send_to_serial) + self.send_button.grid(row=0,column=3) + + self.canvas = Canvas(master, width=self.grid_size*self.num_pixels, height=self.grid_size*self.num_pixels) + self.canvas.grid(row=1) + + ## start attempts to read from serial port + self.read_loop() + + def __del__(self): + self.stop_read_loop() + + def open_serial(self): + # close the serial port + if( self.ser.isOpen() ): + try: + self.ser.close() + except: + i=i # do nothing + # open the serial port + try: + self.ser = serial.Serial(port=self.comPortStr.get(),baudrate=comPortBaud, timeout=1) + print("serial port '" + self.comPortStr.get() + "' opened!") + except: + print("failed to open serial port '" + self.comPortStr.get() + "'") + + def send_to_serial(self): + if self.ser.isOpen(): + self.ser.write(self.entryStr.get()) + print "sent '" + self.entryStr.get() + "' to " + self.ser.portstr + else: + print "Serial port not open!" + + def read_loop(self): + try: + self.t.cancel() + except: + aVar = 1 # do nothing + #print("reading") + if( self.ser.isOpen() ) : + self.read_from_serial(); + + self.t = Timer(0.0,self.read_loop) + self.t.start() + + def stop_read_loop(self): + try: + self.t.cancel() + except: + print("failed to cancel timer") + # do nothing + + def read_from_serial(self): + if( self.ser.isOpen() ): + while( self.ser.inWaiting() > 0 ): + + self.line_processed = FALSE + line = self.ser.readline() + + # process the line read + + if( line.find("-------------------------") == 0 ): + self.line_processed = TRUE + self.image_started = FALSE + self.image_current_row = 0 + + if( self.image_started == TRUE ): + if( self.image_current_row >= self.num_pixels ): + self.image_started == FALSE + else: + words = string.split(line,",") + if len(words) >= 30: + self.line_processed = TRUE + x = 0 + for v in words: + try: + colour = int(v) + except: + colour = 0; + #self.display_pixel(x,self.image_current_row,colour) + self.display_pixel(self.num_pixels-1-self.image_current_row,self.num_pixels-1-x,colour) + x += 1 + self.image_current_row += 1 + else: + print("line " + str(self.image_current_row) + "incomplete (" + str(len(words)) + " of " + str(self.num_pixels) + "), ignoring") + #print("bad line: " + line); + + if( line.find("image data") >= 0 ): + self.line_processed = TRUE + self.image_started = TRUE + self.image_current_row = 0 + # clear canvas + #self.canvas.delete(ALL) # remove all items + + #display the line if we couldn't understand it + if( self.line_processed == FALSE ): + print( line ) + + def display_default_image(self): + # display the grid + for x in range(0, self.num_pixels-1): + for y in range(0, self.num_pixels-1): + colour = x * y / 3.53 + self.display_pixel(x,y,colour) + + def display_pixel(self, x, y, colour): + if( x >= 0 and x < self.num_pixels and y >= 0 and y < self.num_pixels ) : + + #find the old pixel if it exists and delete it + if self.pixel_dictionary.has_key(x+y*self.num_pixels) : + self.old_pixel = self.pixel_dictionary[x+y*self.num_pixels] + self.canvas.delete(self.old_pixel) + del(self.old_pixel) + + fillColour = "#%02x%02x%02x" % (colour, colour, colour) + #draw a new pixel and add to pixel_array + self.new_pixel = self.canvas.create_rectangle(x*self.grid_size, y*self.grid_size, (x+1)*self.grid_size, (y+1)*self.grid_size, fill=fillColour) + self.pixel_dictionary[x+y*self.num_pixels] = self.new_pixel + + +## main loop ## + +root = Tk() +#root.withdraw() +#serPort = SerialHandler(comPort,comPortBaud) + +# create main display +app = App(root) +app.display_default_image() + +print("entering main loop!") + +root.mainloop() + +app.stop_read_loop() + +print("exiting") diff --git a/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/README.txt b/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/README.txt index 8992d2b3ee..8de7393bb0 100644 --- a/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/README.txt +++ b/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/README.txt @@ -1,11 +1,11 @@ -Instructions for running the ADNS3080ImageGrabber.py - -1. Start Arduino and upload the AP_OpticalFlow_test.pde to the APM -2. Install Python 2.7 from http://www.python.org/getit/ -3. Start the Python IDLE editor -4. File, Open, .../arduino-0022/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py -5. Run, Run Module - the Python Shell and then ADNS3080ImageGrabber applications should appear -6. on the ADNS3080ImageGrabber screen, change the default com port, "COM8" to the correct port (sorry, doesn't auto detect) -7. wait a few moments, then push the Send button to start/stop grabbing images from the sensor (a new image should appear every 2 seconds) - +Instructions for running the ADNS3080ImageGrabber.py + +1. Start Arduino and upload the AP_OpticalFlow_test.pde to the APM +2. Install Python 2.7 from http://www.python.org/getit/ +3. Start the Python IDLE editor +4. File, Open, .../arduino-0022/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py +5. Run, Run Module - the Python Shell and then ADNS3080ImageGrabber applications should appear +6. on the ADNS3080ImageGrabber screen, change the default com port, "COM8" to the correct port (sorry, doesn't auto detect) +7. wait a few moments, then push the Send button to start/stop grabbing images from the sensor (a new image should appear every 2 seconds) + Note: you should see the the AP_OpticalFlow_ADNS3080's menu and any errors appear in the Python Shell \ No newline at end of file diff --git a/libraries/AP_OpticalFlow/keywords.txt b/libraries/AP_OpticalFlow/keywords.txt index 8393f31ece..226c8a217b 100644 --- a/libraries/AP_OpticalFlow/keywords.txt +++ b/libraries/AP_OpticalFlow/keywords.txt @@ -1,26 +1,26 @@ -AP_OpticalFlow KEYWORD1 -AP_OpticalFlow_ADNS3080 KEYWORD1 -AP_OpticalFlow_ADNS3080_APM2 KEYWORD1 -init KEYWORD2 -read KEYWORD2 -update KEYWORD2 -read_register KEYWORD2 -write_register KEYWORD2 -reset KEYWORD2 -motion KEYWORD2 -get_led_always_on KEYWORD2 -set_led_always_on KEYWORD2 -get_resolution KEYWORD2 -set_resolution KEYWORD2 -get_frame_rate_auto KEYWORD2 -set_frame_rate_auto KEYWORD2 -get_frame_period KEYWORD2 -set_frame_period KEYWORD2 -get_frame_rate KEYWORD2 -set_frame_rate KEYWORD2 -get_shutter_speed_auto KEYWORD2 -set_shutter_speed_auto KEYWORD2 -get_shutter_speed KEYWORD2 -set_shutter_speed KEYWORD2 -clear_motion KEYWORD2 +AP_OpticalFlow KEYWORD1 +AP_OpticalFlow_ADNS3080 KEYWORD1 +AP_OpticalFlow_ADNS3080_APM2 KEYWORD1 +init KEYWORD2 +read KEYWORD2 +update KEYWORD2 +read_register KEYWORD2 +write_register KEYWORD2 +reset KEYWORD2 +motion KEYWORD2 +get_led_always_on KEYWORD2 +set_led_always_on KEYWORD2 +get_resolution KEYWORD2 +set_resolution KEYWORD2 +get_frame_rate_auto KEYWORD2 +set_frame_rate_auto KEYWORD2 +get_frame_period KEYWORD2 +set_frame_period KEYWORD2 +get_frame_rate KEYWORD2 +set_frame_rate KEYWORD2 +get_shutter_speed_auto KEYWORD2 +set_shutter_speed_auto KEYWORD2 +get_shutter_speed KEYWORD2 +set_shutter_speed KEYWORD2 +clear_motion KEYWORD2 print_pixel_data KEYWORD2 \ No newline at end of file