rakha asyrofi
/
KNN_coba
machine learning mbed
main.cpp
- Committer:
- asyrofi
- Date:
- 2018-04-14
- Revision:
- 0:b78c322e81d0
File content as of revision 0:b78c322e81d0:
#include "mbed.h" #include "dataset.h" #include "funcionesKNN.h" #include <string> Serial pc(USBTX, USBRX); #define FI 100 // filas de la base de datos #define CO 4 // numero de caracteristicas // variables /*char* clasesSt[3]; // strings con las clases char* nomAtr[CO]; // strings con los nombres de atributos double atributos[FI][CO]; // atributos int clasesNo[FI]; // clases */ double dato[CO]; // dato a clasificar long actual = 0, previo = 0; //----------------------------------------------------------------------- // Extrae caracteres dados los identificadores y los convierte a double //----------------------------------------------------------------------- void extraeDatos(string str, double dato[], char dlm[]){ string auxstr = ""; int posdlm[5], tamstr = 0; int i= 0, j = 0; // buscar caracteres de identificacion posdlm[0] = str.indexOf(dlm[0]); // ( posdlm[1] = str.indexOf(dlm[1]); // , posdlm[2] = str.indexOf(dlm[1], posdlm[1] + 1); // , posdlm[3] = str.indexOf(dlm[1], posdlm[2] + 1); // , posdlm[4] = str.indexOf(dlm[2]); // ) for(j=0; j<CO; j++){ // extraer datos numericos for(i=posdlm[j]+1; i<posdlm[j+1]; i++){ auxstr = auxstr + str[i]; } //convertir a double int y = auxstr.length(); char buf[y+1]; auxstr.toCharArray(buf, y+1); dato[j] = atof(buf); //Serial.println(dato[j],3); auxstr=""; // reset del auxiliar } } //----------------------------------------------------------------------- // Impresion de confirmacion //----------------------------------------------------------------------- void imprime(double dato[], int clase){ pc.printf("-----------------------------------------------\n"); pc.printf("%i",(int16_t)nomAtr[0]); pc.printf(": "); pc.printf("%i",(int16_t)dato[0],3); pc.printf(" cms\n"); pc.printf("%i",(int16_t)nomAtr[1]); pc.printf(": "); pc.printf("%i",(int16_t)dato[1],3); pc.printf(" cms\n"); pc.printf("%i",(int16_t)nomAtr[2]); pc.printf(": "); pc.printf("%i",(int16_t)dato[2],3); pc.printf(" cms\n"); pc.printf("%i",(int16_t)nomAtr[3]); pc.printf(": "); pc.printf("%i",(int16_t)dato[3],3); pc.printf(" cms\b"); pc.printf(" >> Clase: "); pc.printf("%i\n",(int16_t)clasesSt[clase]); } //----------------------------------------------------------------------- // Configuracion del microcontrolador //----------------------------------------------------------------------- int main() { pc.baud(9600); //Serial.begin(9600); wait(0.1); pc.printf("===============================================\n"); pc.printf("=== KKN Classification ===\n"); pc.printf("===============================================\n"); wait(0.05); //----------------------------------------------------------------------- // Programa principal //----------------------------------------------------------------------- while(1) { // recibir los datos a clasificar if(Serial.available()) { // recibir una cadena hasta que se tenga el '\n' string str = Serial.readStringUntil('\n'); extraeDatos(str, dato, "{,}"); // tic previo = millis(); // encontrar la clase, con 5 vecinos cercanos int cl = clasificaKNN((double**)atributos, clasesNo, dato, 11, FI, CO); pc.printf("%i\n",(int16_t)cl); // tac actual = millis(); // imprimir imprime(dato, cl); pc.printf("Tiempo: "); pc.printf("%i\n",(int16_t)actual-previo); pc.printf(" mS\n"); } } }