059,062

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <math.h>
00003 
00004 
00005 SPI My_SPI(D11,D12,D13);
00006 DigitalOut cs(D10);
00007 
00008 
00009 AnalogIn Analog_in(A5);
00010 
00011 Serial pc(PA_11,PA_12);
00012 //Serial pc(PA_2,PA_3);
00013 
00014 void Point_Smile(int);
00015 
00016 int main() 
00017 {
00018     My_SPI.frequency(100000);
00019     My_SPI.format(8,0);
00020    
00021     uint8_t state_show=0;
00022     uint8_t data_a[5]={ '0','0','0','0','0' },data='0';
00023     int Colum[4]={0x00,0x00,0x00,0x00},Colum_level[4]={0x00,0x00,0x00,0x00},i=0,point=0;
00024     int data_level[4]={ 0,0,0,0 },data_b[4]={ 0,0,0,0 };
00025     float data_point[4],data_poi=0,analog_read=0;
00026     cs=0;
00027     My_SPI.write(0xFF);   //R  
00028     My_SPI.write(0xFF);   //G 
00029     My_SPI.write(0xFF);   //B
00030     My_SPI.write(0x00);   //row     
00031     cs=1;
00032    
00033     while (1)
00034     {
00035         if (state_show==0)
00036         {
00037             pc.printf("Menu\n");
00038             pc.printf("1.Set Colum 1\n");
00039             pc.printf("2.Set Colum 2\n");
00040             pc.printf("3.Set Colum 3\n");
00041             pc.printf("4.Set Colum 4\n");
00042             pc.printf("5.Send command\n");
00043             state_show=1;
00044         }
00045         
00046         if(pc.readable()) 
00047         {
00048             data = pc.getc();
00049             pc.printf("\n");
00050                 if (data=='1')
00051                 {
00052                     pc.printf("Select level sound Put 1-4\n");
00053                     while (data == '1')
00054                     {
00055                         data_a[0] = pc.getc();
00056                     
00057                         if( data_a[0]=='1' || data_a[0]=='2' || data_a[0]=='3' || data_a[0]=='4' )
00058                         {
00059                             data = '0';
00060                             state_show=0;
00061                         }
00062                         else 
00063                         {
00064                             pc.printf("Error Please Put 1-4\n");
00065                         }
00066                     }
00067                 }
00068                 
00069                 else if (data=='2')
00070                 {
00071                     pc.printf("Select level sound Put 1-4\n");
00072                     while (data == '2')
00073                     {
00074                         data_a[1] = pc.getc();
00075                     
00076                         if( data_a[1]=='1' || data_a[1]=='2' || data_a[1]=='3' || data_a[1]=='4' )
00077                         {
00078                             data = '0';
00079                             state_show=0;
00080                         }
00081                         else 
00082                         {
00083                             pc.printf("Error Please Put 1-4\n");
00084                         }
00085                     }
00086                 }
00087                 
00088                 else if (data=='3')
00089                 {
00090                     pc.printf("Select level sound Put 1-4\n");
00091                     while (data == '3')
00092                     {
00093                         data_a[2] = pc.getc();
00094                     
00095                         if( data_a[2]=='1' || data_a[2]=='2' || data_a[2]=='3' || data_a[2]=='4' )
00096                         {
00097                             data = '0';
00098                             state_show=0;
00099                         }
00100                         else 
00101                         {
00102                             pc.printf("Error Please Put 1-4\n");
00103                         }
00104                     }
00105                 }
00106                 
00107                 else if (data=='4')
00108                 {
00109                     pc.printf("Select level sound Put 1-4\n");
00110                     while (data == '4')
00111                     {
00112                         data_a[3] = pc.getc();
00113                     
00114                         if( data_a[3]=='1' || data_a[3]=='2' || data_a[3]=='3' || data_a[3]=='4' )
00115                         {
00116                             data = '0';
00117                             state_show=0;
00118                         }
00119                         else 
00120                         {
00121                             pc.printf("Error Please Put 1-4\n");
00122                         }
00123                     }
00124                 }
00125                 
00126                 else if (data=='5')
00127                 {
00128                     
00129                     if ( data_a[0]=='0' || data_a[1]=='0' || data_a[2]=='0' || data_a[3]=='0')
00130                     {
00131                         pc.printf("Please Set All Colum \n");
00132                         data = '0';
00133                         state_show=0;
00134                     }
00135                     
00136                     else
00137                     {
00138                         //แสดงไฟตามค่า(ส่งค่าไป)
00139                         
00140                         for(i=0;i<4;i++)
00141                             {
00142                                 if (data_a[i]=='1')
00143                                 {   Colum[i]=0xC0;
00144                                     data_b[i]=1;
00145                                 }
00146                                 else if (data_a[i]=='2')
00147                                 {
00148                                     Colum[i]=0xF0;
00149                                     data_b[i]=2;
00150                                 }
00151                                 else if (data_a[i]=='3')
00152                                 {
00153                                     Colum[i]=0xFC;
00154                                     data_b[i]=3;
00155                                 }
00156                                 else if (data_a[i]=='4')
00157                                 {
00158                                     Colum[i]=0xFF;
00159                                     data_b[i]=4;
00160                                 }
00161                             }
00162                             
00163                         for( i=0; i<10000; i++) 
00164                             {
00165                                 cs=0;
00166                                 My_SPI.write(0xFC);   //R  
00167                                 My_SPI.write(0xFF);   //G 
00168                                 My_SPI.write(0xFF);   //B
00169                                 My_SPI.write(Colum[0]);   //row     
00170                                 cs=1;
00171         
00172                                 cs=0;
00173                                 My_SPI.write(0xF3);   //R  
00174                                 My_SPI.write(0xFF);   //G 
00175                                 My_SPI.write(0xFF);   //B
00176                                 My_SPI.write(Colum[1]);   //row     
00177                                 cs=1;
00178         
00179                                 cs=0;
00180                                 My_SPI.write(0xCF);   //R  
00181                                 My_SPI.write(0xFF);   //G 
00182                                 My_SPI.write(0xFF);   //B
00183                                 My_SPI.write(Colum[2]);   //row     
00184                                 cs=1;
00185                                 
00186                                 cs=0;
00187                                 My_SPI.write(0x3F);   //R  
00188                                 My_SPI.write(0xFF);   //G 
00189                                 My_SPI.write(0xFF);   //B
00190                                 My_SPI.write(Colum[3]);   //row     
00191                                 cs=1;
00192                                 
00193                                 wait(0.0001f);
00194                             }
00195                                 cs=0;
00196                                 My_SPI.write(0xFF);   //R  
00197                                 My_SPI.write(0xFF);   //G 
00198                                 My_SPI.write(0xFF);   //B
00199                                 My_SPI.write(0x00);   //row     
00200                                 cs=1;
00201                                 
00202                         //การเก็บค่าและคำนวนคะแนน   เสียง 3วิ7500
00203                         for( i=0; i<1500; i++) 
00204                             {
00205                                 cs=0;
00206                                 My_SPI.write(0xFC);   //R  
00207                                 My_SPI.write(0xFF);   //G 
00208                                 My_SPI.write(0xFF);   //B
00209                                 My_SPI.write(Colum[0]);   //row     
00210                                 cs=1;
00211                                 //เก็บค่าเสียง
00212                                     if(i==1000)
00213                                     {
00214                                     analog_read=Analog_in.read();
00215                                     analog_read=analog_read*4;
00216                                     }
00217                                 wait(0.001);
00218                             }
00219                                 //คำนวนคะแนนว่าได้ระดับไหน(1-4)
00220                                 if(analog_read>0.1 && analog_read<=1.2)
00221                                 data_level[0]=1;
00222                                 else if(analog_read>1.2 && analog_read<=2.3)
00223                                 data_level[0]=2;
00224                                 else if(analog_read>2.3 && analog_read<=3.6)
00225                                 data_level[0]=3;
00226                                 else if(analog_read>3.6 && analog_read<=4)
00227                                 data_level[0]=4;
00228                                 
00229                                 cs=0;
00230                                 My_SPI.write(0xFF);   //R  
00231                                 My_SPI.write(0xFF);   //G 
00232                                 My_SPI.write(0xFF);   //B
00233                                 My_SPI.write(0x00);   //row     
00234                                 cs=1;
00235                                 
00236                         for( i=0; i<1500; i++) 
00237                             {
00238                                 cs=0;
00239                                 My_SPI.write(0xF3);   //R  
00240                                 My_SPI.write(0xFF);   //G 
00241                                 My_SPI.write(0xFF);   //B
00242                                 My_SPI.write(Colum[1]);   //row     
00243                                 cs=1;
00244                                 //เก็บค่าเสียง
00245                                 if(i==1000)
00246                                     {
00247                                     analog_read=Analog_in.read();
00248                                     analog_read=analog_read*4;
00249                                     }
00250                                 wait(0.001);
00251                             }
00252                                 //คำนวนคะแนนว่าได้ระดับไหน(1-4)
00253                                 if(analog_read>0.1 && analog_read<=1.2)
00254                                 data_level[1]=1;
00255                                 else if(analog_read>1.2 && analog_read<=2.3)
00256                                 data_level[1]=2;
00257                                 else if(analog_read>2.3 && analog_read<=3.6)
00258                                 data_level[1]=3;
00259                                 else if(analog_read>3.6 && analog_read<=4)
00260                                 data_level[1]=4;
00261                                 
00262                                 cs=0;
00263                                 My_SPI.write(0xFF);   //R  
00264                                 My_SPI.write(0xFF);   //G 
00265                                 My_SPI.write(0xFF);   //B
00266                                 My_SPI.write(0x00);   //row     
00267                                 cs=1;
00268                                 
00269                         for( i=0; i<1500; i++) 
00270                             {
00271                                 cs=0;
00272                                 My_SPI.write(0xCF);   //R  
00273                                 My_SPI.write(0xFF);   //G 
00274                                 My_SPI.write(0xFF);   //B
00275                                 My_SPI.write(Colum[2]);   //row     
00276                                 cs=1;
00277                                 //เก็บค่าเสียง
00278                                 if(i==1000)
00279                                     {
00280                                     analog_read=Analog_in.read();
00281                                     analog_read=analog_read*4;
00282                                     }
00283                                 wait(0.001);
00284                             }
00285                                 //คำนวนคะแนนว่าได้ระดับไหน(1-4)
00286                                 if(analog_read>0.1 && analog_read<=1.2)
00287                                 data_level[2]=1;
00288                                 else if(analog_read>1.2 && analog_read<=2.3)
00289                                 data_level[2]=2;
00290                                 else if(analog_read>2.3 && analog_read<=3.6)
00291                                 data_level[2]=3;
00292                                 else if(analog_read>3.6 && analog_read<=4)
00293                                 data_level[2]=4;
00294                                 
00295                                 cs=0;
00296                                 My_SPI.write(0xFF);   //R  
00297                                 My_SPI.write(0xFF);   //G 
00298                                 My_SPI.write(0xFF);   //B
00299                                 My_SPI.write(0x00);   //row     
00300                                 cs=1;
00301                         
00302                         for( i=0; i<1500; i++) 
00303                             {
00304                                 cs=0;
00305                                 My_SPI.write(0x3F);   //R  
00306                                 My_SPI.write(0xFF);   //G 
00307                                 My_SPI.write(0xFF);   //B
00308                                 My_SPI.write(Colum[3]);   //row     
00309                                 cs=1;
00310                                 //เก็บค่าเสียง
00311                                 if(i==1000)
00312                                     {
00313                                     analog_read=Analog_in.read();
00314                                     analog_read=analog_read*4;
00315                                     }
00316                                 wait(0.001);
00317                             }
00318                                 //คำนวนคะแนนว่าได้ระดับไหน(1-4)
00319                                 if(analog_read>0.1 && analog_read<=1.2)
00320                                 data_level[3]=1;
00321                                 else if(analog_read>1.2 && analog_read<=2.3)
00322                                 data_level[3]=2;
00323                                 else if(analog_read>2.3 && analog_read<=3.6)
00324                                 data_level[3]=3;
00325                                 else if(analog_read>3.6 && analog_read<=4)
00326                                 data_level[3]=4;
00327                                 
00328                                 cs=0;
00329                                 My_SPI.write(0xFF);   //R  
00330                                 My_SPI.write(0xFF);   //G 
00331                                 My_SPI.write(0xFF);   //B
00332                                 My_SPI.write(0x00);   //row     
00333                                 cs=1;
00334                             
00335                             
00336                             
00337                             
00338                             
00339                             
00340                             
00341                         
00342                         //เรียกฟังชันแสดงค่าไฟตามคะแนนที่ได้
00343                         
00344                         for(i=0;i<4;i++)
00345                             {
00346                                 if (data_level[i]==1)
00347                                 {Colum_level[i]=0xC0;}
00348                                 else if (data_level[i]==2)
00349                                 {Colum_level[i]=0xF0;}
00350                                 else if (data_level[i]==3)
00351                                 {Colum_level[i]=0xFC;}
00352                                 else if (data_level[i]==4)
00353                                 {Colum_level[i]=0xFF;}
00354                             }
00355                             
00356                         for( i=0; i<10000; i++) 
00357                             {
00358                                 cs=0;
00359                                 My_SPI.write(0xFC);   //R  
00360                                 My_SPI.write(0xFF);   //G 
00361                                 My_SPI.write(0xFF);   //B
00362                                 My_SPI.write(Colum_level[0]);   //row     
00363                                 cs=1;
00364         
00365                                 cs=0;
00366                                 My_SPI.write(0xF3);   //R  
00367                                 My_SPI.write(0xFF);   //G 
00368                                 My_SPI.write(0xFF);   //B
00369                                 My_SPI.write(Colum_level[1]);   //row     
00370                                 cs=1;
00371         
00372                                 cs=0;
00373                                 My_SPI.write(0xCF);   //R  
00374                                 My_SPI.write(0xFF);   //G 
00375                                 My_SPI.write(0xFF);   //B
00376                                 My_SPI.write(Colum_level[2]);   //row     
00377                                 cs=1;
00378                                 
00379                                 cs=0;
00380                                 My_SPI.write(0x3F);   //R  
00381                                 My_SPI.write(0xFF);   //G 
00382                                 My_SPI.write(0xFF);   //B
00383                                 My_SPI.write(Colum_level[3]);   //row     
00384                                 cs=1;
00385                                 
00386                                 wait(0.0001f);
00387                             }
00388                                 cs=0;
00389                                 My_SPI.write(0xFF);   //R  
00390                                 My_SPI.write(0xFF);   //G 
00391                                 My_SPI.write(0xFF);   //B
00392                                 My_SPI.write(0x00);   //row     
00393                                 cs=1;
00394                                 
00395                             
00396                         
00397                         //คำนวนคะแนนรวม
00398                         for(i=0;i<4;i++)
00399                         {
00400                                 if(data_level[i]<=data_b[i])
00401                                 {
00402                                     data_point[i]=(data_level[i]*100)/data_b[i];
00403                                 }
00404                                 else if(data_level[i]>data_b[i])
00405                                 {
00406                                     data_point[i]=((data_b[i]-(data_level[i]-data_b[i]))*100)/data_b[i];
00407                                 }
00408                                 data_poi=data_poi+data_point[i];
00409                         }
00410                         point=((data_poi/4)*5)/100;
00411                         Point_Smile(point);
00412                                                 
00413                         //ฟังก์ชันแสดงหน้ายิ้มจากคะแนรวม
00414                         data_poi=0;
00415                         data = '0';
00416                         state_show=0;
00417                     }
00418 
00419                     
00420                     
00421                     
00422                     
00423                 }
00424                 
00425             
00426         }
00427         
00428     
00429     }
00430 }
00431 
00432 
00433 
00434 
00435 void Point_Smile(int point)
00436 {
00437     if(point==0 || point<0)
00438     {
00439         for(int i=0; i<15000; i++) 
00440             {
00441                 cs=0;
00442                 My_SPI.write(0xDB);   //R  
00443                 My_SPI.write(0xFF);   //G 
00444                 My_SPI.write(0xFF);   //B
00445                 My_SPI.write(0x04);   //row     
00446                 cs=1;
00447         
00448                 cs=0;
00449                 My_SPI.write(0xBD);   //R  
00450                 My_SPI.write(0xBD);   //G 
00451                 My_SPI.write(0xBD);   //B
00452                 My_SPI.write(0x08);   //row     
00453                 cs=1;
00454         
00455                 cs=0;
00456                 My_SPI.write(0xC3);   //R  
00457                 My_SPI.write(0xFF);   //G 
00458                 My_SPI.write(0xFF);   //B
00459                 My_SPI.write(0x20);   //row     
00460                 cs=1;
00461                                 
00462                 cs=0;
00463                 My_SPI.write(0xBD);   //R  
00464                 My_SPI.write(0xFF);   //G 
00465                 My_SPI.write(0xFF);   //B
00466                 My_SPI.write(0x40);   //row     
00467                 cs=1;
00468                                 
00469                 wait(0.0001f);
00470             }
00471                 cs=0;
00472                 My_SPI.write(0xFF);   //R  
00473                 My_SPI.write(0xFF);   //G 
00474                 My_SPI.write(0xFF);   //B
00475                 My_SPI.write(0x00);   //row     
00476                 cs=1;
00477     }
00478     
00479     else if(point==1)
00480     {
00481         for(int i=0; i<15000; i++) 
00482             {
00483                 cs=0;
00484                 My_SPI.write(0xDB);   //R  
00485                 My_SPI.write(0xFF);   //G 
00486                 My_SPI.write(0xFF);   //B
00487                 My_SPI.write(0x04);   //row     
00488                 cs=1;
00489         
00490                 cs=0;
00491                 My_SPI.write(0xBD);   //R  
00492                 My_SPI.write(0xBD);   //G 
00493                 My_SPI.write(0xBD);   //B
00494                 My_SPI.write(0x08);   //row     
00495                 cs=1;
00496         
00497                 cs=0;
00498                 My_SPI.write(0xC3);   //R  
00499                 My_SPI.write(0xFF);   //G 
00500                 My_SPI.write(0xFF);   //B
00501                 My_SPI.write(0x20);   //row     
00502                 cs=1;
00503                                 
00504                 cs=0;
00505                 My_SPI.write(0xBD);   //R  
00506                 My_SPI.write(0xFF);   //G 
00507                 My_SPI.write(0xFF);   //B
00508                 My_SPI.write(0x40);   //row     
00509                 cs=1;
00510                                 
00511                 wait(0.0001f);
00512             }
00513                 cs=0;
00514                 My_SPI.write(0xFF);   //R  
00515                 My_SPI.write(0xFF);   //G 
00516                 My_SPI.write(0xFF);   //B
00517                 My_SPI.write(0x00);   //row     
00518                 cs=1;
00519     }
00520     
00521     
00522     else if(point==2)
00523     {
00524         for(int i=0; i<15000; i++) 
00525             {
00526                 cs=0;
00527                 My_SPI.write(0xDB);   //R  
00528                 My_SPI.write(0xDB);   //G 
00529                 My_SPI.write(0xFF);   //B
00530                 My_SPI.write(0x04);   //row     
00531                 cs=1;
00532         
00533                 cs=0;
00534                 My_SPI.write(0xC3);   //R  
00535                 My_SPI.write(0xC3);   //G 
00536                 My_SPI.write(0xFF);   //B
00537                 My_SPI.write(0x20);   //row     
00538                 cs=1;
00539                                 
00540                 cs=0;
00541                 My_SPI.write(0xBD);   //R  
00542                 My_SPI.write(0xBD);   //G 
00543                 My_SPI.write(0xFF);   //B
00544                 My_SPI.write(0x40);   //row     
00545                 cs=1;
00546                                 
00547                 wait(0.0001f);
00548             }
00549                 cs=0;
00550                 My_SPI.write(0xFF);   //R  
00551                 My_SPI.write(0xFF);   //G 
00552                 My_SPI.write(0xFF);   //B
00553                 My_SPI.write(0x00);   //row     
00554                 cs=1;
00555     }
00556     
00557     
00558     else if(point==3)
00559     {
00560         for(int i=0; i<15000; i++) 
00561             {
00562                 cs=0;
00563                 My_SPI.write(0xFF);   //R  
00564                 My_SPI.write(0xFF);   //G 
00565                 My_SPI.write(0xDB);   //B
00566                 My_SPI.write(0x04);   //row     
00567                 cs=1;
00568         
00569                 cs=0;
00570                 My_SPI.write(0xFF);   //R  
00571                 My_SPI.write(0xFF);   //G 
00572                 My_SPI.write(0x81);   //B
00573                 My_SPI.write(0x20);   //row     
00574                 cs=1;
00575                                 
00576 
00577                                 
00578                 wait(0.0001f);
00579             }
00580                 cs=0;
00581                 My_SPI.write(0xFF);   //R  
00582                 My_SPI.write(0xFF);   //G 
00583                 My_SPI.write(0xFF);   //B
00584                 My_SPI.write(0x00);   //row     
00585                 cs=1;
00586     }
00587     
00588     else if(point==4)
00589     {
00590         for(int i=0; i<15000; i++) 
00591             {
00592                 cs=0;
00593                 My_SPI.write(0xFF);   //R  
00594                 My_SPI.write(0xDB);   //G 
00595                 My_SPI.write(0xDB);   //B
00596                 My_SPI.write(0x04);   //row     
00597                 cs=1;
00598         
00599                 cs=0;
00600                 My_SPI.write(0xFF);   //R  
00601                 My_SPI.write(0xBD);   //G 
00602                 My_SPI.write(0xBD);   //B
00603                 My_SPI.write(0x20);   //row     
00604                 cs=1;
00605                                 
00606                 cs=0;
00607                 My_SPI.write(0xFF);   //R  
00608                 My_SPI.write(0xC3);   //G 
00609                 My_SPI.write(0xC3);   //B
00610                 My_SPI.write(0x40);   //row     
00611                 cs=1;
00612                                 
00613                 wait(0.0001f);
00614             }
00615                 cs=0;
00616                 My_SPI.write(0xFF);   //R  
00617                 My_SPI.write(0xFF);   //G 
00618                 My_SPI.write(0xFF);   //B
00619                 My_SPI.write(0x00);   //row     
00620                 cs=1;
00621     }
00622     
00623     else if(point==5)
00624     {
00625         for(int i=0; i<15000; i++) 
00626             {
00627                 cs=0;
00628                 My_SPI.write(0xFF);   //R  
00629                 My_SPI.write(0xDB);   //G 
00630                 My_SPI.write(0xFF);   //B
00631                 My_SPI.write(0x04);   //row     
00632                 cs=1;
00633         
00634                 cs=0;
00635                 My_SPI.write(0xFF);   //R  
00636                 My_SPI.write(0x81);   //G 
00637                 My_SPI.write(0xFF);   //B
00638                 My_SPI.write(0x20);   //row     
00639                 cs=1;
00640                                 
00641                 cs=0;
00642                 My_SPI.write(0xFF);   //R  
00643                 My_SPI.write(0xC3);   //G 
00644                 My_SPI.write(0xFF);   //B
00645                 My_SPI.write(0x40);   //row     
00646                 cs=1;
00647                                 
00648                 wait(0.0001f);
00649             }
00650                 cs=0;
00651                 My_SPI.write(0xFF);   //R  
00652                 My_SPI.write(0xFF);   //G 
00653                 My_SPI.write(0xFF);   //B
00654                 My_SPI.write(0x00);   //row     
00655                 cs=1;
00656     }
00657 }