初始化提交
This commit is contained in:
174
boards/default/micropython_robot/build/lib/rm_e1.py
Normal file
174
boards/default/micropython_robot/build/lib/rm_e1.py
Normal file
@@ -0,0 +1,174 @@
|
||||
"""
|
||||
RM E1 -Onboard resources
|
||||
|
||||
MicroPython library for the RM E1 -Onboard resources
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20220703
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time,gc
|
||||
#import ble_handle
|
||||
from machine import Pin,SoftI2C,ADC,PWM,RTC
|
||||
|
||||
'''Bluetooth-handle'''
|
||||
#handle=ble_handle.Handle()
|
||||
|
||||
'''i2c-onboard'''
|
||||
onboard_i2c=SoftI2C(scl = Pin(22), sda = Pin(21), freq = 400000)
|
||||
|
||||
'''RTC'''
|
||||
rtc_clock=RTC()
|
||||
|
||||
'''ACC-Sensor'''
|
||||
class ACC:
|
||||
def __init__(self,i2c_bus):
|
||||
self._device = i2c_bus
|
||||
self._address = 0x09
|
||||
|
||||
def _rreg(self,nbytes):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom(self._address, nbytes)
|
||||
|
||||
def acceleration(self):
|
||||
data_reg=self._rreg(3)
|
||||
return data_reg[0],data_reg[1],data_reg[2] #返回x y轴数值(0~180)及晃动值
|
||||
|
||||
try :
|
||||
gyro=ACC(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with ACC or",e)
|
||||
|
||||
'''2RGB_WS2812''' #color_chase(),rainbow_cycle()方法移至类里
|
||||
from ws2812 import NeoPixel
|
||||
onboard_rgb = NeoPixel(Pin(12), 2, default=1)
|
||||
|
||||
'''3-Button'''
|
||||
class Button:
|
||||
def __init__(self, pin):
|
||||
self._pin = Pin(pin, Pin.IN)
|
||||
self._flag = True
|
||||
|
||||
def get_presses(self, delay = 1):
|
||||
last_time,presses = time.time(), 0
|
||||
while time.time() < last_time + delay:
|
||||
time.sleep(0.05)
|
||||
if self.was_pressed():
|
||||
presses += 1
|
||||
return presses
|
||||
|
||||
def is_pressed(self):
|
||||
return self._pin.value() == False
|
||||
|
||||
def was_pressed(self):
|
||||
if self._pin.value() != self._flag:
|
||||
time.sleep(0.01)
|
||||
self._flag = self._pin.value()
|
||||
if self._flag:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def irq(self, handler, trigger):
|
||||
self._pin.irq(handler = handler, trigger = trigger)
|
||||
|
||||
button_p = Button(35)
|
||||
button_cw = Button(39)
|
||||
button_ccw = Button(36)
|
||||
|
||||
'''3-ADCSensor'''
|
||||
class ADCSensor:
|
||||
def __init__(self, pin):
|
||||
self._adc=ADC(Pin(pin))
|
||||
self._adc.atten(ADC.ATTN_11DB)
|
||||
|
||||
def read(self):
|
||||
return self._adc.read_u16()
|
||||
|
||||
def voltage(self):
|
||||
return round(self._adc.read_uv()*4.6/1000000,2)
|
||||
|
||||
adc1=ADCSensor(32)
|
||||
adc2=ADCSensor(33)
|
||||
|
||||
'''ADC conflicts with WiFi'''
|
||||
try:
|
||||
battery=ADCSensor(26)
|
||||
except:
|
||||
class Clash:
|
||||
def voltage(self):
|
||||
print("Warning: battery power collection conflicts with WiFi")
|
||||
return None
|
||||
battery=Clash()
|
||||
|
||||
'''2-LED''' #Repair brightness adjustment range 0-100%
|
||||
class LED:
|
||||
def __init__(self, pin):
|
||||
self._pin =PWM(Pin(pin),freq=5000,duty_u16=0)
|
||||
self.setbrightness(0)
|
||||
|
||||
def value(self, val):
|
||||
self.setonoff(val)
|
||||
|
||||
def setbrightness(self,val):
|
||||
if not 0 <= val <= 100:
|
||||
raise ValueError("Brightness must be in the range: 0-100%")
|
||||
self._brightness=val
|
||||
self._pin.duty_u16(val*65535//100)
|
||||
|
||||
def getbrightness(self):
|
||||
return self._brightness
|
||||
|
||||
def setonoff(self,val):
|
||||
if(val == -1):
|
||||
self.setbrightness(100) if self._brightness<50 else self.setbrightness(0)
|
||||
elif(val == 1):
|
||||
self.setbrightness(100)
|
||||
elif(val == 0):
|
||||
self.setbrightness(0)
|
||||
|
||||
def getonoff(self):
|
||||
return True if self._brightness>0 else False
|
||||
|
||||
rled = LED(2)
|
||||
gled = LED(4)
|
||||
|
||||
'''3-Motor'''
|
||||
class Motor:
|
||||
def __init__(self, apin,bpin):
|
||||
self._apin =PWM(Pin(apin),freq=5000,duty_u16=65535)
|
||||
self._bpin =PWM(Pin(bpin),freq=5000,duty_u16=65535)
|
||||
self.motion("P")
|
||||
|
||||
def motion(self,action,speed=0):
|
||||
if action=="N":
|
||||
self._apin.duty_u16(0)
|
||||
self._bpin.duty_u16(0)
|
||||
elif action=="P":
|
||||
self._apin.duty_u16(65535)
|
||||
self._bpin.duty_u16(65535)
|
||||
elif action=="CW":
|
||||
if speed >=0:
|
||||
self._apin.duty_u16(speed*65535//100)
|
||||
self._bpin.duty_u16(0)
|
||||
else:
|
||||
self._apin.duty_u16(0)
|
||||
self._bpin.duty_u16(-speed*65535//100)
|
||||
elif action=="CCW":
|
||||
if speed >=0:
|
||||
self._apin.duty_u16(0)
|
||||
self._bpin.duty_u16(speed*65535//100)
|
||||
else:
|
||||
self._apin.duty_u16(-speed*65535//100)
|
||||
self._bpin.duty_u16(0)
|
||||
else:
|
||||
raise ValueError('Invalid input, valid are "N","P","CW","CCW"')
|
||||
|
||||
motor1=Motor(23,27)
|
||||
motor2=Motor(18,19)
|
||||
motor3=Motor(13,14)
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
Reference in New Issue
Block a user