My favorites | Sign in
Project Home Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
CupVisualsCode  
Updated Dec 1, 2013 by rijadsul...@gmail.com

Code

/******************************************************************************/
/* Files to Include                                                           */
/******************************************************************************/
 
#include <p18cxxx.h>   /* C18 General Include File */
 
#include "system.h"        /* System funct/params, like osc/peripheral config */
#include "user.h"          /* User funct/params, such as InitApp */
#include <stdlib.h>
 
/******************************************************************************/
/* User Global Variable Declaration                                           */
/******************************************************************************/
 
#define SCLK PORTCbits.RC0
#define SOUT PORTCbits.RC1
#define BLANK PORTCbits.RC6
#define XLAT PORTCbits.RC7
 
#define MAX_STEP 4095
#define POUR_TIME 5
 
unsigned int pwmbuffer[24];     // Brightness buffer
int b, c, i, j, k;              // Loop variables
unsigned int d;                 // for delay function only
int fillLevel;                  // Counter variable for fill LEDs
 
 
/******************************************************************************/
/* Main Program                                                               */
/******************************************************************************/
 
void pourLEDs( char color, int step );
void followLEDs( char color, int step, int loop);
void fadeLEDs(char color, int step);
void flashLEDs(char color, unsigned int time, int brightness);
void fillLEDs( char color, int step );
void randomLED( int step );
 
void delay( unsigned int cycles );
void setLED(int lednum, int r, int g, int b);
void setPWM(int chan, int pwm);
void writeLED( void );
void clearAll( void );
 
void main(void)
{
 
    ConfigureOscillator();
    InitApp();
 
    BLANK = 1;
    XLAT = 0;
 
    // Initialize pwmbuffer
    clearAll();
 
    // Process Loop
    while(1)
    {
 
        // Fades into and out of color
        fadeLEDs('r',5);
        fadeLEDs('g',5);
        fadeLEDs('b',5);
        fadeLEDs('c',5);
        fadeLEDs('y',5);
        fadeLEDs('m',5);
        fadeLEDs('w',5);
 
        // Flashes color at brightness for length given as third variable
        flashLEDs('r',4095,60000);
        flashLEDs('r',4095,60000);
        flashLEDs('r',4095,60000);
        flashLEDs('r',4095,60000);
 
        flashLEDs('g',4095,60000);
        flashLEDs('g',4095,60000);
        flashLEDs('g',4095,60000);
        flashLEDs('g',4095,60000);
 
        flashLEDs('b',4095,60000);
        flashLEDs('b',4095,60000);
        flashLEDs('b',4095,60000);
        flashLEDs('b',4095,60000);
 
        flashLEDs('w',4095,60000);
        flashLEDs('w',4095,60000);
        flashLEDs('w',4095,60000);
        flashLEDs('w',4095,60000);
 
        // Turns on LEDs in circle pattern
        fillLEDs('r', 25);
 
        // Turns on LEDs one at a time in circle pattern
        followLEDs('r', 30, 1);
        followLEDs('b', 30, 2);
        followLEDs('c', 30, 3);
        followLEDs('w', 30, 4);
 
        // Color taking in counter variable
        for(i = 0; i < 10; i++)
            delay(10000);
        pourLEDs('b', 2);
        for(i = 0; i < 10; i++)
            delay(10000);
        pourLEDs('b', 3);
        for(i = 0; i < 10; i++)
            delay(10000);
        pourLEDs('b', 4);
        for(i = 0; i < 10; i++)
            delay(10000);
        pourLEDs('b', 5);
 
 
    }
 
}
 
 
 
 
 
void pourLEDs( char color, int timer )
{
    int scaledTime;
    scaledTime = (MAX_STEP / POUR_TIME) * timer;
 
    for (i = 0; i < 8; i++)
    {
        if (color == 'r')
            setLED(i, scaledTime, 0, 0);
        if (color == 'g')
            setLED(i, 0, scaledTime, 0);
        if (color == 'b')
            setLED(i, 0, 0, scaledTime);
    }
    writeLED();
}
 
 
 
