# 1bach TecnoIngeniería
## Extensiones del Home en Tecnolinux
Pegar este código en CUSTOM/profile.sh de tu PenDrive Personalizado
```bash
################
# Extensiones del home
montaExtensionRW(){
# monta extensión en modo RW pero no de forma persistente
EXTENSION=$1
MNT=$2
EXTDIR=/tmp/Extensions
#EXTDIR=/var/Extensions
SHORT=$(basename "${EXTENSION}" ".homeExtension")
RO=${EXTDIR}/RO_${SHORT}; mkdir -pv $RO
RW=${EXTDIR}/RW_${SHORT}; mkdir -pv $RW
# el nombre sustituye dot y slash
C="${SHORT//slash/\/}"
C="${C//dot/.}"
MNT=$MNT/$C; mkdir -pv $MNT
echo "montando EXTENSION: $EXTENSION SHORT: $SHORT"
echo "RW: $RW RO: $RO "
echo "MNT: $MNT"
if ! grep $RO /etc/mtab; then
echo "montando squashfs RW"
sudo mount -o loop $EXTENSION $RO
unionfs-fuse -o allow_other,cow ${RW}=RW:${RO}=RO $MNT
fi
}
## monta extensiones del home
if [ -d "${CUSTOM}/Extensions" ]; then
EXTENSIONS=$(find $CUSTOM/Extensions/ -type f -name *.homeExtension)
for EXTENSION in $EXTENSIONS ; do
montaExtensionRW "$EXTENSION" $HOME
done
fi
```
## Creando una extensión para Mu Editor
De esta forma se acelera considerablemente el inicio de la aplicación y guarda nuestras configuraciones
1. Arrancar Mu Editor y ajustar la configuración deseada
2. Estando en el pendrive Custom, copiar el siguiente código en un terminal:
```bash
EXT=/home/me/CUSTOM/Extensions; mkdir -pv $EXT
cd /
mksquashfs /home/me/.local/share/mu $EXT/dotlocalslashshareslashmu.homeExtension
```
----
# P03 Digital Output: Intermitente
Configurar un intermitente, un LED que se encienda y apague
## Instrucciones Generales
1. Dibuja diagrama de flujo para razonar
2. Dibuja diagrama de conexionado
3. Realiza el montaje del hardware
4. A partir del diagrama de flujo, elabora el código
5. Recuerda que el código ha de sobre-escribir `code.py` en la unidad CIRCUITPY, y que se lanzará cada vez que se salve. Recuerda guardar el codigo anterior en tu PenDrive para entregarlo.
6. Realiza alguna foto y o video del sistema funcionando
7. Incorpora todos los documentos en una memoria. Puedes usar obsidian para tener todo enlazado y de ahí exportar la memoria para entregar
## Enlaces de Interés
- [Ejemplo adafruit digitalio](https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/CircuitPython_Essentials/CircuitPython_Digital_In_Out/code.py)
- [Docs circuitPython digitalio](https://docs.circuitpython.org/en/latest/shared-bindings/digitalio/index.html)
- [Ejemplo NeoPixel](https://www.youtube.com/watch?v=LSH2gFnl2nw)
- https://learn.adafruit.com/welcome-to-circuitpython/circuitpython-libraries
-

- [Info librería digitalio](https://docs.circuitpython.org/en/latest/shared-bindings/digitalio/index.html)
## Solución
### Diagrama de Flujo

Diagramas disponibles [aquí](https://excalidraw.com/#json=kQ4Y0GcZYnASGyAYqMYIl,8uufXdSNHO2xSEGUZExJMw)
```python
import board
print(dir(board)) #muestra las propiedades (pines) de la tarjeta
from digitalio import DigitalInOut, Direction, DriveMode
import time
print("Encendiendo un LED intermitentemente")
print("Jesús L. Alvaro 10 de mayo de 2023")
# SETUP
LED= DigitalInOut(board.IO4) # define LED como el pin IO4
LED.direction = Direction.OUTPUT #Configura pin como salida
LED.drive_mode = DriveMode.PUSH_PULL #Ambos valores
# MAIN LOOP
while True:
LED.value = True # enciende LED
print("ON") # escribe en la consola ON como comprobación
time.sleep(1.3) # espera un tiempo
LED.value = False # apaga el LED
print("OFF") # nuevamente escribe en consola
time.sleep(1.3 ) # espera, de nuevo
```
----
# P04 Digital Input
Cómo detectar el Digital Input a través del Touch
- Encender el LED sólo cuando detecte el Touch en otra entrada, pej `IO6`
Las entradas y salidas de propósito general (GPIO) pueden configurarse como sensores de touch o proximidad.
Para usar el modo TOUCH de cada pin debemos:
1. Importar la librería touchio
2. Definir la entrada touch correspondiente `touchio.TouchIn(board.IO6)`
3. Leer el valor de la entrada usando la propiedad `.value`
[Un ejemplo de uso](https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/f948c681b2d65773492cf4dbc072a447da025aca/Introducing_CircuitPlaygroundExpress/CircuitPlaygroundExpress_CapTouch/code.py)
Antes de escribir el código, recuerda dibujar el diagrama de flujo para razonar
## Ampliación
usa una pista de grafito dibujada con con un lápiz sobre papel, para comprobar la sensibilidad del sensor. Usa esta idea para imaginar cómo podrías usar esta prestación

----
# P05 Touch con estado
Usa una variable de estado para que cada vez que se toque, cambie el LED de encendido a apagado y viceversa
----
# P06 Zumbador Piezo-eléctrico
Modifica la práctica anterior para activar un zumbador, a la vez que se enciende el LED, al tocar la entrada
, y sólo mientras se está tocando
- [Inspiración](https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/eaca43ce6f204731481618fa17c1424ebd6f9892/Annoy_O_Matic/code.py)
---
# P07 Auto S.O.S Morse
Programa la tarjeta para que emita una señal SOS en Morse de forma continuada cada 10 segundos
https://circuitpython.org/libraries