- Portada
- Fundamentos de MentorBit
- Alimentación de circuitos y dispositivos
-
Programación y ejercicios básicos
-
Introducción
-
Driver necesario para programar la placa
-
Descripción de mBlock
-
Descripción de IDE Arduino
-
Estructura de un programa
-
Variables
-
Tipos de datos
-
Operadores
-
Sintaxis
-
Principales Bloques
-
Principales funciones C/C++
-
Monitor Serial
-
Actividad 1: Mi primer programa
-
Estructuras de control
-
Actividad 2: Bucle for
-
Actividad 3: Bucle while
-
Actividad 4: Condicional if y else
-
Actividad 5: Sentencia Switch
-
Arrays
-
Actividad 6: Los Arrays
-
Recibir por Serie
-
Actividad 7: Recepción por bus serial
-
Funciones
-
Funciones en Bloques
-
Funciones en C/C++
-
Actividad 8: Mis primeras funciones
-
Clases en C/C++
-
Actividad 9: Mi primera Clase
-
Actividad 10: Mi propia Calculadora
-
-
Programación y ejercicios con hardware
-
Introducción a MentorBit
-
LEDs
-
Actividad 11: LEDs de colores
-
El LED RGB
-
Actividad 12: LED RGB
-
El pulsador
-
Actividad 13: Pulsador en Pull Down
-
Actividad 14: Pulsador en Pull Up
-
El Potenciómetro
-
Actividad 15: Potenciómetro
-
El Zumbador
-
Actividad 16: Zumbador Pasivo
-
La Fotorresistencia
-
Actividad 17: LDR
-
Sensor de temperatura DS18B20
-
Actividad 18: DS18B20
-
El Servomotor
-
Actividad 19: Servomotor
-
Motores Corriente Continua
-
Puente en H
-
Actividad 20: Motor DC
-
Introducción a Motores paso a paso
-
Actividad 21: Motor paso a paso
-
Displays 7 Segmentos
-
Actividad 22: Display 7 Segmentos
-
Pantallas LCD
-
Actividad 23: Pantalla LCD
-
Actividad 24: Pantalla LCD
-
Pantallas OLED
-
Actividad 25: Pantalla OLED
-
Actividad 26: Pantalla OLED
-
Reloj en Tiempo Real (RTC)
-
Actividad 27: RTC
-
Tarjeta micro SD
-
Actividad 28: Micro SD
-
Actividad 29: Micro SD & RTC
-
Actividad 30: Micro SD & RTC
-
Puertos para Módulos MentorBit
-
Puertos de Comunicaciones
-
Puertos Genéricos
-
- Problemas Adicionales
- Proyectos Finales
Actividad 9: Mi primera Clase
Actividad 9

