NM500 TEST PGM

Dependencies:   NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed

Revision:
11:6a81bde51be5
Parent:
10:74e762848659
Child:
12:c8fbe49527e7
--- a/main.cpp	Fri May 19 07:26:18 2017 +0000
+++ b/main.cpp	Mon May 29 04:32:29 2017 +0000
@@ -5,23 +5,23 @@
 int data_classify(void);
 
 Timer t, st;
-
+//Serial pc(SERIAL_TX, SERIAL_RX);
 unsigned char vector[NEURONSIZE];
 
-int main() {
-    //time measure start
-    t.start();
-    
+int main() { 
     //NM500 & SD Card Init
     if(begin() == 0)
         printf("\n\nNM500 Init\n");
     else
-        error("Init error");          
-
+        printf("\nInit error\n");          
+    
+    //time measure start
+    t.start();
+    
     //minif test
     write(NM_MINIF,3);
     int minif = read(NM_MINIF);
-    
+
     //maxif test
     write(NM_MAXIF,10000);  
     int maxif = read(NM_MAXIF);
@@ -33,17 +33,23 @@
      
     st.start();          
     //Neuron learn
+    printf("Learn Start\n");
     int learn = data_learn();
+    if(learn == 0x7fff)     //change
+        learn = MAXNEURONS;
     st.stop(); 
-    printf("Learn complete\n");
+    printf("Learn Complete\n");
     printf("Learn Time : %d ms\n",st.read_ms());
+    st.reset();
     
     //data save
     st.start();
+    printf("Save Start\n");
     int save = NeuronToSD();
     st.stop();
     printf("Save Complete\n");
     printf("Save Time : %d ms\n",st.read_ms());
+    st.reset();
     
     //forget
     forget();
@@ -51,14 +57,17 @@
     
     //restore
     st.start();
+    printf("Restore Start\n");
     int restore = SDToNeurons();
     st.stop();
     printf("Restore Complete\n");
     printf("Restore Time : %d ms\n",st.read_ms());
+    st.reset();
     
     setKNN();
     //classify
     st.start();
+    printf("Classify Start\n");
     int classify = data_classify();
     st.stop();
     printf("Classify Complete\n");
@@ -101,9 +110,9 @@
         printf("Daisy Chain # FAIL\n");
         printf("Learn # PASS\n");
     }
-    else if(learn == 0){
+    else {
         printf("Daisy Chain # unknown\n");
-        printf("Learn # FAIL\n");        
+        printf("# %d Neuron Learn FAIL\n",learn);        
     }
     
     //classify result
@@ -115,8 +124,8 @@
         printf("Classify # PASS\n");
         printf("Distance # FAIL\n");
     }
-    else if(classify == 0){
-        printf("Classify # FAIL\n");
+    else {
+        printf("# %d Neuron Classify FAIL\n",classify);
         printf("Distance # PASS\n");
     }
     
@@ -149,22 +158,21 @@
             }
             //data learn
             ncnt = learn(vector, NEURONSIZE, i);    //input : data, neuronsize, cat,   return : ncount
+            if(ncnt == 0x7fff)     //change
+                ncnt = MAXNEURONS;
             //printf("ncount # %d\n",ncnt);
             
-            if(ncnt == old_ncnt)                    //ncount가 변화가 없으면       
-                return 0;       //학습 실패 or ncount 레지스터 불량
-            else                                    //ncount가 증가하였을 경우
+            if(ncnt == old_ncnt)    //ncount가 변화가 없으면  
+                printf("\nNeuron Learn Fail # %d\n",ncnt);     
+            else                    //ncount가 증가하였을 경우
                 old_ncnt = ncnt;    //old ncount 갱신
 
-            
-            //test display
-           // printf("vector : ");
-//            for(int j=0;j<NEURONSIZE;j++)
-//                printf(" %d,",vector[j]);
-//            printf(" cat : %d\n", i);
+            printf(".");
         } 
+        printf("\n");
+        printf("NCOUNT : %d\n",ncnt);
         //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우
-        if(ncnt < MAXNEURONS)
+        if(ncnt == MAXNEURONS/2)
             return 2;       //데이지체인 불량
         return ncnt;        //정상 출력
 }
@@ -177,20 +185,29 @@
         //test 벡터 생성
         for(int j =0;j<NEURONSIZE;j=j+2){   //size of neuron 256
             vector[j] = i>>8;               //upper bit save
-            vector[j+1] = i;           //low bit save
+            vector[j+1] = i;                //low bit save
         }
-        //분류(knn모드, k=2)
+
         //input : data, data length      output : distance, category, Neuron ID      return 인식된 데이터 갯수
         int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid);
-        if(i!=cat)
-            return 0;       //분류 실패
-        if(distance != 0)
+        printf(".");
+        printf(" neuron# %d \t", nid);
+        printf(" distance = %d,\t ", distance);
+        printf(" cat = %d\n", cat);
+
+        if(nid!=cat){
+            printf("Classify Fail # %d \n",nid);
+            return cat;       //분류 실패
+        }
+        if(distance != 0){
+            printf("Distance Fail \n");
             return 2;       //distance error
-//
-//        printf(" neuron# %d \t", nid);
-//        printf(" distance = %d,\t ", distance);
-//        printf(" cat = %d\n", cat);
-    }  
+        }
+    
+    }
+    printf("\n");  
     return 1;       //정상 분류
 } 
 
+
+