B13 final project part 1

Dependencies:   mbed

iteadstudio_colourshield.cpp

Committer:
mbedobsza
Date:
2015-12-08
Revision:
0:0def0023f900

File content as of revision 0:0def0023f900:

#include "mbed.h"
#include "iteadstudio_colourshield.h"
/**************Define*************************/
DigitalOut RGB_RST(A2);
DigitalOut RGB_LAT(A1);
DigitalOut RGB_SB(A0);

/*DigitalIn nn0(D7);
DigitalIn nn1(D2);
DigitalIn nn2(D6);*/
SPI RGB_SPI(PB_15,PB_14,PB_13);
BusOut RGB_CP(D8,D9,D10,D11,D12,D13,D3,D4);
uint8_t RGBi= 0,RGBj= 0,RGBk= 0;
uint8_t RedWB=55,GreenWB=0,BlueWB=60; // percent | R,G,B calibrate change it if some color brighter than other
uint8_t display[8][8][3]= {0};
/*******************************************/
void sendframe(uint8_t frame[8][8][3])
{
    memcpy(display, frame, sizeof(display));
}
void INITRGB(char in[3])
{
    int wd;
    RGB_RST =0;
    RGB_RST =1;
    RGB_SPI.frequency(20000000);
    RGB_SPI.format(8,1);
    RGB_LAT = 0;
    RGB_SB  =0;
    int l=0;

    for (int i = 0; i<8; i++) { // Whitebalance......**important
        for (int j = 0; j<3; j++) {
            for (int k = 0; k<6; k++) {
                wd+=((in[j]<<k)&0b00100000)?1:0;
                wd<<1;
                l++;
                if(l>=7) {
                    RGB_SPI.write(255);
                    l=0;
                }
            }
            //RGB_SPI.write(255);
        }
    }

    RGB_LAT = 1;
    RGB_LAT = 0;

    RGB_SPI.format(8,0);
}

void displayRGB()
{

    RGB_SB  =1;
    for( RGBi=0; RGBi<8; RGBi++) {
        for( RGBk=0; RGBk<8; RGBk++) {
            for( RGBj=0; RGBj<3; RGBj++) {
                RGB_SPI.write(display[RGBk][RGBi][RGBj]);
            }

        }
        RGB_CP = 0;
        wait_us(15);
        RGB_LAT = 1;
        RGB_LAT = 0;

        RGB_CP = (0x01<<RGBi);

    }
}

void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v )
{
    int i;
    float f, p, q, t;
    if( s == 0 ) {
        // achromatic (grey)
        *r = *g = *b = v;
        return;
    }
    h /= 60;            // sector 0 to 5
    i = floor( h );
    f = h - i;          // factorial part of h
    p = v * ( 1 - s );
    q = v * ( 1 - s * f );
    t = v * ( 1 - s * ( 1 - f ) );
    switch( i ) {
        case 0:
            *r = v;
            *g = t;
            *b = p;
            break;
        case 1:
            *r = q;
            *g = v;
            *b = p;
            break;
        case 2:
            *r = p;
            *g = v;
            *b = t;
            break;
        case 3:
            *r = p;
            *g = q;
            *b = v;
            break;
        case 4:
            *r = t;
            *g = p;
            *b = v;
            break;
        default:        // case 5:
            *r = v;
            *g = p;
            *b = q;
            break;
    }
}
void screen_zeros()
{
    memset(display, 0, sizeof(display));
}