Declaring a string

Coding and general discussion relating to the compiler

Moderators: David Barker, Jerry Messina

Post Reply
MrDEB
Posts: 12
Joined: Fri Apr 24, 2009 1:45 am
Location: Salmon, Idaho

Declaring a string

Post by MrDEB » Fri Jun 26, 2009 11:57 pm

trying to make a string (variable?) I am new to this programing.
I want to use ms(2) (3 elements) than denote the LED color
In the program ms is incremented then decremented.
The code I have posted will turn on all 3 LEDs and using the PWM they start out dim until full brightness then dim to off
I want to use ms(0) as red, ms(1) as green and ms(2) as blue. then insert different starting values instead of 0 so the three LEDs flicker at different brightness

Code: Select all

Device = 18F1320
Clock = 8

Include "IntOSC8.bas" 
Include "RandGen.bas"
Include "Utils.bas" 
Dim TMR2IE As PIE1.1,         // TMR2 interrupt enable
    TMR2IF As PIR1.1,         // TMR2 overflow flag
    TMR2ON As T2CON.2,        // Enables TMR2 to begin incrementing
    Signal_Pin As PORTA.0     // Signal output to frequency meter
 
Dim Red_Pin As PORTB.0,
    Green_Pin As PORTB.1,
    Blue_Pin As PORTB.2,
    Red_Duty As Byte,
    Green_Duty As Byte,
    Blue_Duty As Byte,
    Red_DutyVal As Byte,
    Green_DutyVal As Byte,
    Blue_DutyVal As Byte,
    RandomVal As Byte
 
Dim uS As Word,
 //mS(2) As Word  get first error here?? more i'm sure
dim ms(3) As byte 
//dim mSg As Word          
 
Interrupt TMR2_Interrupt()
    High(Signal_Pin)
    Save(0)                   // Back up system variables   
    If TMR2IF = 1 Then        // Check if the interrupt was from TMR2   
        TMR2IF = 0            // Clear the TMR2 interrupt flag
        uS = uS + 50
        If uS >= 1000 Then
            uS = uS - 1000
            Inc mS(3)
           // IncmS(b)
           // IncmS(g)
        EndIf       
        Inc(Red_DutyVal)
        Inc(Green_DutyVal)
        Inc(Blue_DutyVal)
        If Red_DutyVal > Red_Duty Or Red_Duty = 0 Then
            Red_Pin = 0
        Else
            Red_Pin = 1
        EndIf
        If Green_DutyVal > Green_Duty Or Green_Duty = 0 Then
            Green_Pin = 0
        Else
            Green_Pin = 1
        EndIf
        If Blue_DutyVal > Blue_Duty Or Blue_Duty = 0 Then
            Blue_Pin = 0
        Else
            Blue_Pin = 1
        EndIf               
    EndIf                     //
    Restore                   // Restore system variables
    Low(Signal_Pin)
End Interrupt
 
Private Sub TMR2_Initialize()
    TMR2ON = 0                // Disable TMR2
    TMR2IE = 0                // Turn off TMR2 interrupts   
 
    PR2 = 149                 // TMR2 Period register PR2
    T2CON = %00000001         // T2CON 0:1 = Prescale
                              //        00 = Prescale is 1:1
                              //        01 = Prescale is 1:4
                              //        1x = Prescale is 1:16                                 
                              //      3:6 = Postscale              
                              //     0000 = 1:1 postscale
                              //     0001 = 1:2 postscale
                              //     0010 = 1:3 postscale...
                              //     1111 = 1:16 postscale
 
    TMR2 = 0                  // Reset TMR2 Value   
    TMR2IE = 1                // Enable TMR2 interrupts
    TMR2ON = 1                // Enable TMR2 to increment
    Enable(TMR2_Interrupt)
End Sub
 
// Start Of Program...
Low(Red_Pin)
Low(Green_Pin)
Low(Blue_Pin)
Red_Duty = 0
Green_Duty = 2
Blue_Duty = 0
Red_DutyVal = 0
Green_DutyVal = 4
Blue_DutyVal = 0
 
uS = 0
mS = 0
 
RandGen.Initialize(128)       // Initialize the Random Number generator
TMR2_Initialize               // Setup and enable TMR2
 
While True                    // Create an infinite loop
    RandomVal = RandGen.Rand  // Grab a random number from 0 to 255 
    // Select RandomVal         // Find out what colour to increase/decrease
        //Case 0 To 42
            While Red_Duty < 255
              And Green_Duty < 255
              And Blue_Duty < 255
                mS =0
                //mS(b) = 0
                //mS(g) = 0
                Repeat
                Until mS = 19
                //And mS(b) = 19
               // And mS(g) = 19
                
                Inc(Red_Duty)
                Inc(Green_Duty)
                
                Inc(Blue_Duty)
            
            Wend
       // Case 43 To 84
            While Red_Duty > 0
          And  Green_Duty > 0
         And Blue_Duty > 0
                mS = 0
                // mS = 0
                //  mSg = 0
                Repeat
                Until mS = 19
                //Until mS(b) = 19
               // Until mS(g) = 19
                Dec(Red_Duty)
                Dec(Green_Duty)
                Dec(Blue_Duty)
            Wend
       // Case 84 To 127
            //While Green_Duty < 255
            //    mS = 0
             //   Repeat
             //   Until mS = 19
            //    Inc(Green_Duty)
            //Wend
       // Case 128 To 170
          //  While Green_Duty > 0
            //    mS = 0
            //    Repeat
            //    Until mS = 19
            //    Dec(Green_Duty)
           //Wend
       // Case 170 To 212
           // and Blue_Duty < 255
           //     mS = 0
            //    Repeat
            //    Until mS = 19
            //    Inc(Blue_Duty)
           // Wend
       // Case 212 To 255
           // While Blue_Duty > 0
           //     mS = 0
           //     Repeat
            //    Until mS = 19
           //     Dec(Blue_Duty)
         //   Wend
    // End Select           
Wend

Post Reply