Professional Documents
Culture Documents
h"
#include <string>
char readPassword(void);
void authentication(char input);
void toBlock(void);
int main()
{
indicator = 0;
pc.printf("LAB 1 , EJERCICIO 2\n");
while(1)
{
success = readPassword();
authentication(success);
}
}
// LEER EL PUERTO SERIAL
char readPassword(void)
{
char corrects = 0;
for (char i = 0;i<8;i++)
{
pc.printf("Ingrese el caracter %d:",i+1);
if (pc.getc() == password[i])
{
corrects++;
}
pc.printf("*\n");
}
return corrects;
}
pc.printf("Password incorrecto\n");
if (try_counter > 0)
{
pc.printf("Intente nuevamente\n");
}
else
{
pc.printf("Excedio el numero de intentos permitidos\n");
toBlock();
}
}
// BLOQUEAR EL SISTEMA
void toBlock(void)
{
do{}while(1);
}
#include "mbed.h"
#include <string>
int main() {
while (1) {
clearAll();
pc.printf("Bienvenido, para el uso de esta herramienta usted
debe\n");
pc.printf("ingresar un valor y luego un operador hasta que quiera\n");
pc.printf("conocer el resultado para lo cual debe digitar el signo
'='\n");
// esperamos el primer valor numerico
getValue();
// Almacenamos el primer valor ingresado
tmp_value = value_input;
while (in_use) {
// esperamos hasta que se ingrese un operador valido
waiting_operator = true;
do {
pc.printf("Ingrese la operacion que desea realizar\n");
pc.printf("'+', '-', '*', '/' o si quiere obtener el resultado\n");
pc.printf("digite el signo '='\n");
getOperator();
}while(waiting_operator);
}
}
void getValue(void) {
// En esta funcion obtenemos el valor ingresado, lo pasamos a entero y
lo guardamos para mostrar al final
pc.printf("Digite un valor numerico\n");
char buffer_value [10]; //se crea el buffer de entrada
pc.gets(buffer_value, 10); //se lee el puerto y se almacena
value_input = atoi(buffer_value); //se convierte a entero
sprintf(buffer_value, "%d", value_input); //se convierte en texto el
valor numerico
operation_display += buffer_value; //se concatena con la
operacion a mostrar
pc.abort_read(); //abortamos la lectura para que no
almacene en el buffer valores posteriores inesperadamente
pc.printf("%s\n",buffer_value); //imprimimos el valor ingresado
despues de la conversion a entero
}
void getOperator(void) {
// En esta funcion obtenemos la operacion a realizar, en caso de que no
sea valida vuelve a pedirla por el bucle en donde es llamada
char o = pc.getc();
if (o == '+' || o == '-' || o == '*' || o == '/' || o == '='){
waiting_operator = false; //como el operador es valida entonces
no esperamos mas
actual_operation = o; //guardamos el operador
operation_display += actual_operation; //lo guardamos para mostrar
al final
pc.printf("%c\n",o); //mostramos que es lo que ingreso el
usuario
if (o == '=') { //si el usuario quiere el resultado llamamos a la
funcion encargada
showResult();
}
} else {
pc.printf("La opcion ingresada no es valida\n");
}
}
void calculate(void) {
//esta funcion realiza los calculos segun el operador actual
switch(actual_operation){
// La multiplicacion y la division se realizan directamente (por temas
de jerarquia matematica)
case '*':
tmp_value = tmp_value * value_input;
break;
case '/':
tmp_value = tmp_value / value_input;
break;
void showResult(void) {
//en esta funcion se muestra el resultado final
// primero validamos que el valor acumulado no sea cero para no hacer
operaciones innecesarias
if (left_value != 0){
//por jerarquia la suma y la resta se deben hacer despues de las otras
operaciones por lo que miramos lo que esta pendiente y procedemos a
operar
if (pending_operation == '+') {
tmp_value = left_value + tmp_value;
} else {
tmp_value = left_value - tmp_value;
}
}
//al final solo imprimimos la operacion ingresada y el resultado
obtenido
pc.printf("La operacion realizada fue %s \n", operation_display.c_str());
pc.printf("y el resultado obtenido es = %5.3f \n", tmp_value);
//ademas le informamos al programa que ya no esta en uso para que
pueda reiniciar todo
in_use = false;
}
void clearAll(void) {
//cuando es llamada esta funcion, ponemos todas las variables de tal
forma que se pueda realizar una nueva operacion
value_input = tmp_value = left_value = 0;
in_use = true;
pending_operation = '+';
operation_display = "";
}#include "mbed.h"
PwmOut notas(PB_3);
DigitalIn salida(salidaaudio);
float
frec[12]={659,554,659,554,440,494,554,587,494,659,554,440};
int main() {
while(1)
{
mypwm.write(0);
while(salida)
{}
while(!salida)
{}
notas.period(1/(frec[0]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[1]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[2]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[3]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[4]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[5]));
notas.write(0.5);
wait(0.25);
notas.period(1/(frec[6]));
notas.write(0.5);
wait(0.25);
notas.period(1/(frec[7]));
mypwm.write(0.5);
wait(0.5);
notas.period(1/(frec[8]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[9]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[10]));
notas.write(0.5);
wait(0.5);
notas.period(1/(frec[11]));
notas.write(0.5);
wait(1);
}
}