Simulador de Cuenta Bancaria
En esta ocasión, el objetivo de la Actividad será crear una clase que represente una cuenta bancaria. Debe tener al menos el atributo saldo, y los métodos necesarios para ingresar y retirar dinero de la cuenta bancaria, utilizando comunicación por puerto serie.
De esta manera, crearemos un programa que lea por el monitor serial mensajes entrantes, los cuales serán comandos que ejecuten las diferentes acciones posibles que permita la clase CuentaBancaria definida (obtener saldo actual, ingresar dinero, retirar dinero, etc).
Nuestro monitor serial funcionará como un cajero automático, donde podremos operar una cuenta bancaria simulada.
Pista 1 (C/C++): Tipos de datos devueltos por los métodos
Recuerda que, un método de una clase, puede devolver cualquier tipo de dato, pero solamente uno. Es
decir, podremos devolver un int, String, bool, incluso no devolver nada (indicándolo con el tipo void).
El único tipo de carácter que no se puede devolver es un Array, da igual el tipo de datos que almacene
éste.
decir, podremos devolver un int, String, bool, incluso no devolver nada (indicándolo con el tipo void).
El único tipo de carácter que no se puede devolver es un Array, da igual el tipo de datos que almacene
éste.
Pista 2 (C/C++): Leer una cadena completa
Recuerda que puedes utilizar la siguiente función para recibir una cadena de texto completa por el
Monitor Serial:
Monitor Serial:
String mensaje = Serial.readString();
Pista 3 (C/C++): Convertir String a Float
Puedes coger un valor numérico que tengas almacenado en una cadena de caracteres (String) y
convertirlo a float, un tipo de dato para almacenar números con punto decimal. Esto se consigue
mediante la siguiente función:
float numero = cadena.toFloat();
convertirlo a float, un tipo de dato para almacenar números con punto decimal. Esto se consigue
mediante la siguiente función:
float numero = cadena.toFloat();
Pista 4 (C/C++): Configuración del Monitor Serial
Ten en cuenta que, si utilizas la condición if else para detectar el comando que se ha ingresado por el
Monitor Serial, debes comprobar el tipo de ajuste que tienes configurado para el final de línea. Si vas a
utilizar comprobaciones del tipo mensaje == "COMANDO" lo ideal es configurar el envío en el Monitor
Serial como Sin ajuste de línea (No Line Ending). Sea como sea tu solución, recuerda crearla acorde a
este ajuste.
Monitor Serial, debes comprobar el tipo de ajuste que tienes configurado para el final de línea. Si vas a
utilizar comprobaciones del tipo mensaje == "COMANDO" lo ideal es configurar el envío en el Monitor
Serial como Sin ajuste de línea (No Line Ending). Sea como sea tu solución, recuerda crearla acorde a
este ajuste.
Solución (C/C++)
// Creamos la clase necesaria para nuestra Cuenta Bancaria simulada
class CuentaBancaria {
// Para este caso, definimos todos los métodos como públicos
public:
// Necesitamos almacenar el saldo de la cuenta
float saldo;
// Definimos el constructor pasando un saldo inicial como argumento
CuentaBancaria(float saldo_inicial) {
saldo = saldo_inicial;
}
// Definimos un método para obtener el saldo actual en la cuenta
float obtenerSaldo() {
return saldo; // Devolvemos el atributo de la clase
}
// Definimos un método para ingresar saldo a la cuenta
// En este caso no nos importa devolver nada
void ingresar(float cantidad) {
saldo += cantidad; // Aumentamos el atributo de la clase
}
// Definimos un método para retirar saldo de la cuenta
// En este caso, como debemos comprobar que exista suficiento saldo
// cuando se vaya a realizar la operación, devolvemos un booleano
// en función de si se puede retirar el saldo o no
bool retirar(float cantidad) {
if(cantidad <= saldo) { // Si hay suficiente saldo para retirar lo indicado
saldo -= cantidad; // Retiramos el saldo de la cuenta
return true; // Devolvemos un true indicando que se hizo con éxtio el retiro
} else { // Si no hay suficiente saldo en la cuenta
return false; // Devolvemos un false indicando que no se ha podido retirar saldo
}
}
};
// Creamos nuestro objeto de tipo CuentaBancaria con un saldo inicial de 1000€
CuentaBancaria miCuenta(1000);
void setup() {
// Inicializamos el monitor serial
Serial.begin(9600);
}
void loop() {
// Comprobamos mensaje entrantes por el Monitor Serial
if(Serial.available()) {
// Obtenemos el mensaje del Monitor Serial como un String
String mensaje = Serial.readString();
// Comprobamos que el mensaje solicite consultar el saldo de la cuenta
if(mensaje == "CONSULTAR") {
// Devolvemos por el Serial el saldo actual en la Cuenta Bancaria
Serial.print("Tu saldo actual es de: ");
Serial.print(miCuenta.obtenerSaldo());
Serial.println("€");
}
// Comprobamos que el mensaje solicite ingresar saldo a la cuenta
if(mensaje == "INGRESAR") {
// Solicitamos que el usuario introduzca la cantidad
Serial.println("Introduce una cantidad a ingresar: ");
// Esperamos la respuesta
while(!Serial.available()) {}
// Obtenemos la cantidad a ingresar recibida por Serial como un número
String cantidad_enviada = Serial.readString();
float cantidad_numerica = cantidad_enviada.toFloat();
// Hacemos el ingreso e informamos al usuario
miCuenta.ingresar(cantidad_numerica);
Serial.print("Tu nuevo saldo es de: ");
Serial.print(miCuenta.obtenerSaldo());
Serial.println("€");
}
if(mensaje == "RETIRAR") {
// Solicitamos que el usuario introduzca la cantidad
Serial.println("Introduce una cantidad a retirar: ");
// Esperamos la respuesta
while(!Serial.available()) {}
// Obtenemos la cantidad a retirar recibida por Serial como un número
String cantidad_enviada = Serial.readString();
float cantidad_numerica = cantidad_enviada.toFloat();
// Intentamos hacer la retirada y guardamos el resultado
bool operacion = miCuenta.retirar(cantidad_numerica);
// Comprobamos el resultado de la operación y respondemos al usuario
if(operacion == false) {
Serial.println("Saldo insuficiente...");
} else {
Serial.print("Tu nuevo saldo es de: ");
Serial.print(miCuenta.obtenerSaldo());
Serial.println("€");
}
}
}
}
| Vistas | |
|---|---|
| 9 | Número de vistas |
| 9 | Vistas de miembros |
| 0 | Vistas públicas |
| Acciones | |
|---|---|
| 0 | Gustos |
| 0 | No me gusta |
| 0 | Comentarios |
Compartir por correo
Por favor iniciar sesión para compartir esto webpage por correo.