PYTHON

Micro:bit admite varios lenguajes de programación y uno de ellos es Phyton. Os mostramos algunos ejemplo para que os ayuden a familiarizaros con este lenguaje de programación.

HOLA MUNDO

OBJETIVO: Mostrar un texto en la placa micro:bit

CÓDIGO:

from microbit import *
while True:
    display.scroll('Hola Microlog')
    sleep(2000)

DIBUJA UN CORAZÓN

OBJETIVO: Mostrar en la placa micro:bit el dibujo de un corazón

CÓDIGO:

from microbit import *
while True:
    display.show(Image.HEART)
    sleep(2000)

DIBUJA UNA IMAGEN PERSONALIZADA

OBJETIVO: Mostrar en la placa micro:bit un dibujo diseñado por nosotros. Utilizamos la instrucción Image. A esta instrucción le introducimos como parámetros 5 códigos. Cada código representa una fila de leds de la matriz. Cada uno de estos 5 códigos contiene 5 dígitos que representan cada led de una fila de la matriz. Si introducimos el dígito 9, indicamos que ese led estará encendido. Si introducimos el dígito 0, el led estará apagado.

CÓDIGO:

from microbit import *
boat = Image("09090:09090:09090:99999:09990")
display.show(boat)

ANIMACIÓN

OBJETIVO: Crear varias imágenes que se visualicen una detrás de otra con un breve espacio de tiempo entre ellas.

 

CÓDIGO:

from microbit import *
while True:
face1 = Image("00000:09090:00000:90009:09990")
face2 = Image("00000:09090:00000:99999:00000")
face3 = Image("00000:09090:00000:09990:90009")
face4 = Image("90009:99099:00000:09990:90009")
face5 = Image("00000:00000:00000:00000:00000")
all_faces = [face1, face2. face3, face4, face5, ]
display.show(all_faces, delay=200)

 

PULSADORES

OBJETIVO: Al presionar el pulsador A se muestra una cara contenta y al presionar el pulsador B se muestra una cara triste

CÓDIGO:

from microbit import *
while True:
    if button_a.is_pressed():
       display.show(Image.HAPPY)
    elif button_b.is_pressed():
       display.show(Image.SAD)
display.clear()

ENTRADAS

OBJETIVOS: Coloca un latiguillo cocodrilo en la conexión GND y otro en el conector 1. Microbit muestra una cara triste y al tocar con tu mano las puntas no conectadas de ambos latiguillos, microbit mostrará una cara contenta

CÓDIGO:

from microbit import *
while True:
if pin1.is_touched():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)

SALIDAS

OBJETIVO: Conectar un led a micro:bit, uniendo la pata positiva al pin 1 y la negativa a GND. Microbit hará que el led parpadee

CÓDIGO:

from microbit import *
while True:
    pin1.write_digital(1)
    sleep(480)
    pin1.write_digital(0)
    sleep(480)

ACELERÓMETRO

OBJETIVO: Utilizando el acelerómetro, muestra un ángulo que nos indica hacia qué lado se ha inclinado al placa microbit

CÓDIGO:

from microbit import *
while True:
    reading = accelerometer.get_x()
    if reading > 20:
        display.show(">")
    elif reading < -20:
        display.show("<")
    else:
        display.show("-")

ENCIENDE LOS LEDS RGB DEL COCHE MICRO:BIT

OBJETIVO: Encender los Leds RGB del coche micro:bit

CÓDIGO

from microbit import *
import neopixel
display.show(Image.HAPPY)
np = neopixel.NeoPixel(pin 16, 3)
while True:
for pixel_id in range(0, len(np)):
np[0] = (255, 0, 0)
np.show()
sleep(200)
np.clear()
np[1] = (0, 255, 255)
np.show()
sleep(200)
np.clear()
np[2] = (0, 0, 255)
np.show()
sleep(200)
np.clear()
np[0] = (255, 255, 0)
np.show()
sleep(200)
np.clear()
np[1] = (0, 255, 0)
np.show()
sleep(200)
np.clear()
np[2] = (255, 0, 255)
np.show()
sleep(200)
np.clear()

AVANCE

OBJETIVO: Programar el coche microbit para que avance recto

CÓDIGO:

import ustruct
import math

# Registers/etc:
PCA9685_ADDRESS = 0x41
MODE1 = 0x00
MODE2 = 0x01
SUBADR1 = 0x02
SUBADR2 = 0x03
SUBADR3 = 0x04
PRESCALE = 0xFE
LED0_ON_L = 0x06
LED0_ON_H = 0x07
LED0_OFF_L = 0x08
LED0_OFF_H = 0x09
ALL_LED_ON_L = 0xFA
ALL_LED_ON_H = 0xFB
ALL_LED_OFF_L = 0xFC
ALL_LED_OFF_H = 0xFD

