├── 010_arduino-iniciacion
├── 00 - Introducción
│ ├── 01 - instalar-ide-arduino.md
│ ├── 02 - nuestro-primer-programa-en-arduino.md
│ └── 04 - referencia-lenguaje-arduino.md
├── 01 - Entradas y salidas
│ ├── 00 - entradas-digitales-en-arduino.md
│ ├── 01 - salidas-digitales-en-arduino.md
│ ├── 02 - entradas-analogicas-en-arduino.md
│ ├── 03 - salidas-analogicas-pwm-en-arduino.md
│ ├── 05 - que-son-y-como-usar-interrupciones-en-arduino.md
│ └── 06 - debounce-interrupciones-arduino.md
├── 02 - Electrónica básica
│ ├── 00 - encender-un-led-con-arduino.md
│ ├── 01 - leer-un-pulsador-con-arduino.md
│ ├── 02 - lectura-de-una-resistencia-variable-con-arduino.md
│ ├── 03 - lectura-de-un-potenciometro-con-arduino.md
│ └── 05 - guardar-variables-entre-reinicios-con-arduino-y-la-memoria-no-volatil-eeprom.md
├── 05 - Comunicación
│ ├── 00 - arduino-puerto-serie.md
│ ├── 01 - arduino-serial-plotter.md
│ ├── 02 - arduino-i2c.md
│ └── 03 - arduino-spi.md
└── 06 - Comunicar con un PC
│ ├── 00 - comunicar-arduino-con-c.md
│ └── 01 - controlar-arduino-con-python-y-la-libreria-pyserial.md
├── 020_arduino-intermedio
├── 00 - Entradas y salidas
│ ├── 01 - usar-un-optointerruptor-con-arduino.md
│ ├── 02 - arduino-encoder-rotativo.md
│ ├── 03 - como-usar-extensor-i2c-tca9548a-y-arduino.md
│ ├── 04 - arduino-mosfet-irf520n.md
│ ├── 05 - arduino-salida-rele.md
│ ├── 06 - arduino-rele-estado-solido-ssr.md
│ ├── 07 - mas-salidas-y-entradas-en-arduino-con-multiplexor-cd74hc4067.md
│ ├── 08 - mas-pines-digitales-con-arduino-y-el-expansor-es-i2c-pcf8574.md
│ ├── 09 - como-controlar-hasta-16-gpio-por-i2c-con-extensor-pcf8575-y-arduino.md
│ ├── 10 - entrada-analogica-adc-de-16-bits-con-arduino-y-ads1115.md
│ ├── 11 - salida-analogica-real-con-arduino-y-dac-de-12bits-mcp4725.md
│ └── 12 - resistencia-variable-con-arduino-y-digipot-mcp41xxx.md
├── 01 - Motores
│ ├── 00 - controlar-un-servo-con-arduino.md
│ ├── 01 - controlar-un-servo-de-rotacion-continua-con-arduino.md
│ ├── 02 - controlar-16-servos-o-16-salidas-pwm-en-arduino-con-pca9685.md
│ ├── 03 - hasta-32-de-servos-en-arduino-con-el-controlador-usc-32.md
│ ├── 04 - arduino-motor-corriente-continua-l298n.md
│ ├── 05 - controla-motores-de-gran-potencia-con-arduino-y-bts7960.md
│ ├── 06 - arduino-motor-dc-tb6612fng.md
│ ├── 07 - motores-paso-paso-arduino-driver-a4988-drv8825.md
│ ├── 08 - motor-paso-paso-28byj-48-arduino-driver-uln2003.md
│ └── 09 - motores-paso-a-paso-en-silencio-con-arduino-y-los-driver-tmc2100-tmc2130-y-tmc2208.md
├── 02 - Actuadores
│ ├── 00 - arduino-actuador-lineal.md
│ ├── 01 - arduino-actuador-electromagnetico.md
│ ├── 02 - diodo-laser-arduino.md
│ ├── 03 - electroiman-arduino.md
│ ├── 04 - arduino-peltier.md
│ └── 05 - controlar-un-ventilador-con-arduino.md
├── 03 - Optico
│ ├── 00 - medir-nivel-luz-con-arduino-y-fotoresistencia-ldr.md
│ ├── 01 - medir-cantidad-de-luxes-con-arduino-y-el-luxometro-bh1750.md
│ ├── 02 - arduino-detector-lineas-tcrt5000l.md
│ ├── 03 - detector-llama-arduino.md
│ ├── 04 - medir-color-arduino-colorimetro-tcs3200.md
│ └── 05 - arduino-sensor-color-rgb-tcs34725.md
├── 04 - Distancia
│ ├── 00 - medir-distancia-con-arduino-y-sensor-de-ultrasonidos-hc-sr04.md
│ ├── 01 - detectar-obstaculos-con-sensor-infrarrojo-y-arduino.md
│ ├── 02 - arduino-sharp-gp2y0a02yk0f.md
│ ├── 03 - medir-distancia-con-arduino-y-el-sensor-gp2y0e03.md
│ └── 04 - arduino-sensor-distancia-vl53l0x.md
├── 05 - Inercial
│ ├── 00 - medir-inclinacion-con-arduino-y-sensor-tilt-sw-520d.md
│ ├── 01 - arduino-acelerometro-adxl345.md
│ ├── 02 - arduino-acelerometro-mma7455.md
│ ├── 03 - arduino-orientacion-imu-mpu-6050.md
│ ├── 04 - brujula-magnetica-con-arduino-compass-digital-hmc5883.md
│ ├── 05 - usar-arduino-con-los-imu-de-9dof-mpu-9150-y-mpu-9250.md
│ └── 06 - usar-arduino-y-el-imu-9-ejes-l3gd20-lsm303d.md
├── 06 - Movimiento
│ ├── 00 - medir-vibracion-con-arduino-y-sensor-sw-18020p.md
│ ├── 01 - detector-de-movimiento-con-arduino-y-sensor-pir.md
│ └── 02 - arduino-detector-movimiento-rcwl-0516.md
├── 07 - Tactil _ Gestos
│ ├── 00 - interruptor-touchless-con-arduino-y-sensor-capacitivo.md
│ ├── 01 - arduino-mpr121.md
│ └── 02 - detectar-gestos-con-arduino-y-sensor-apds-9960.md
├── 08 - Ambiental
│ ├── 00 - medir-temperatura-con-arduino-y-termistor-mf52.md
│ ├── 01 - medir-temperatura-con-arduino-y-sensor-lm35.md
│ ├── 02 - arduino-dht11-dht22.md
│ ├── 03 - usar-el-sensor-de-temperatura-interno-de-arduino.md
│ ├── 04 - medir-presion-del-aire-y-altitud-con-arduino-y-barometro-bmp180.md
│ ├── 05 - medir-temperatura-y-presion-barometrica-con-arduino-y-bmp280.md
│ ├── 06 - arduino-y-el-termometro-infrarrojo-a-distancia-mlx90614.md
│ ├── 07 - arduino-detector-gas-mq.md
│ ├── 08 - sensor-ambiental-arduino-bme280.md
│ ├── 09 - sensor-de-calidad-ambiental-con-arduino-y-bme680.md
│ └── 10 - medir-calidad-del-aire-y-co2-con-ccs811-y-arduino.md
├── 09 - Agua _ Liquidos
│ ├── 00 - arduino-lluvia.md
│ ├── 01 - arduino-humedad-suelo-fc-28.md
│ ├── 02 - sensor-de-humedad-del-suelo-capacitivo-y-arduino.md
│ ├── 03 - temperatura-liquidos-arduino-ds18b20.md
│ ├── 04 - caudal-consumo-de-agua-con-arduino-y-caudalimetro.md
│ └── 05 - bomba-de-agua-con-arduino.md
├── 10 - Intensidad _ Tension
│ ├── 00 - medir-tension-intensidad-y-potencia-con-arduino-y-ina219.md
│ ├── 01 - arduino-intensidad-consumo-electrico-acs712.md
│ ├── 02 - arduino-sensor-corriente-sct-013.md
│ ├── 03 - medir-voltajes-de-hasta-25v-con-arduino-y-fz0430.md
│ ├── 04 - medir-tensiones-de-220v-230v-con-arduino-y-transformador.md
│ └── 05 - arduino-cruce-por-cero-h11aa1.md
├── 11 - Display
│ ├── 00 - matriz-led-arduino-max7219.md
│ ├── 01 - arduino-lcd-hitachi-hd44780.md
│ ├── 02 - arduino-lcd-i2c.md
│ ├── 03 - conectar-arduino-a-un-display-lcd-nokia-5110.md
│ ├── 04 - conectar-arduino-a-una-pantalla-oled-de-0-96.md
│ └── 05 - conectar-arduino-a-una-pantalla-tft.md
├── 12 - Comunicacion
│ ├── 00 - conectar-arduino-por-bluetooth-con-los-modulos-hc-05-o-hc-06.md
│ ├── 01 - arduino-ethernet-shield-w5100.md
│ ├── 02 - arduino-ethernet-enc28j60.md
│ ├── 03 - comunicacion-inalambrica-en-arduino-con-modulos-rf-433mhz.md
│ ├── 04 - comunicacion-inalambrica-a-2-4ghz-con-arduino-y-nrf24l01.md
│ ├── 05 - arduino-rs485-max485.md
│ ├── 06 - comunicacion-rf-385-433-y-815mhz-con-arduino-y-cc1101.md
│ └── 07 - arduino-wifi-esp8266-esp01.md
├── 13 - Controles
│ ├── 00 - arduino-teclado-matricial.md
│ ├── 01 - arduino-joystick.md
│ ├── 02 - arduino-mando-a-distancia-infrarrojo.md
│ ├── 03 - arduino-y-mando-a-distancia-de-4-canales-315mhz-ic2262.md
│ ├── 04 - conectar-emisora-radio-control-con-arduino.md
│ ├── 05 - arduino-mando-wii-wiichuck.md
│ └── 06 - controla-arduino-con-el-mando-inalambrico-de-la-ps2.md
├── 14 - Magnetico
│ ├── 00 - usar-un-interruptor-magnetico-con-arduino-magnetic-reed.md
│ ├── 01 - medir-campos-magneticos-arduino-hall-49e.md
│ ├── 02 - detectar-campos-magneticos-con-arduino-y-sensor-hall-a3144.md
│ └── 03 - detector-de-metales-con-arduino-y-sensor-inductivo.md
├── 15 - Memoria
│ ├── 00 - arduino-eeprom-externa-i2c-at24c256.md
│ └── 01 - tarjeta-micro-sd-arduino.md
├── 16 - Tiempo
│ └── 00 - reloj-y-calendario-en-arduino-con-los-rtc-ds1307-y-ds3231.md
├── 17 - RFID _ NFC
│ ├── 00 - arduino-rfid-mifare-rc522.md
│ └── 01 - arduino-nfc-pn532.md
├── 18 - Biometrico
│ ├── 00 - lector-de-huellas-dactilares-con-arduino-y-sensor-fpm10a.md
│ └── 01 - pulsimetro-y-oximetro-con-arduino-y-max30102.md
├── 19 - Sonido
│ ├── 00 - reproducir-sonidos-arduino-buzzer-pasivo-altavoz.md
│ ├── 01 - arduino-buzzer-activo.md
│ ├── 02 - detectar-sonido-con-arduino-y-microfono-ky-038.md
│ ├── 03 - medir-sonido-con-arduino-y-microfono-amplificado-max9812.md
│ └── 04 - arduino-mp3-dfplayer-mini.md
└── 20 - Gps
│ └── 00 - localizacion-gps-con-arduino-y-los-modulos-gps-neo-6.md
├── 030_arduino-avanzado
├── 00 - Programación e IDEs
│ ├── 01 - programar-arduino-con-atom-y-platformio-ide.md
│ ├── 03 - como-programar-arduino-con-visual-studio-code-y-plaftormio.md
│ └── 04 - programar-arduino-con-eclipse.md
├── 01 - Puerto serie avanzado
│ ├── 00 - convertir-texto-a-numero-arduino.md
│ ├── 01 - cadenas-de-texto-puerto-serie-arduino.md
│ ├── 02 - enviar-recibir-numeros-puerto-serie-arduino.md
│ ├── 03 - array-puerto-serie-arduino.md
│ ├── 04 - arduino-array-separado-comas.md
│ ├── 05 - arduino-bytes-puerto-serie.md
│ ├── 06 - estructuras-puerto-serie-arduino.md
│ ├── 07 - arduino-caracteres-control-puerto-serie.md
│ └── 08 - puerto-serie-avanzado-arduino.md
├── 02 - Filtrado
│ ├── 00 - reducir-ruido-sensores-arduino-muestreo-multiple.md
│ ├── 01 - arduino-filtro-media-movil.md
│ ├── 02 - arduino-mediana.md
│ ├── 03 - arduino-filtro-mediana-rapido.md
│ ├── 04 - arduino-paso-bajo-exponencial.md
│ └── 05 - arduino-paso-banda.md
├── 03 - Limpieza de código
│ ├── 00 - como-y-por-que-usar-clases-abstrastas-en-arduino.md
│ ├── 01 - 4-consejos-para-programar-codigo-mas-limpio-en-arduino.md
│ ├── 02 - ponemos-a-prueba-como-de-listo-es-el-compilador-de-arduino.md
│ └── 03 - solucion-al-ejercicio-de-codigo-limpio-y-ordenado-en-c-para-arduino.md
├── 04 - Estructuras de datos y algoritmos
│ ├── 00 - arduino-array-dinamico.md
│ ├── 01 - arduino-linked-list.md
│ ├── 02 - buffer-circular-arduino.md
│ ├── 03 - arduino-bubble-sort.md
│ ├── 04 - arduino-quicksort.md
│ └── 05 - arduino-checksum.md
├── 05 - Teoría de control
│ ├── 01 - arduino-umbral.md
│ ├── 05 - como-implementar-un-controlador-pid-en-arduino.md
│ └── 06 - como-hacer-un-control-pid-de-iluminacion-constante-con-arduino.md
├── 06 - Automatización y robótica
│ ├── 00 - multitarea-en-arduino-blink-sin-delay.md
│ ├── 01 - maquina-de-estados-finitos-arduino.md
│ ├── 02 - implementar-una-red-de-petri-en-arduino.md
│ ├── 03 - resolver-robots-articulados-con-arduino.md
│ ├── 04 - como-usar-freertos-en-arduino.md
│ └── 05 - obtener-orientacion-y-altitud-ahrs-con-imu-9dof-y-rtimulib-arduino.md
├── 07 - Comunicación
│ ├── 00 - arduino-json.md
│ ├── 01 - enviar-y-recibir-mensajes-por-mqtt-con-arduino-y-la-libreria-pubsubclient.md
│ ├── 02 - como-conectar-dos-arduino-por-bus-i2c.md
│ └── 03 - arduino-i2c-json.md
└── 08 - Hardware
│ ├── 00 - analogicas-mas-precisas.md
│ ├── 01 - como-cambiar-la-frecuencia-de-un-pwm-en-arduino.md
│ ├── 02 - como-usar-correccion-gamma-en-fuentes-de-luz-con-arduino.md
│ ├── 03 - interrupciones-en-todos-los-pines-de-arduino-con-pcint.md
│ └── 04 - como-emular-un-teclado-o-un-raton-con-arduino.md
├── README.md
└── img
└── screenshot.png
/010_arduino-iniciacion/00 - Introducción/01 - instalar-ide-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/instalar-ide-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Arduino IDE en Ubuntu/Linux Mint
8 | ```bash
9 | sudo apt-get install arduino
10 | ```
11 |
12 | ```bash
13 | sudo rm -r /usr/share/arduino
14 | wget http://http://downloads.arduino.cc/arduino-1.5.4-linux64.tgz
15 | tar zxvf arduino-1.5.4-linux64.tgz
16 | sudo mv ./arduino-1.5.4 /usr/share/arduino
17 | ```
18 |
19 |
20 | ## Fritzing
21 | ```bash
22 | sudo apt-get install fritzing
23 | ```
24 |
25 |
26 | ## Oregano
27 | ```bash
28 | sudo apt-get install oregano
29 | ```
30 |
31 |
32 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/00 - Introducción/02 - nuestro-primer-programa-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/nuestro-primer-programa-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Estructura básica de programa
8 | ```csharp
9 | //Zona DECLARACIONES
10 |
11 | void setup()
12 | {
13 | // Zona funcion SETUP
14 | }
15 |
16 | void loop()
17 | {
18 | // Zona funcion LOOP
19 | }
20 | ```
21 |
22 |
23 | ## Cargando un ejemplo
24 | ```csharp
25 | const int pinLED= 13; //asignar variable led como 13
26 |
27 | void setup()
28 | {
29 | pinMode(pinLED, OUTPUT); //definir pin 13 como salida
30 | }
31 |
32 | void loop() {
33 | digitalWrite(pinLED, HIGH); // encender LED
34 | delay(1000); // esperar un segundo
35 | digitalWrite(pinLED, LOW); // apagar LED
36 | delay(1000); // esperar un segundo
37 | }
38 | ```
39 |
40 |
41 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/00 - entradas-digitales-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/entradas-digitales-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Código en Arduino
8 | ```csharp
9 | int pin = 2;
10 | int value = 0;
11 |
12 | void setup() {
13 | Serial.begin(9600); //iniciar puerto serie
14 | pinMode(pin, INPUT); //definir pin como entrada
15 | }
16 |
17 | void loop(){
18 | value = digitalRead(pin); //lectura digital de pin
19 |
20 | //mandar mensaje a puerto serie en función del valor leido
21 | if (value == HIGH) {
22 | Serial.println("Encendido");
23 | }
24 | else {
25 | Serial.println("Apagado");
26 | }
27 | delay(1000);
28 | }
29 | ```
30 |
31 |
32 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/01 - salidas-digitales-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/salidas-digitales-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Código
8 | ```cpp
9 | const int pin = 2;
10 |
11 | void setup() {
12 | Serial.begin(9600); //iniciar puerto serie
13 | pinMode(pin, OUTPUT); //definir pin como salida
14 | }
15 |
16 | void loop(){
17 | digitalWrite(pin, HIGH); // poner el Pin en HIGH
18 | delay(1000); // esperar un segundo
19 | digitalWrite(pin, LOW); // poner el Pin en LOW
20 | delay(1000); // esperar un segundo
21 | }
22 | ```
23 |
24 | ```cpp
25 | const int pin = 2;
26 | int option;
27 |
28 | void setup(){
29 | Serial.begin(9600);
30 | pinMode(pin, OUTPUT);
31 | }
32 |
33 | void loop(){
34 | //si existe información pendiente
35 | if (Serial.available()>0){
36 | //leeemos la opcion
37 | char option = Serial.read();
38 | if (option == '0' ) //si el valor es 0
39 | {
40 | digitalWrite(pin, LOW); //apagamos el pin
41 | }
42 | else if (option == '1' )
43 | {
44 | digitalWrite(pin, HIGH); //encendemos el pin
45 | }
46 | delay(200);
47 | }
48 | }
49 | ```
50 |
51 |
52 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/02 - entradas-analogicas-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/entradas-analogicas-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Código en Arduino
8 | ```csharp
9 | const int sensorPin = A0; // seleccionar la entrada para el sensor
10 | int sensorValue; // variable que almacena el valor raw (0 a 1023)
11 |
12 | void setup()
13 | {
14 | Serial.begin(9600);
15 | }
16 |
17 | void loop()
18 | {
19 | sensorValue = analogRead(sensorPin); // realizar la lectura
20 |
21 | //mandar mensaje a puerto serie en función del valor leido
22 | if (sensorValue > 512)
23 | {
24 | Serial.println("Mayor que 2,5V");
25 | }
26 | else
27 | {
28 | Serial.println("Menor que 2,5V");
29 | }
30 | delay(1000);
31 | }
32 | ```
33 |
34 | ```csharp
35 | const int sensorPin = A0; // seleccionar la entrada para el sensor
36 | int sensorValue; // variable que almacena el valor raw (0 a 1023)
37 | float value; // variable que almacena el voltaje (0.0 a 5.0)
38 |
39 | void setup()
40 | {
41 | Serial.begin(9600);
42 | }
43 |
44 | void loop()
45 | {
46 | sensorValue = analogRead(sensorPin); // realizar la lectura
47 | value = fmap(sensorValue, 0, 1023, 0.0, 5.0); // cambiar escala a 0.0 - 5.0
48 |
49 | Serial.println(value); // mostrar el valor por serial
50 | delay(1000);
51 | }
52 |
53 | // cambio de escala entre floats
54 | float fmap(float x, float in_min, float in_max, float out_min, float out_max)
55 | {
56 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
57 | }
58 | ```
59 |
60 |
61 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/03 - salidas-analogicas-pwm-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/salidas-analogicas-pwm-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Ejemplo de código
8 | ```cpp
9 | const int analogOutPin = 5; // Analog output pin
10 |
11 | byte outputValue = 0; // valor del PWM
12 |
13 | void setup() {
14 | }
15 |
16 | void loop() {
17 | analogWrite(analogOutPin, outputValue);
18 | delay(10);
19 | outputValue++;
20 | }
21 | ```
22 |
23 | ```cpp
24 | const int analogOutPin = 11; // Analog output pin that the LED is attached to
25 | byte outputValue = 0;
26 |
27 | void setup()
28 | {
29 | bitSet(DDRB, 5); // LED pin (13)
30 | bitSet(PCICR, PCIE0); // enable pin change interrupts on bank 0
31 | bitSet(PCMSK0, PCINT3); // enable PCINT3 (PB3) pin change interrupt
32 | }
33 |
34 | void loop()
35 | {
36 | analogWrite(analogOutPin, outputValue);
37 | delay(10);
38 | outputValue++;
39 | }
40 |
41 | ISR(PCINT0_vect)
42 | {
43 | if(bitRead(PINB, 3))
44 | {
45 | bitSet(PORTB, 5); // LED on
46 | }
47 | else
48 | {
49 | bitClear(PORTB, 5); // LED off
50 | }
51 | }
52 | ```
53 |
54 | ```cpp
55 | const int analogOutPin = 11;
56 | byte outputValue = 0;
57 |
58 | void setup()
59 | {
60 | Serial.begin(9600); // Iniciar puerto serie
61 | pinMode(ledPIN , OUTPUT);
62 |
63 | bitSet(DDRB, 5); // LED pin (13)
64 | bitSet(PCICR, PCIE0); // enable pin change interrupts on bank 0
65 | bitSet(PCMSK0, PCINT3); // enable PCINT3 (PB3) pin change interrupt
66 | }
67 |
68 | void loop()
69 | {
70 | if (Serial.available()>0) // Si hay datos disponibles
71 | {
72 | outputValue = Serial.read(); // Leemos la opción
73 | if(outputValue >= '0' && outputValue <= '9')
74 | {
75 | outputValue -= '0'; // Restamos '0' para convertir a un número
76 | outputValue *= 25; // Multiplicamos x25 para pasar a una escala 0 a 250
77 | analogWrite(ledPIN , outputValue);
78 | }
79 | }
80 | }
81 |
82 | ISR(PCINT0_vect)
83 | {
84 | if(bitRead(PINB, 3))
85 | {
86 | bitSet(PORTB, 5); // LED on
87 | }
88 | else
89 | {
90 | bitClear(PORTB, 5); // LED off
91 | }
92 | }
93 | ```
94 |
95 |
96 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/05 - que-son-y-como-usar-interrupciones-en-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/que-son-y-como-usar-interrupciones-en-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Crear interrupciones en Arduino
8 | ```csharp
9 | attachInterrupt(interrupt, ISR, mode);
10 | ```
11 |
12 | ```csharp
13 | attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
14 | ```
15 |
16 |
17 | ## Haciendo parpadear un LED a través de interrupciones
18 | ```cpp
19 | const int emuPin = 10;
20 |
21 | const int LEDPin = 13;
22 | const int intPin = 2;
23 | volatile int state = LOW; // definimos como volatil
24 |
25 | void setup() {
26 | pinMode(emuPin, OUTPUT);
27 | pinMode(LEDPin, OUTPUT);
28 | pinMode(intPin, INPUT_PULLUP);
29 | attachInterrupt(digitalPinToInterrupt(intPin), blink, CHANGE);
30 | }
31 |
32 | void loop() {
33 | //esta parte es para emular la salida
34 | digitalWrite(emuPin, HIGH);
35 | delay(150);
36 | digitalWrite(emuPin, LOW);
37 | delay(150);
38 | }
39 |
40 | void blink() {
41 | state = !state; // cambiamos el state para que parpadee
42 | digitalWrite(LEDPin, state);
43 | }
44 | ```
45 |
46 |
47 | ## Contando disparos de una interrupción
48 | ```csharp
49 | const int emuPin = 10;
50 |
51 | const int intPin = 2;
52 | volatile int ISRCounter = 0;
53 | int counter = 0;
54 |
55 | void setup()
56 | {
57 | pinMode(emuPin, OUTPUT);
58 |
59 | pinMode(intPin, INPUT_PULLUP);
60 | Serial.begin(9600);
61 | attachInterrupt(digitalPinToInterrupt(intPin), interruptCount, FALLING);
62 | }
63 |
64 | void loop()
65 | {
66 | //esta parte es para emular la salida
67 | digitalWrite(emuPin, HIGH);
68 | delay(1000);
69 | digitalWrite(emuPin, LOW);
70 | delay(1000);
71 |
72 | if (counter != ISRCounter)
73 | {
74 | counter = ISRCounter;
75 | Serial.println(counter);
76 | }
77 | }
78 |
79 | void interruptCount()
80 | {
81 | ISRCounter++;
82 | }
83 | ```
84 |
85 |
86 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/01 - Entradas y salidas/06 - debounce-interrupciones-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/debounce-interrupciones-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## PROBANDO EL REBOTE
8 | ```cpp
9 | const int intPin = 2;
10 | volatile int ISRCounter = 0;
11 | int counter = 0;
12 |
13 | void setup()
14 | {
15 | pinMode(intPin, INPUT_PULLUP);
16 | Serial.begin(9600);
17 | attachInterrupt(digitalPinToInterrupt(intPin), debounceCount, FALLING);
18 | }
19 |
20 | void loop()
21 | {
22 | if (counter != ISRCounter)
23 | {
24 | counter = ISRCounter;
25 | Serial.println(counter);
26 | }
27 | }
28 |
29 | void debounceCount()
30 | {
31 | ISRCounter++;
32 | }
33 | ```
34 |
35 |
36 | ## Debounce por software
37 | ```cpp
38 | const int timeThreshold = 150;
39 | const int intPin = 2;
40 | volatile int ISRCounter = 0;
41 | int counter = 0;
42 | long startTime = 0;
43 |
44 | void setup()
45 | {
46 | pinMode(intPin, INPUT_PULLUP);
47 | Serial.begin(9600);
48 | attachInterrupt(digitalPinToInterrupt(intPin), debounceCount, FALLING);
49 | }
50 |
51 | void loop()
52 | {
53 | if (counter != ISRCounter)
54 | {
55 | counter = ISRCounter;
56 | Serial.println(counter);
57 | }
58 | }
59 |
60 | void debounceCount()
61 | {
62 | if (millis() - startTime > timeThreshold)
63 | {
64 | ISRCounter++;
65 | startTime = millis();
66 | }
67 | }
68 | ```
69 |
70 |
71 |
--------------------------------------------------------------------------------
/010_arduino-iniciacion/02 - Electrónica básica/00 - encender-un-led-con-arduino.md:
--------------------------------------------------------------------------------
1 | > Códigos de ejemplo de los tutoriales de www.luisllamas.es
2 | >
3 | > Enlace entrada: https://www.luisllamas.es/encender-un-led-con-arduino/
4 | >
5 | > Todo el contenido distribuido bajo licencia CCC, salvo indicación expresa
6 |
7 | ## Ejemplos de código
8 | ```cpp
9 | const int ledPIN = 9;
10 |
11 | void setup() {
12 | Serial.begin(9600); //iniciar puerto serie
13 | pinMode(ledPIN , OUTPUT); //definir pin como salida
14 | }
15 |
16 | void loop(){
17 | digitalWrite(ledPIN , HIGH); // poner el Pin en HIGH
18 | delay(1000); // esperar un segundo
19 | digitalWrite(ledPIN , LOW); // poner el Pin en LOW
20 | delay(1000); // esperar un segundo
21 | }
22 | ```
23 |
24 | ```csharp
25 | const int ledPIN = 9;
26 |
27 | int option;
28 |
29 | void setup(){
30 | Serial.begin(9600);
31 | pinMode(ledPIN , OUTPUT);
32 | }
33 |
34 | void loop(){
35 | //si existe información pendiente
36 | if (Serial.available()>0){
37 | //leeemos la opcion
38 | char option = Serial.read();
39 | //si la opcion esta entre '1' y '9'
40 | if (option >= '1' && option <= '9')
41 | {
42 | //restamos el valor '0' para obtener el numero enviado
43 | option -= '0';
44 | for(int i=0;i