059,062

Dependencies:   mbed

main.cpp

Committer:
larmedo
Date:
2015-12-09
Revision:
1:974e31e928ce
Parent:
0:681bc2aada6f

File content as of revision 1:974e31e928ce:

#include "mbed.h"
#include <math.h>


SPI My_SPI(D11,D12,D13);
DigitalOut cs(D10);


AnalogIn Analog_in(A5);

Serial pc(PA_11,PA_12);
//Serial pc(PA_2,PA_3);

void Point_Smile(int);

int main() 
{
    My_SPI.frequency(100000);
    My_SPI.format(8,0);
   
    uint8_t state_show=0;
    uint8_t data_a[5]={ '0','0','0','0','0' },data='0';
    int Colum[4]={0x00,0x00,0x00,0x00},Colum_level[4]={0x00,0x00,0x00,0x00},i=0,point=0;
    int data_level[4]={ 0,0,0,0 },data_b[4]={ 0,0,0,0 };
    float data_point[4],data_poi=0,analog_read=0;
    cs=0;
    My_SPI.write(0xFF);   //R  
    My_SPI.write(0xFF);   //G 
    My_SPI.write(0xFF);   //B
    My_SPI.write(0x00);   //row     
    cs=1;
   
    while (1)
    {
        if (state_show==0)
        {
            pc.printf("Menu\n");
            pc.printf("1.Set Colum 1\n");
            pc.printf("2.Set Colum 2\n");
            pc.printf("3.Set Colum 3\n");
            pc.printf("4.Set Colum 4\n");
            pc.printf("5.Send command\n");
            state_show=1;
        }
        
        if(pc.readable()) 
        {
            data = pc.getc();
            pc.printf("\n");
                if (data=='1')
                {
                    pc.printf("Select level sound Put 1-4\n");
                    while (data == '1')
                    {
                        data_a[0] = pc.getc();
                    
                        if( data_a[0]=='1' || data_a[0]=='2' || data_a[0]=='3' || data_a[0]=='4' )
                        {
                            data = '0';
                            state_show=0;
                        }
                        else 
                        {
                            pc.printf("Error Please Put 1-4\n");
                        }
                    }
                }
                
                else if (data=='2')
                {
                    pc.printf("Select level sound Put 1-4\n");
                    while (data == '2')
                    {
                        data_a[1] = pc.getc();
                    
                        if( data_a[1]=='1' || data_a[1]=='2' || data_a[1]=='3' || data_a[1]=='4' )
                        {
                            data = '0';
                            state_show=0;
                        }
                        else 
                        {
                            pc.printf("Error Please Put 1-4\n");
                        }
                    }
                }
                
                else if (data=='3')
                {
                    pc.printf("Select level sound Put 1-4\n");
                    while (data == '3')
                    {
                        data_a[2] = pc.getc();
                    
                        if( data_a[2]=='1' || data_a[2]=='2' || data_a[2]=='3' || data_a[2]=='4' )
                        {
                            data = '0';
                            state_show=0;
                        }
                        else 
                        {
                            pc.printf("Error Please Put 1-4\n");
                        }
                    }
                }
                
                else if (data=='4')
                {
                    pc.printf("Select level sound Put 1-4\n");
                    while (data == '4')
                    {
                        data_a[3] = pc.getc();
                    
                        if( data_a[3]=='1' || data_a[3]=='2' || data_a[3]=='3' || data_a[3]=='4' )
                        {
                            data = '0';
                            state_show=0;
                        }
                        else 
                        {
                            pc.printf("Error Please Put 1-4\n");
                        }
                    }
                }
                
                else if (data=='5')
                {
                    
                    if ( data_a[0]=='0' || data_a[1]=='0' || data_a[2]=='0' || data_a[3]=='0')
                    {
                        pc.printf("Please Set All Colum \n");
                        data = '0';
                        state_show=0;
                    }
                    
                    else
                    {
                        //แสดงไฟตามค่า(ส่งค่าไป)
                        
                        for(i=0;i<4;i++)
                            {
                                if (data_a[i]=='1')
                                {   Colum[i]=0xC0;
                                    data_b[i]=1;
                                }
                                else if (data_a[i]=='2')
                                {
                                    Colum[i]=0xF0;
                                    data_b[i]=2;
                                }
                                else if (data_a[i]=='3')
                                {
                                    Colum[i]=0xFC;
                                    data_b[i]=3;
                                }
                                else if (data_a[i]=='4')
                                {
                                    Colum[i]=0xFF;
                                    data_b[i]=4;
                                }
                            }
                            
                        for( i=0; i<10000; i++) 
                            {
                                cs=0;
                                My_SPI.write(0xFC);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[0]);   //row     
                                cs=1;
        
                                cs=0;
                                My_SPI.write(0xF3);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[1]);   //row     
                                cs=1;
        
                                cs=0;
                                My_SPI.write(0xCF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[2]);   //row     
                                cs=1;
                                
                                cs=0;
                                My_SPI.write(0x3F);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[3]);   //row     
                                cs=1;
                                
                                wait(0.0001f);
                            }
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                                
                        //การเก็บค่าและคำนวนคะแนน   เสียง 3วิ7500
                        for( i=0; i<1500; i++) 
                            {
                                cs=0;
                                My_SPI.write(0xFC);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[0]);   //row     
                                cs=1;
                                //เก็บค่าเสียง
                                    if(i==1000)
                                    {
                                    analog_read=Analog_in.read();
                                    analog_read=analog_read*4;
                                    }
                                wait(0.001);
                            }
                                //คำนวนคะแนนว่าได้ระดับไหน(1-4)
                                if(analog_read>0.1 && analog_read<=1.2)
                                data_level[0]=1;
                                else if(analog_read>1.2 && analog_read<=2.3)
                                data_level[0]=2;
                                else if(analog_read>2.3 && analog_read<=3.6)
                                data_level[0]=3;
                                else if(analog_read>3.6 && analog_read<=4)
                                data_level[0]=4;
                                
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                                
                        for( i=0; i<1500; i++) 
                            {
                                cs=0;
                                My_SPI.write(0xF3);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[1]);   //row     
                                cs=1;
                                //เก็บค่าเสียง
                                if(i==1000)
                                    {
                                    analog_read=Analog_in.read();
                                    analog_read=analog_read*4;
                                    }
                                wait(0.001);
                            }
                                //คำนวนคะแนนว่าได้ระดับไหน(1-4)
                                if(analog_read>0.1 && analog_read<=1.2)
                                data_level[1]=1;
                                else if(analog_read>1.2 && analog_read<=2.3)
                                data_level[1]=2;
                                else if(analog_read>2.3 && analog_read<=3.6)
                                data_level[1]=3;
                                else if(analog_read>3.6 && analog_read<=4)
                                data_level[1]=4;
                                
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                                
                        for( i=0; i<1500; i++) 
                            {
                                cs=0;
                                My_SPI.write(0xCF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[2]);   //row     
                                cs=1;
                                //เก็บค่าเสียง
                                if(i==1000)
                                    {
                                    analog_read=Analog_in.read();
                                    analog_read=analog_read*4;
                                    }
                                wait(0.001);
                            }
                                //คำนวนคะแนนว่าได้ระดับไหน(1-4)
                                if(analog_read>0.1 && analog_read<=1.2)
                                data_level[2]=1;
                                else if(analog_read>1.2 && analog_read<=2.3)
                                data_level[2]=2;
                                else if(analog_read>2.3 && analog_read<=3.6)
                                data_level[2]=3;
                                else if(analog_read>3.6 && analog_read<=4)
                                data_level[2]=4;
                                
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                        
                        for( i=0; i<1500; i++) 
                            {
                                cs=0;
                                My_SPI.write(0x3F);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum[3]);   //row     
                                cs=1;
                                //เก็บค่าเสียง
                                if(i==1000)
                                    {
                                    analog_read=Analog_in.read();
                                    analog_read=analog_read*4;
                                    }
                                wait(0.001);
                            }
                                //คำนวนคะแนนว่าได้ระดับไหน(1-4)
                                if(analog_read>0.1 && analog_read<=1.2)
                                data_level[3]=1;
                                else if(analog_read>1.2 && analog_read<=2.3)
                                data_level[3]=2;
                                else if(analog_read>2.3 && analog_read<=3.6)
                                data_level[3]=3;
                                else if(analog_read>3.6 && analog_read<=4)
                                data_level[3]=4;
                                
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                            
                            
                            
                            
                            
                            
                            
                        
                        //เรียกฟังชันแสดงค่าไฟตามคะแนนที่ได้
                        
                        for(i=0;i<4;i++)
                            {
                                if (data_level[i]==1)
                                {Colum_level[i]=0xC0;}
                                else if (data_level[i]==2)
                                {Colum_level[i]=0xF0;}
                                else if (data_level[i]==3)
                                {Colum_level[i]=0xFC;}
                                else if (data_level[i]==4)
                                {Colum_level[i]=0xFF;}
                            }
                            
                        for( i=0; i<10000; i++) 
                            {
                                cs=0;
                                My_SPI.write(0xFC);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum_level[0]);   //row     
                                cs=1;
        
                                cs=0;
                                My_SPI.write(0xF3);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum_level[1]);   //row     
                                cs=1;
        
                                cs=0;
                                My_SPI.write(0xCF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum_level[2]);   //row     
                                cs=1;
                                
                                cs=0;
                                My_SPI.write(0x3F);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(Colum_level[3]);   //row     
                                cs=1;
                                
                                wait(0.0001f);
                            }
                                cs=0;
                                My_SPI.write(0xFF);   //R  
                                My_SPI.write(0xFF);   //G 
                                My_SPI.write(0xFF);   //B
                                My_SPI.write(0x00);   //row     
                                cs=1;
                                
                            
                        
                        //คำนวนคะแนนรวม
                        for(i=0;i<4;i++)
                        {
                                if(data_level[i]<=data_b[i])
                                {
                                    data_point[i]=(data_level[i]*100)/data_b[i];
                                }
                                else if(data_level[i]>data_b[i])
                                {
                                    data_point[i]=((data_b[i]-(data_level[i]-data_b[i]))*100)/data_b[i];
                                }
                                data_poi=data_poi+data_point[i];
                        }
                        point=((data_poi/4)*5)/100;
                        Point_Smile(point);
                                                
                        //ฟังก์ชันแสดงหน้ายิ้มจากคะแนรวม
                        data_poi=0;
                        data = '0';
                        state_show=0;
                    }

                    
                    
                    
                    
                }
                
            
        }
        
    
    }
}




