NM500 TEST PGM
Dependencies: NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed
Diff: main.cpp
- 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; //정상 분류 } + +