void followLEDs( char color, int step, int loop)
{
    int firstLoop = 1;
 
    while (loop >= 0 )
    {
        for (i = 0; i < 8; i++)
        {
            if (i == 0 && firstLoop)
                for (j = 0; j < MAX_STEP; j++)
                {
                    if (color == 'r')
                        setLED(i, j, 0, 0);
                    if (color == 'g')
                        setLED(i, 0, j, 0);
                    if (color == 'b')
                        setLED(i, 0, 0, j);
                    if (color == 'y')
                        setLED(i, j, j, 0);
                    if (color == 'c')
                        setLED(i, 0, j, j);
                    if (color == 'm')
                        setLED(i, j, 0, j);
                    if (color == 'w')
                        setLED(i, j, j, j);
                    writeLED();
                    j = j + step;
                    firstLoop = 0;
                }
            if (i > 0)
            {
                for (j = 0, k = MAX_STEP; j < MAX_STEP || k > 0; j++, k--)
                {
                    if (color == 'r')
                    {
                        setLED(i, j, 0, 0);
                        setLED(i-1, k, 0, 0);
                    }
                    if (color == 'g')
                    {
                        setLED(i, 0, j, 0);
                        setLED(i-1, 0, k, 0);
                    }
                    if (color == 'b')
                    {
                        setLED(i, 0, 0, j);
                        setLED(i-1, 0, 0, k);
                    }
                    if (color == 'y')
                    {
                        setLED(i, j, j, 0);
                        setLED(i-1, k, k, 0);
                    }
                    if (color == 'c')
                    {
                        setLED(i, 0, j, j);
                        setLED(i-1, 0, k, k);
                    }
                    if (color == 'm')
                    {
                        setLED(i, j, 0, j);
                        setLED(i-1, k, 0, k);
                    }
                    if (color == 'w')
                    {
                        setLED(i, j, j, j);
                        setLED(i-1, k, k, k);
                    }
                    writeLED();
                    j = j + step;
                    k = k - step;
                }
                setLED(i-1, 0, 0, 0);
                writeLED();
            }
            if (i == 7)
            {
                for (j = 0, k = MAX_STEP; j < MAX_STEP, k > 0; k++, j--)
                {
                    if (color == 'r'){
                        if (loop > 0)
                            setLED(0, j, 0, 0);
                        setLED(i, k, 0, 0);
                    }
                    if (color == 'g'){
                        if (loop > 0)
                            setLED(0, 0, j, 0);
                        setLED(i, 0, k, 0);
                    }
                    if (color == 'b'){
                        if (loop > 0)
                            setLED(0, 0, 0, j);
                        setLED(i, 0, 0, k);
                    }
                    if (color == 'y'){
                        if (loop > 0)
                            setLED(0, j, j, 0);
                        setLED(i, k, k, 0);
                    }
                    if (color == 'c'){
                        if (loop > 0)
                            setLED(0, 0, j, j);
                        setLED(i, 0, k, k);
                    }
                    if (color == 'm'){
                        if (loop > 0)
                            setLED(0, j, 0, j);
                        setLED(i, k, 0, k);
                    }
                    if (color == 'w'){
                        if (loop > 0)
                            setLED(0, j, j, j);
                        setLED(i, k, k, k);
                    }
                    writeLED();
                    k = k - step;
                }
                setLED(i, 0, 0, 0);
                writeLED();
            }
        }
        loop--;
    }
}
 
 
 