void Point_Smile(int point)
{
    if(point==0 || point<0)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xDB);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xBD);   //R  
                My_SPI.write(0xBD);   //G 
                My_SPI.write(0xBD);   //B
                My_SPI.write(0x08);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xC3);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                
                cs=0;
                My_SPI.write(0xBD);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x40);   //row     
                cs=1;
                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
    
    else if(point==1)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xDB);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xBD);   //R  
                My_SPI.write(0xBD);   //G 
                My_SPI.write(0xBD);   //B
                My_SPI.write(0x08);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xC3);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                
                cs=0;
                My_SPI.write(0xBD);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x40);   //row     
                cs=1;
                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
    
    
    else if(point==2)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xDB);   //R  
                My_SPI.write(0xDB);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xC3);   //R  
                My_SPI.write(0xC3);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                
                cs=0;
                My_SPI.write(0xBD);   //R  
                My_SPI.write(0xBD);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x40);   //row     
                cs=1;
                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
    
    
    else if(point==3)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xDB);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0x81);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                

                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
    
    else if(point==4)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xDB);   //G 
                My_SPI.write(0xDB);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xBD);   //G 
                My_SPI.write(0xBD);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xC3);   //G 
                My_SPI.write(0xC3);   //B
                My_SPI.write(0x40);   //row     
                cs=1;
                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
    
    else if(point==5)
    {
        for(int i=0; i<15000; i++) 
            {
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xDB);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x04);   //row     
                cs=1;
        
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0x81);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x20);   //row     
                cs=1;
                                
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xC3);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x40);   //row     
                cs=1;
                                
                wait(0.0001f);
            }
                cs=0;
                My_SPI.write(0xFF);   //R  
                My_SPI.write(0xFF);   //G 
                My_SPI.write(0xFF);   //B
                My_SPI.write(0x00);   //row     
                cs=1;
    }
}