Created
February 29, 2020 00:41
-
-
Save HectorTorres/7ab4e602e41b306cf52c9c4b67a2c159 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "mbed.h" | |
Serial pc(SERIAL_TX, SERIAL_RX); | |
AnalogIn analog_value0(A0); | |
AnalogIn analog_value1(A1); | |
AnalogIn analog_value2(A2); | |
DigitalIn DigitalInput8(D8,PullUp); | |
DigitalIn DigitalInput9(D9,PullUp); | |
DigitalOut DigitalOutput3(D3); | |
DigitalOut DigitalOutput4(D4); | |
AnalogIn int_temp(ADC_TEMP); | |
PwmOut pwm5(D5); | |
PwmOut pwm6(D6); | |
Timer t; | |
DigitalOut led(LED1); | |
char instruc[10]; | |
uint8_t index=0; | |
uint16_t adc_data=0; | |
bool dig_data; | |
uint32_t m; | |
uint8_t counti=0; | |
double voltaget,temp; | |
void outputSendFrom(char channel, char *value){ | |
switch(channel){ | |
case '3':{ | |
DigitalOutput3 = atoi(value) ? 1 : 0; | |
pc.printf("Terminal 3 activada\n"); | |
break; | |
} | |
case '4':{ | |
DigitalOutput4 = atoi(value) ? 1 : 0; | |
pc.printf("Terminal 4 activada\n"); | |
break; | |
} | |
default: | |
break; | |
} | |
} | |
bool inputReadFrom(char channel){ | |
switch(channel){ | |
case '8': | |
return DigitalInput8.read(); | |
case '9': | |
return DigitalInput9.read(); | |
default: | |
return 0; | |
} | |
} | |
uint16_t readADCfrom(char channel){ | |
switch(channel){ | |
case '0': | |
return analog_value0.read_u16()>>4; | |
case '1': | |
return analog_value1.read_u16()>>4; | |
case '2': | |
return analog_value2.read_u16()>>4; | |
default: | |
return 0; | |
} | |
} | |
int main() | |
{ | |
t.start(); | |
pc.baud(115200); | |
pc.printf("*******************************\n"); | |
pc.printf("SISTEMA DE CONTROL DE NUCLEO L432KC\n"); | |
pc.printf(" \n"); | |
pc.printf("Seleccione el nombre o etiqueta del pin:\n"); | |
pc.printf("Terminales disponibles D1, D2, D3, A0, A1, A2\n"); | |
pc.printf("Selecciones segundo parametro despues de una coma.\n"); | |
pc.printf("Si es ADC voltaje o bits con V o B\n"); | |
pc.printf("Si es Digital selecciones S para salida y E para entrada.\n"); | |
pc.printf("Si el pin digital es de salida entonces solo ponr 1 o 0\n"); | |
pc.printf("Si el pin es de PWM poner periodo y tiempo en alto separado por coma.\n"); | |
pc.printf("Se usan 3 digitos por periodo y tiempo en alto en unidades de mS.\n"); | |
pc.printf("*******\n"); | |
pc.printf("Ejemplos\n"); | |
pc.printf("A1,V - Esto nos dara el dato del voltaje del canal A1\n"); | |
pc.printf("D2,S,1 - Esto activara la terminal D2\n"); | |
pc.printf("D3,E - Esto retornara el valor de la terminal D3\n"); | |
pc.printf("D5,100,050 - Esto generara una se;al digital con un periodo de 100 y un tiempo en alto de 50 mS\n"); | |
pc.printf("**************\n"); | |
pc.printf("* Terminales diponibles de ADC A0, A1 y A2 *\n"); | |
pc.printf("* Terminales diponibles de salida D3, D4 *\n"); | |
pc.printf("* Terminales diponibles de entrada D8, D9 *\n"); | |
pc.printf("* Terminales diponibles de PWM D5, D6 *\n"); | |
pc.printf("**************\n"); | |
//adc_init(); | |
while(1) { | |
bool flag=0; | |
if (pc.readable()){ | |
flag=pc.scanf("%s", instruc); | |
if(flag){ | |
printf("%s",instruc); | |
switch(instruc[0]){ | |
case 'A': | |
pc.printf("\nEntrada analogica detectada\n"); | |
pc.printf("Canal: %c\n",instruc[1]); | |
adc_data = readADCfrom(instruc[1]); | |
if(instruc[2]==',' && instruc[3]=='B'){ | |
pc.printf("Valor en bits: %i\n",adc_data); | |
} | |
else if(instruc[2]==',' && instruc[3]=='V'){ | |
float voltaje; | |
voltaje = 3.3*adc_data/4096; | |
pc.printf("Valor en V: %f Volts\n",voltaje); | |
} | |
else{ | |
pc.printf("Error\n"); | |
} | |
break; | |
case 'D':{ | |
pc.printf("Terminal digital\n"); | |
if(instruc[2]==',' && instruc[3]=='E'){ | |
pc.printf("Entrada digital.\n"); | |
dig_data = inputReadFrom(instruc[1]); | |
pc.printf("Dato leido: %d\n",dig_data); | |
} | |
else if(instruc[2]==',' && instruc[3]=='S'){ | |
pc.printf("Salida digital.\n"); | |
//DigitalOutput3=1; | |
//DigitalOutput4=1; | |
/*aqui definir si es pwm o salida digital*/ | |
outputSendFrom(instruc[1],&instruc[5]); | |
/*Test*/ | |
} | |
else if(instruc[2]==','){ | |
//D3,100,500 | |
pc.printf("Salida PWM.\n"); | |
char periodc[3]; | |
strcpy(periodc,&instruc[3]); | |
strcat(periodc,&instruc[4]); | |
strcat(periodc,&instruc[5]); | |
//pc.printf("%s\n",periodc); | |
int period = atoi(periodc); | |
pc.printf("Periodo %i mS\n",period); | |
char tac[3]; | |
strcpy(tac,&instruc[7]); | |
strcat(tac,&instruc[8]); | |
strcat(tac,&instruc[9]); | |
//pc.printf("%s\n",periodc); | |
int ta = atoi(tac); | |
ta=ta/1000; | |
pc.printf("Tiempo alto %i mS\n",ta); | |
if(instruc[1]=='5'){ | |
pwm5.period_ms(period); | |
pwm5.pulsewidth_ms(ta); | |
} | |
else if(instruc[1]=='6'){ | |
pwm6.period_ms(period); | |
pwm6.pulsewidth_ms(ta); | |
} | |
} | |
} | |
break; | |
} | |
} | |
voltaget = (double)int_temp.read() * 3.3; | |
temp = ((voltaget - 0.76)/2.5) + 25.0; | |
m = t.read_ms(); | |
counti++; | |
pc.printf("Tiempo = %d mS, Instruccion: %d, Temperatura: %f\r\n", m,counti,temp); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment