Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C# (http://www.go4expert.com/forums/c-sharp/)
-   -   Wrong trackbar value when using it to control leds brightness (http://www.go4expert.com/forums/wrong-trackbar-value-using-control-leds-t30070/)

firstoption 19Apr2014 18:41

Wrong trackbar value when using it to control leds brightness
 
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.


All times are GMT +5.5. The time now is 04:38.