# Bits:
RESTART = 0x80
SLEEP = 0x10
ALLCALL = 0x01
INVRT = 0x10
OUTDRV = 0x04
RESET = 0x00


class PCA9685():
«»»PCA9685 PWM LED/servo controller.»»»

def __init__(self, address=PCA9685_ADDRESS):
«»»Initialize the PCA9685.»»»
self.address = address
i2c.write(self.address, bytearray([MODE1, RESET]))
self.set_all_pwm(0, 0)
i2c.write(self.address, bytearray([MODE2, OUTDRV]))
i2c.write(self.address, bytearray([MODE1, ALLCALL]))
sleep(5) # wait for oscillator
i2c.write(self.address, bytearray([MODE1]))
mode1 = i2c.read(self.address, 1)
mode1 = ustruct.unpack(‘<H’, mode1)[0]
mode1 = mode1 & ~SLEEP # wake up (reset sleep)
i2c.write(self.address, bytearray([MODE1, mode1]))
sleep(5) # wait for oscillator

def set_pwm_freq(self, freq_hz):
«»»Set the PWM frequency to the provided value in hertz.»»»
prescaleval = 25000000.0 # 25MHz
prescaleval /= 4096.0 # 12-bit
prescaleval /= float(freq_hz)
prescaleval -= 1.0
# print(‘Setting PWM frequency to {0} Hz’.format(freq_hz))
# print(‘Estimated pre-scale: {0}’.format(prescaleval))
prescale = int(math.floor(prescaleval + 0.5))
# print(‘Final pre-scale: {0}’.format(prescale))
i2c.write(self.address, bytearray([MODE1]))
oldmode = i2c.read(self.address, 1)
oldmode = ustruct.unpack(‘<H’, oldmode)[0]
newmode = (oldmode & 0x7F) | 0x10 # sleep
i2c.write(self.address, bytearray([MODE1, newmode])) # go to sleep
i2c.write(self.address, bytearray([PRESCALE, prescale]))
i2c.write(self.address, bytearray([MODE1, oldmode]))
sleep(5)
i2c.write(self.address, bytearray([MODE1, oldmode | 0x80]))

def set_pwm(self, channel, on, off):
«»»Sets a single PWM channel.»»»
if on is None or off is None:
i2c.write(self.address, bytearray([LED0_ON_L+4*channel]))
data = i2c.read(self.address, 4)
return ustruct.unpack(‘<HH’, data)
i2c.write(self.address, bytearray([LED0_ON_L+4*channel, on & 0xFF]))
i2c.write(self.address, bytearray([LED0_ON_H+4*channel, on >> 8]))
i2c.write(self.address, bytearray([LED0_OFF_L+4*channel, off & 0xFF]))
i2c.write(self.address, bytearray([LED0_OFF_H+4*channel, off >> 8]))

def set_all_pwm(self, on, off):
«»»Sets all PWM channels.»»»
i2c.write(self.address, bytearray([ALL_LED_ON_L, on & 0xFF]))
i2c.write(self.address, bytearray([ALL_LED_ON_H, on >> 8]))
i2c.write(self.address, bytearray([ALL_LED_OFF_L, off & 0xFF]))
i2c.write(self.address, bytearray([ALL_LED_OFF_H, off >> 8]))

def duty(self, index, value=None, invert=False):
if value is None:
pwm = self.set_pwm(index)
if pwm == (0, 4096):
value = 0
elif pwm == (4096, 0):
value = 4095
value = pwm[1]
if invert:
value = 4095 – value
return value
if not 0 <= value <= 4095:
raise ValueError(«Out of range»)
if invert:
value = 4095 – value
if value == 0:
self.set_pwm(index, 0, 4096)
elif value == 4095:
self.set_pwm(index, 4096, 0)
else:
self.set_pwm(index, 0, value)


# Initialise the PCA9685 using the default address (0x41).
pwm = PCA9685()

# Configure min and max servo pulse lengths
servo_min = 150 # Min pulse length out of 4096 0?
servo_max = 600 # Max pulse length out of 4096: 180?


# Set frequency to 60hz, good for servos.
pwm.set_pwm_freq(60)

display.show(Image.HAPPY)


pwm.set_pwm(12, 0, 4095)
pwm.set_pwm(13, 0, 0)
pwm.set_pwm(15, 0, 4095)
pwm.set_pwm(14, 0, 0)

pwm.set_pwm(3, 0, servo_min)
sleep(1000)
pwm.set_pwm(3, 0, servo_max)
sleep(1000)