Curso C para Arduino

Estos ejercicios afianzan el uso de funciones y módulos:

  1. LED Intermitente Modular: Crea una librería que controle el encendido y apagado intermitente de un LED.

  2. Calculadora básica: Implementa funciones para sumar, restar, multiplicar y dividir. Usa el puerto serie para ingresar datos y mostrar resultados.

  3. Conversor de Temperatura: Crea funciones para convertir temperaturas de Celsius a Fahrenheit y viceversa, mostrando el resultado en el monitor serial.

Aquí tienes la solución detallada para cada uno de los tres ejercicios usando funciones en Arduino. En el primero se incluye cómo organizar el código en archivos si se desea modularizar, y los otros dos usan funciones definidas en el mismo .ino.


✅ 1. LED Intermitente Modular

Crea una librería que controle el encendido y apagado intermitente de un LED.

ledControl.h

1#ifndef LEDCONTROL_H
2#define LEDCONTROL_H
3
4void parpadearLED(int pin, int tiempoEncendido, int tiempoApagado);
5
6#endif

ledControl.cpp

1#include <Arduino.h>
2#include "ledControl.h"
3
4void parpadearLED(int pin, int tiempoEncendido, int tiempoApagado) {
5  digitalWrite(pin, HIGH);
6  delay(tiempoEncendido);
7  digitalWrite(pin, LOW);
8  delay(tiempoApagado);
9}

Código principal (sketch.ino)

1#include "ledControl.h"
2
3const int pinLED = 13;
4
5void setup() {
6  pinMode(pinLED, OUTPUT);
7}
8
9void loop() {
10  parpadearLED(pinLED, 500, 500); // LED parpadea cada 0.5s
11}

✅ 2. Calculadora básica

Implementa funciones para sumar, restar, multiplicar y dividir. Usa el puerto serie para ingresar datos y mostrar resultados.

1float sumar(float a, float b) {
2  return a + b;
3}
4
5float restar(float a, float b) {
6  return a - b;
7}
8
9float multiplicar(float a, float b) {
10  return a * b;
11}
12
13float dividir(float a, float b) {
14  if (b == 0) return 0; // evitar división por cero
15  return a / b;
16}
17
18void setup() {
19  Serial.begin(9600);
20  Serial.println("Calculadora: introduce dos números seguidos de un operador (+ - * /)");
21}
22
23void loop() {
24  if (Serial.available() > 0) {
25    float num1 = Serial.parseFloat();
26    float num2 = Serial.parseFloat();
27    char operador = Serial.read();
28
29    float resultado = 0;
30    bool valido = true;
31
32    switch (operador) {
33      case '+': resultado = sumar(num1, num2); break;
34      case '-': resultado = restar(num1, num2); break;
35      case '*': resultado = multiplicar(num1, num2); break;
36      case '/': resultado = dividir(num1, num2); break;
37      default:
38        Serial.println("Operador inválido.");
39        valido = false;
40        break;
41    }
42
43    if (valido) {
44      Serial.print("Resultado: ");
45      Serial.println(resultado);
46    }
47
48    // Limpiar buffer
49    while (Serial.available()) Serial.read();
50    delay(1000);
51    Serial.println("Introduce dos números y un operador:");
52  }
53}

✅ 3. Conversor de Temperatura

Crea funciones para convertir temperaturas de Celsius a Fahrenheit y viceversa, mostrando el resultado en el monitor serial.

1float celsiusAFahrenheit(float c) {
2  return (c * 9.0 / 5.0) + 32;
3}
4
5float fahrenheitACelsius(float f) {
6  return (f - 32) * 5.0 / 9.0;
7}
8
9void setup() {
10  Serial.begin(9600);
11  Serial.println("Conversor de temperatura:");
12  Serial.println("Introduce un número seguido de C o F (por ejemplo: 25C o 77F):");
13}
14
15void loop() {
16  if (Serial.available() > 0) {
17    float valor = Serial.parseFloat();
18    char unidad = Serial.read();
19
20    if (unidad == 'C' || unidad == 'c') {
21      float f = celsiusAFahrenheit(valor);
22      Serial.print(valor);
23      Serial.print(" ºC = ");
24      Serial.print(f);
25      Serial.println(" ºF");
26    } else if (unidad == 'F' || unidad == 'f') {
27      float c = fahrenheitACelsius(valor);
28      Serial.print(valor);
29      Serial.print(" ºF = ");
30      Serial.print(c);
31      Serial.println(" ºC");
32    } else {
33      Serial.println("Unidad no reconocida. Usa C o F.");
34    }
35
36    // Limpiar buffer
37    while (Serial.available()) Serial.read();
38    delay(1000);
39    Serial.println("Introduce otro valor (ej: 100F, 0C):");
40  }
41}