Tecnologia vestible

Per començar Elements d'entrada Programació CircuitPython   Recursos CITCEA
Elements no electrònics Elements de sortida Programació Arduino    
Projectes Elements de control Dades pràctiques   Inici

Estructura d'un programa

Un programa en CircuitPython no té, d'entrada, una estructura definida. Només cal que els elements que el programa va necessitant (variables, funcions, etc. estiguin definits abans de fer-los servir. Malgrat el que acabem de comentar, és bo ordenar els elements del programa seguint una estructura ja que així es facilita la comprensió, la modificació i la detecció d'errors.

A continuació anem a comentar l'estructura que se sol fer servir. Algunes d'aquestes parts hi han de ser sempre i altres només les posarem quan siguin necessàries. En els nostres exemples, les diferents parts aniran marcades amb un fons de color diferent per a cada una que permetrà identificar-les.

Càrrega de biblioteques i definicions generals

Sovint el nostre programa requerirà la càrrega de biblioteques externes. Aquestes biblioteques contenen funcions que han estat desenvolupades per altres però que nosaltres podem aprofitar. Molts dels elements d'entrada o sortida que podem connectar a la nostra placa de control van acompanyats de biblioteques que permeten fer-los servir sense complicacions. No podem fer servir cap funció si no la definim o bé carreguem la biblioteca que la conté. En el següent exemple s'inclou la biblioteca dels elements propis de la placa que anem a programar.

import board

Creació d'objectes

Els elements d'entrada i sortida requereixen que es crei un objecte per a cada un d'ells. També pot ser necessari crear altres objectes. Els objectes es solen crear a l'inici del programa perquè siguin fàcils de trobar. Han d'estar després de la càrrega de biblioteques perquè poden fer servir elements d'aquestes.

dotstar = busio.SPI(board.APA102_SCK, board.APA102_MOSI)

Inicialització de variables generals

Aquí inicialitzarem aquelles variables generals que podem fer servir en qualsevol lloc del programa. Això no treu que al llarg del programa no poguem definir altres variables per a un ús més puntual. Un exemple:

pausa = 0.6

Definició de funcions

Les funcions s'han de definir abans de fer-les servir. És convenient posar-les totes juntes perquè siguin fàcils de trobar. Han d'estar després de la inicialització de variables generals i de la creació d'objectes perquè els poden fer servir.

def setPixel(red, green, blue):
    if not dotstar.try_lock():
        return
    valors = bytearray([0, 0, 0, 0, 255, blue, green, red, 255, 255, 255, 255])
    dotstar.write(valors)
    dotstar.unlock()
    time.sleep(pausa)

Instruccions del programa

Finalment cal posar les instruccions pròpies del programa. En el cas dels microcontroladors, tot el programa o la major part d'aquest es repeteix cíclicament. En el següent exemple hi ha un bucle while que té una condició sempre certa i, per tant, es repetirà indefinidament (fins que es desconnecti l'alimentació o es carregui un nou programa.

while True:
        # Bucle que es repeteix indefinidament
    setPixel(255, 0, 0)      # Vermell
    setPixel(0, 255, 0)      # Verd
    setPixel(0, 0, 255)      # Blau
    setPixel(255, 255, 0)    # Groc
    setPixel(255, 0, 255)    # Magenta
    setPixel(0, 255, 255)    # Cian
    setPixel(255, 255, 255)  # Blanc

Comentaris

En qualsevol part del programa podem posar comentaris. Els comentaris ens permeten posar un text explicatiu que serà ignorat pel microcontrolador. Els comentaris van precedits pel signe # i poden estar a la dreta d'una línia; o ocupar la línia sencera.

No està totalment normalitzat però molts intèrprets de CircuitPython consideren un comentari de diverses línies si comença amb tres cometes seguides (""" o ''') i acaba amb les mateixes cometes que ha començat.

while True:
        # Comentari d'una línia
    setPixel(255, 0, 0)      # Comentari a final de línia
"""
    Comentari
"""
    setPixel(0, 255, 255)
'''
    Comentari
'''
    setPixel(0, 0, 255)

A continuació tenim un programa complet que inclou totes les parts comentades.

import busio
import board
import time
dotstar = busio.SPI(board.APA102_SCK, board.APA102_MOSI)
pausa = 0.6
def setPixel(red, green, blue):
    if not dotstar.try_lock():
        return
    valors = bytearray([0, 0, 0, 0, 255, blue, green, red, 255, 255, 255, 255])
    dotstar.write(valors)
    dotstar.unlock()
    time.sleep(pausa)
while True:
        # Bucle que es repeteix indefinidament
    setPixel(255, 0, 0)      # Vermell
    setPixel(0, 255, 0)      # Verd
    setPixel(0, 0, 255)      # Blau
    setPixel(255, 255, 0)    # Groc
    setPixel(255, 0, 255)    # Magenta
    setPixel(0, 255, 255)    # Cian
    setPixel(255, 255, 255)  # Blanc

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.