尝试通过i2C将覆盆子pi中的Mouse xy坐标发送到连接的arduino。
以下Python脚本适用于RPi
import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
def writeNumber(value):
bus.write_byte(address, value)
# bus.write_byte_data(address, 0, value)
return -1
def readNumber():
number = bus.read_byte(address)
# number = bus.read_byte_data(address, 1)
return number
while True:
var = input("Enter 1 - 9: ")
if not var:
continue
writeNumber(var)
print "RPI: Hi Arduino, I sent you ", var
# sleep one second
#time.sleep(1)
number = readNumber()
print "Arduino: Hey RPI, I received a digit ", number
print
但是当我尝试将上面的代码与预先存在的Python类合并为鼠标XY坐标时,我在writeNumber方法上不断出现IO错误,特别是在以下行中
self.bus.write_byte(self.address, value)
这是完整的Python类。任何Python专家都可以建议可能出现的问题,或者我可能采取哪些故障排除步骤来解决IO错误?
try:
# Python2
import Tkinter as tk
import smbus
import time
except ImportError:
# Python3
import tkinter as tk
class MouseXY(object):
def __init__(self, root):
self._root = root
# for RPI version 1, use "bus = smbus.SMBus(0)"
self.bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
self.address = 0x04
self.createCanvas()
def createCanvas(self):
canvas = tk.Canvas(self._root, bg='white')
canvas.grid(column=0, row=1, sticky='nwes')
canvas.bind("<Button-1>", self.clicked)
canvas.bind("<Enter>", self.entered)
canvas.bind('<Motion>', self.motion)
def clicked(self, event):
x, y = event.x, event.y
s = "Last point clicked at x=%s y=%s" % (x, y)
self._root.title(s)
print('{}, {}'.format(x, y))
def entered(self, event):
x, y = event.x, event.y
s = "Cursor at x=%s y=%s" % (x, y)
self._root.title(s)
def motion(self,event):
x, y = event.x, event.y
print('{}, {}'.format(x, y))
self.writeNumber(x)
print "RPI: Hi Arduino, I sent you ", x
print
def writeNumber(self,value):
print "writeNumber self.bus ", self.bus
print "writeNumber self.address ", self.address
print "writeNumber value ", value
self.bus.write_byte(self.address, value)
return -1
def createFunction():
pass
def main():
root = tk.Tk()
app = MouseXY(root)
root.mainloop()
if __name__ == '__main__':
main()