import time from machine import u2if, ADC analog = ADC(u2if.GP26) while True: print('Analog GP26_ADC0: %d' % analog.value()) time.sleep(1)
class PowerUp3: def __init__(self): self.x_adc = ADC(1) self.btn_speed_up = Pin("P13", mode=Pin.IN, pull=Pin.PULL_UP) self.btn_speed_down = Pin("P15", mode=Pin.IN, pull=Pin.PULL_UP) self.btn_speed_full = Pin("P14", mode=Pin.IN, pull=Pin.PULL_UP) self.btn_speed_off = Pin("P16", mode=Pin.IN, pull=Pin.PULL_UP) self.x_mid = 0 self.calibrate() self.connect() self.loop() def read_stick_x(self): return self.x_adc.value() def button_speed_up(self): return not bool(self.btn_speed_up.value()) def button_speed_down(self): return not bool(self.btn_speed_down.value()) def button_speed_full(self): return not bool(self.btn_speed_full.value()) def button_speed_off(self): return not bool(self.btn_speed_off.value()) def calibrate(self): self.x_mid = self.read_stick_x() def __str__(self): return "calibration x: %i, y: %i" % (self.x_mid) def map_chars(self): s = self.p.getServices() service_batt = s[3] service_control = s[4] self.char_batt_lvl = service_batt.getCharacteristics()[0] self.char_control_speed = service_control.getCharacteristics()[0] self.char_control_angle = service_control.getCharacteristics()[2] def battery_level(self): return int(self.char_batt_lvl.read()[0]) def speed(self, new_speed=None): if new_speed == None: return int(self.char_control_speed.read()[0]) else: self.char_control_speed.write(bytearray([new_speed])) def angle(self, new_angle=None): if new_angle == None: return int(self.char_control_angle.read()[0]) else: self.char_control_angle.write(bytearray([new_angle])) def connect(self): dev = None # connect to the airplane while not dev: dev = find_device_by_name("TailorToys PowerUp") if dev: self.p = Peripheral() self.p.connect(dev.addr()) # locate interesting characteristics self.map_chars() def rudder_center(self): if self.old_angle != 0: self.old_angle = 0 self.angle(0) def rudder_left(self, angle): steps = (angle // self.interval_size_left) new_angle = 60 - steps if self.old_angle != new_angle: self.angle(new_angle) self.old_angle = new_angle def rudder_right(self, angle): steps = (angle // self.interval_size_right) new_angle = -steps if self.old_angle != new_angle: self.angle(new_angle) self.old_angle = new_angle def throttle(self, speed): if (speed > 200): speed = 200 elif (speed < 0): speed = 0 if self.old_speed != speed: self.speed(speed) self.old_speed = speed def loop(self): adc_threshold = 10 right_threshold = self.x_mid + adc_threshold left_threshold = self.x_mid - adc_threshold self.interval_size_left = self.x_mid // 60 self.interval_size_right = (255 - self.x_mid) // 60 self.old_angle = 0 self.old_speed = 0 while True: time.sleep_ms(100) # read out new angle new_angle = self.read_stick_x() if (new_angle < 256): if (new_angle > right_threshold): self.rudder_right(new_angle - self.x_mid) elif (new_angle < left_threshold): self.rudder_left(new_angle) else: self.rudder_center() # read out new speed new_speed = self.old_speed if self.button_speed_up(): new_speed += 25 elif self.button_speed_down(): new_speed -= 25 elif self.button_speed_full(): new_speed = 200 elif self.button_speed_off(): new_speed = 0 else: pass self.throttle(new_speed)
min_voltage = 1380 # 1.38v max_voltage = 1420 # 1.42v elif 'PCA10040' in mch: vdd = 2833 # 2.833v adc_num = 1 # P0.03 min_voltage = 1380 # 1.38v max_voltage = 1420 # 1.42v elif 'PCA10056' in mch: vdd = 2972 adc_num = 1 min_voltage = 1440 max_voltage = 1500 elif 'PCA10090' in mch: pass else: raise Exception('Board not supported!') a = ADC(adc_num) scaler = 1000 num_samples = 100 max_adc_val = 255 val = 0 for i in range(0, num_samples): val += a.value() temp_res = val * scaler res = vdd * temp_res // (num_samples * scaler) // max_adc_val print(res >= min_voltage and res <= max_voltage)
class Reader: def __init__(self, pin): self.channel = ADC().channel(pin=pin) def read(self): return Soil_Sensor.Result({'soil_humidity': self.channel.value()})