void fillLEDs( char color, int step )
{
    for (i = 0; i < 8; i++)
        for (j = 0; j < MAX_STEP; j++)
        {
            if (color == 'r')
                setLED(i, j, 0, 0);
            if (color == 'g')
                setLED(i, 0, j, 0);
            if (color == 'b')
                setLED(i, 0, 0, j);
            if (color == 'y')
                setLED(i, j, j, 0);
            if (color == 'c')
                setLED(i, 0, j, j);
            if (color == 'm')
                setLED(i, j, 0, j);
            if (color == 'w')
                setLED(i, j, j, j);
            writeLED();
            j = j + step;
        }
    for (i = 0; i < 8; i++)
    {
        for (j = MAX_STEP; j > 0; j--)
        {
            if (color == 'r')
                setLED(i, j, 0, 0);
            if (color == 'g')
                setLED(i, 0, j, 0);
            if (color == 'b')
                setLED(i, 0, 0, j);
            if (color == 'y')
                setLED(i, j, j, 0);
            if (color == 'c')
                setLED(i, 0, j, j);
            if (color == 'm')
                setLED(i, j, 0, j);
            if (color == 'w')
                setLED(i, j, j, j);
            writeLED();
            j = j - step;
        }
        setLED(i, 0, 0, 0);
        writeLED();
    }
}
 
 
 
void flashLEDs(char color, unsigned int time, int brt)
{
 
    for (i = 0; i < 8; i++)
    {
        if (color == 'r')
            setLED(i, brt, 0, 0);
        if (color == 'g')
            setLED(i, 0, brt, 0);
        if (color == 'b')
            setLED(i, 0, 0, brt);
        if (color == 'c')
            setLED(i, 0, brt, brt);
        if (color == 'y')
            setLED(i, brt, brt, 0);
        if (color == 'm')
            setLED(i, brt, 0, brt);
        if (color == 'w')
            setLED(i, brt, brt, brt);
    }
 
     
    writeLED();
 
    // Delay function times 10
    for(i = 0; i < 10; i++)
        delay(time);
 
    // Turn off all LEDs
    clearAll();
 
    for(i = 0; i < 10; i++)
        delay(time);
}
 
 
 
 
void fadeLEDs(char color, int step)
{
     
    for (i = 0; i < MAX_STEP; i++)
    {
        for (j = 0; j < 8; j++)
        {
            if (color == 'r')
                setLED(j, i, 0, 0);
            if (color == 'g')
                setLED(j, 0, i, 0);
            if (color == 'b')
                setLED(j, 0, 0, i);
            if (color == 'y')
                setLED(j, i, i, 0);
            if (color == 'c')
                setLED(j, 0, i, i);
            if (color == 'm')
                setLED(j, i, 0, i);
            if (color == 'w')
                setLED(j, i, i, i);
        }
        writeLED();
        i = i + step;
    }
    for (i = MAX_STEP; i > 0; i--)
    {
        for (j = 0; j < 8; j++)
        {
            if (color == 'r')
                setLED(j, i, 0, 0);
            if (color == 'g')
                setLED(j, 0, i, 0);
            if (color == 'b')
                setLED(j, 0, 0, i);
            if (color == 'y')
                setLED(j, i, i, 0);
            if (color == 'c')
                setLED(j, 0, i, i);
            if (color == 'm')
                setLED(j, i, 0, i);
            if (color == 'w')
                setLED(j, i, i, i);
        }
        writeLED();
        i = i - step;
    }
}
 
 
 
 
 
 
void setLED(int lednum, int r, int g, int b)
{
    setPWM(lednum*3, b);
    setPWM(lednum*3+1, g);
    setPWM(lednum*3+2, r);
}
 
 
void setPWM(int chan, int pwm)
{
    if (pwm > MAX_STEP) pwm = 255;
    if (chan > 24) return;
 
    pwmbuffer[chan] = pwm;
}
 
 
 
 
void clearAll( void )
{
 
    for (i = 0; i < 24; i++)
        pwmbuffer[i] = 0;
    writeLED();
 
}
 
 
 
 
 
 
void writeLED( void )
{
    XLAT = 0;
    for (c = 23; c >= 0; c--)
    {
        for (b = 11; b >= 0; b--)
        {
            SCLK = 0;
            delay(2);
            if ( pwmbuffer[c] & (1 << b) )
                SOUT = 1;
            else
                SOUT = 0;
            SCLK = 1;
        }
    }
    SCLK = 0;
 
    BLANK = 1;
    XLAT = 1;
    BLANK = 0;
    XLAT = 0;
}
 
void delay( unsigned int cycles )
{
    for (d = 0; d < cycles; d++);
}
Powered by Google Project Hosting