Wrong trackbar value when using it to control leds brightness

Discussion in 'C#' started by firstoption, Apr 19, 2014.

  1. firstoption

    firstoption New Member

    Joined:
    Apr 1, 2014
    Messages:
    8
    Likes Received:
    0
    Trophy Points:
    0
    Good day to all,
    Please i need your support on how to solve this problem.I am using the Trackbar to control the brightness of Leds but the value of the Trackbar I am getting in(%) does not corespond to the led's brightness.For example if i move the Trackbar slider to say 50%,the Oscilloscope will show something like 30%,if i move the slider further say to 80%,the Oscilloscope may show something like 50% or 60% or at times the PWM Signal will disappear.I have gone through my codes but i was unable to locate the error.My assumption is that the calculation and conversion i made contain
    error but i do not know how to figure it out.i will highly appreciate it if somebody could put me through on how to sort the problem .Below are my codes:
    C# CODE://this is code the Graphic User Interface uses in order to send data to the microcontroller
    Code:
            private void button3_Click(object sender, EventArgs e)
            {
                
                string  dataToWrite = "a" ;
                UInt32 numBytesWritten = 1;
                myFtdiDevice.Write(dataToWrite, dataToWrite.Length, ref numBytesWritten);
    
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                string dataToWrite = "b";
                UInt32 numBytesWritten = 1;
                myFtdiDevice.Write(dataToWrite, dataToWrite.Length, ref numBytesWritten);
    
            }
    
    
            private void trackBar1_Scroll(object sender, EventArgs e)
            {  
                UInt32 numBytesWritten = 1;
    
                int percent = (int)(((double)trackBar1.Value / (double)trackBar1.Maximum) * 100);
                label2.Text = (percent.ToString()) + "%";
     
                 if(percent <= 9)//this IF condition send string from "0" to "9"
                   {
                       chdata[0] = "1";
                       myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten);
                       chdata[0] = Convert.ToString(percent);
                       myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten);
                   }
                   else //this ELSE  condition sends string from "10" to "99"
                   {
                       chdata[0] = "2"; // The  "2" here  represents the length of the string being sent
                       myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten);
                       dgdata[0] = percent/ 10;
                       chdata[0] = Convert.ToString(dgdata[0]);
                       myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten);
                       dgdata[1] = percent % 10;
                       chdata[0] = Convert.ToString(dgdata[1]);
                       myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten);
                  
                   }
             
                
              }
    
    
    
    C-CODE SECTION://This code is used by the microcontroller to process the data it receives from the Graphic User Interface.
    Code:
    int wait_command(void)
    
    {
            unsigned char  InData;
    	unsigned char  InBuffer[50];
    	unsigned int   length;
            unsigned int   trackvalue=0;
    	unsigned short pwr_led1=655;
            int   i;
            int   length;
    	
    	InData = USART_Receive();
    	
    	if(InData =='a' || InData =='b' )
    	{
    	    InBuffer[0]= InData;
    	}
    	
    	else if(InData >='0' || InData <= '9'  )
    	{
    		length = InData - '0';//lenght variable here is used to get the actual value sent from GUI.Lenght is 1 for string from "9" to "9" while it is 2 for string from "10" t "99"
    		for (i = 0; i<length; i++)
    		{
    			trackvalue *=10;
    			trackvalue += USART_Receive()- '0';
    			pwr_led1= 655 * trackvalue;
    			_delay_ms(200);
    			
    			
    		}	  
    	}
    	
    	else  
    	{
    	   // do nothing	
    	}
    
       switch(InBuffer[0])
    	{
    				
    	 case 'a':
    	 if (led1_on == 1) led1_on=0; else led1_on=1;
    	 break;
    	 case 'b':
    	 if (led2_on == 1) led2_on=0; else led2_on=1;
    	 break;
             default:
    	 break;	
    
    	}  // switch
    	
    	SetRegister(pwr_led1*spur1_on,pwr_led2*spur2_on);
    	GenerateLatch();
     }
    
    
    I would be very glad if somebody could guide me on how to solve this problem.Thank you all for the usual support.
    Best regards.
    Firstoption.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice