Skip to content

Instantly share code, notes, and snippets.

@HectorTorres
Created February 29, 2020 00:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HectorTorres/7ab4e602e41b306cf52c9c4b67a2c159 to your computer and use it in GitHub Desktop.
Save HectorTorres/7ab4e602e41b306cf52c9c4b67a2c159 to your computer and use it in GitHub Desktop.
#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