machine learning mbed

Dependencies:   mbed

Committer:
asyrofi
Date:
Sat Apr 14 04:02:05 2018 +0000
Revision:
0:b78c322e81d0
semoga bisa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
asyrofi 0:b78c322e81d0 1 #include "mbed.h"
asyrofi 0:b78c322e81d0 2 #include "dataset.h"
asyrofi 0:b78c322e81d0 3 #include "funcionesKNN.h"
asyrofi 0:b78c322e81d0 4 #include <string>
asyrofi 0:b78c322e81d0 5 Serial pc(USBTX, USBRX);
asyrofi 0:b78c322e81d0 6 #define FI 100 // filas de la base de datos
asyrofi 0:b78c322e81d0 7 #define CO 4 // numero de caracteristicas
asyrofi 0:b78c322e81d0 8
asyrofi 0:b78c322e81d0 9 // variables
asyrofi 0:b78c322e81d0 10 /*char* clasesSt[3]; // strings con las clases
asyrofi 0:b78c322e81d0 11 char* nomAtr[CO]; // strings con los nombres de atributos
asyrofi 0:b78c322e81d0 12 double atributos[FI][CO]; // atributos
asyrofi 0:b78c322e81d0 13 int clasesNo[FI]; // clases
asyrofi 0:b78c322e81d0 14 */
asyrofi 0:b78c322e81d0 15 double dato[CO]; // dato a clasificar
asyrofi 0:b78c322e81d0 16 long actual = 0, previo = 0;
asyrofi 0:b78c322e81d0 17
asyrofi 0:b78c322e81d0 18 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 19 // Extrae caracteres dados los identificadores y los convierte a double
asyrofi 0:b78c322e81d0 20 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 21 void extraeDatos(string str, double dato[], char dlm[]){
asyrofi 0:b78c322e81d0 22
asyrofi 0:b78c322e81d0 23 string auxstr = "";
asyrofi 0:b78c322e81d0 24 int posdlm[5], tamstr = 0;
asyrofi 0:b78c322e81d0 25 int i= 0, j = 0;
asyrofi 0:b78c322e81d0 26
asyrofi 0:b78c322e81d0 27 // buscar caracteres de identificacion
asyrofi 0:b78c322e81d0 28 posdlm[0] = str.indexOf(dlm[0]); // (
asyrofi 0:b78c322e81d0 29 posdlm[1] = str.indexOf(dlm[1]); // ,
asyrofi 0:b78c322e81d0 30 posdlm[2] = str.indexOf(dlm[1], posdlm[1] + 1); // ,
asyrofi 0:b78c322e81d0 31 posdlm[3] = str.indexOf(dlm[1], posdlm[2] + 1); // ,
asyrofi 0:b78c322e81d0 32 posdlm[4] = str.indexOf(dlm[2]); // )
asyrofi 0:b78c322e81d0 33
asyrofi 0:b78c322e81d0 34 for(j=0; j<CO; j++){
asyrofi 0:b78c322e81d0 35 // extraer datos numericos
asyrofi 0:b78c322e81d0 36 for(i=posdlm[j]+1; i<posdlm[j+1]; i++){
asyrofi 0:b78c322e81d0 37 auxstr = auxstr + str[i];
asyrofi 0:b78c322e81d0 38 }
asyrofi 0:b78c322e81d0 39
asyrofi 0:b78c322e81d0 40 //convertir a double
asyrofi 0:b78c322e81d0 41 int y = auxstr.length();
asyrofi 0:b78c322e81d0 42 char buf[y+1];
asyrofi 0:b78c322e81d0 43 auxstr.toCharArray(buf, y+1);
asyrofi 0:b78c322e81d0 44 dato[j] = atof(buf);
asyrofi 0:b78c322e81d0 45
asyrofi 0:b78c322e81d0 46 //Serial.println(dato[j],3);
asyrofi 0:b78c322e81d0 47 auxstr=""; // reset del auxiliar
asyrofi 0:b78c322e81d0 48 }
asyrofi 0:b78c322e81d0 49 }
asyrofi 0:b78c322e81d0 50
asyrofi 0:b78c322e81d0 51 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 52 // Impresion de confirmacion
asyrofi 0:b78c322e81d0 53 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 54 void imprime(double dato[], int clase){
asyrofi 0:b78c322e81d0 55
asyrofi 0:b78c322e81d0 56 pc.printf("-----------------------------------------------\n");
asyrofi 0:b78c322e81d0 57 pc.printf("%i",(int16_t)nomAtr[0]); pc.printf(": "); pc.printf("%i",(int16_t)dato[0],3); pc.printf(" cms\n");
asyrofi 0:b78c322e81d0 58 pc.printf("%i",(int16_t)nomAtr[1]); pc.printf(": "); pc.printf("%i",(int16_t)dato[1],3); pc.printf(" cms\n");
asyrofi 0:b78c322e81d0 59 pc.printf("%i",(int16_t)nomAtr[2]); pc.printf(": "); pc.printf("%i",(int16_t)dato[2],3); pc.printf(" cms\n");
asyrofi 0:b78c322e81d0 60 pc.printf("%i",(int16_t)nomAtr[3]); pc.printf(": "); pc.printf("%i",(int16_t)dato[3],3); pc.printf(" cms\b");
asyrofi 0:b78c322e81d0 61 pc.printf(" >> Clase: "); pc.printf("%i\n",(int16_t)clasesSt[clase]);
asyrofi 0:b78c322e81d0 62 }
asyrofi 0:b78c322e81d0 63
asyrofi 0:b78c322e81d0 64 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 65 // Configuracion del microcontrolador
asyrofi 0:b78c322e81d0 66 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 67 int main()
asyrofi 0:b78c322e81d0 68 {
asyrofi 0:b78c322e81d0 69 pc.baud(9600);
asyrofi 0:b78c322e81d0 70 //Serial.begin(9600);
asyrofi 0:b78c322e81d0 71 wait(0.1);
asyrofi 0:b78c322e81d0 72 pc.printf("===============================================\n");
asyrofi 0:b78c322e81d0 73 pc.printf("=== KKN Classification ===\n");
asyrofi 0:b78c322e81d0 74 pc.printf("===============================================\n");
asyrofi 0:b78c322e81d0 75 wait(0.05);
asyrofi 0:b78c322e81d0 76
asyrofi 0:b78c322e81d0 77 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 78 // Programa principal
asyrofi 0:b78c322e81d0 79 //-----------------------------------------------------------------------
asyrofi 0:b78c322e81d0 80 while(1)
asyrofi 0:b78c322e81d0 81 {
asyrofi 0:b78c322e81d0 82
asyrofi 0:b78c322e81d0 83 // recibir los datos a clasificar
asyrofi 0:b78c322e81d0 84 if(Serial.available())
asyrofi 0:b78c322e81d0 85 {
asyrofi 0:b78c322e81d0 86
asyrofi 0:b78c322e81d0 87 // recibir una cadena hasta que se tenga el '\n'
asyrofi 0:b78c322e81d0 88 string str = Serial.readStringUntil('\n');
asyrofi 0:b78c322e81d0 89 extraeDatos(str, dato, "{,}");
asyrofi 0:b78c322e81d0 90
asyrofi 0:b78c322e81d0 91 // tic
asyrofi 0:b78c322e81d0 92 previo = millis();
asyrofi 0:b78c322e81d0 93
asyrofi 0:b78c322e81d0 94 // encontrar la clase, con 5 vecinos cercanos
asyrofi 0:b78c322e81d0 95 int cl = clasificaKNN((double**)atributos, clasesNo, dato, 11, FI, CO);
asyrofi 0:b78c322e81d0 96 pc.printf("%i\n",(int16_t)cl);
asyrofi 0:b78c322e81d0 97
asyrofi 0:b78c322e81d0 98 // tac
asyrofi 0:b78c322e81d0 99 actual = millis();
asyrofi 0:b78c322e81d0 100
asyrofi 0:b78c322e81d0 101 // imprimir
asyrofi 0:b78c322e81d0 102 imprime(dato, cl);
asyrofi 0:b78c322e81d0 103 pc.printf("Tiempo: "); pc.printf("%i\n",(int16_t)actual-previo); pc.printf(" mS\n");
asyrofi 0:b78c322e81d0 104 }
asyrofi 0:b78c322e81d0 105 }
asyrofi 0:b78c322e81d0 106 }
asyrofi 0:b78c322e81d0 107
asyrofi 0:b78c322e81d0 108