micro:bit apertura con password

Per azionare il motore che apre la porta, occorre inserire la password pre-impostata (AABAA) premendo i bottoni A e B del micro:bit. Per confermare la password occorre premere contemporaneamente i bottoni A + B. Se la password è giusta, compare il segno di spunta e la porta si apre; altrimenti compare una X ed è possibile riprovare.

Quando compare il segno di spunta, è possibile inserire una nuova password premendo i bottoni A e B, confermando l’inserimento premendo contemporaneamente A + B. La nuova password viene visualizzata una volta prima di diventare attiva.

Per chiudere la porta, occorre premere insieme A + B senza inserire password.

Ovviamente, ogni volta che si riaccende il micro:bit si riparte dalla password pre-impostata.

Il codice in Python:

def on_button_pressed_a():
    global tentativo, nuovapassword
    if stato == "inserimento":
        tentativo = "" + tentativo + "A"
    else:
        nuovapassword = "" + nuovapassword + "A"
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_ab():
    global nuovapassword, stato, tentativo, password
    if stato == "inserimento":
        if tentativo == password:
            basic.show_icon(IconNames.YES)
            pins.servo_write_pin(AnalogPin.P0, 90)
            nuovapassword = ""
            stato = "modifica"
        else:
            basic.show_icon(IconNames.NO)
            stato = "inserimento"
            pins.servo_write_pin(AnalogPin.P0, 0)
        basic.pause(500)
        basic.clear_screen()
        tentativo = ""
    else:
        password = nuovapassword
        basic.show_string("" + (password))
        stato = "inserimento"
input.on_button_pressed(Button.AB, on_button_pressed_ab)

def on_button_pressed_b():
    global tentativo, nuovapassword
    if stato == "inserimento":
        tentativo = "" + tentativo + "B"
    else:
        nuovapassword = "" + nuovapassword + "B"
input.on_button_pressed(Button.B, on_button_pressed_b)

nuovapassword = ""
stato = ""
tentativo = ""
password = ""
password = "AABAA"
tentativo = ""
stato = "inserimento"
nuovapassword = ""
pins.servo_write_pin(AnalogPin.P0, 0)

Scratch: robot autonomo (line follower)

Il progettino della domenica è un robottino in grado di seguire una traccia. Scopo del gioco: per ogni percorso, trovare il giusto compromesso tra angolo, velocità, dimensioni e posizione dei sensori per battere il record su 10 giri, senza uscire di strada.

Durante il Devoxx4kids di Lugano ho usato una versione molto semplificata; questa invece ha un sacco di possibili impostazioni:

  • Scegliere il percorso: tasti da 1 a 5
  • Modificare la velocità: frecce SU/GIU
  • Modificare l’angolo di sterzata: frecce SINISTRA/DESTRA
  • Attivare/disattivare la traccia: tasto P
  • Visualizzare i record: tasto R
  • Partenza: SPAZIO

Premendo spazio il robot parte e compie 10 giri. Se riesce a compierli in tempo record per il percorso corrente, il progetto registra e mostra tempo, velocità e angolo di sterzata che hanno prodotto quel risultato.

Sviluppando questo progetto mi sono scontrato con una seria lacuna di Scratch: la gestione degli array. Dovendo creare una tabella di 3 colonne per 5 righe, me la sono cavata creando 3 liste da 5 elementi ognuna, ma non sono molto contento.