dotmatrixLED animation with ht1632 LED driver.

Dependencies:   SDFileSystem mbed

main.cpp

Committer:
kohacraft
Date:
2015-08-23
Revision:
2:f28ec2298aa6
Parent:
1:0c055badeb8f

File content as of revision 2:f28ec2298aa6:

#include "mbed.h"
#include "ht1632.h"

#include "SDFileSystem.h"
#define     SD_MOSI     dp2
#define     SD_MISO     dp1
#define     SD_SCLK     dp6
#define     SD_CS       dp13
SDFileSystem  sd(SD_MOSI, SD_MISO, SD_SCLK, SD_CS,  "sd");  //  mosi, miso, sclk, cs, name  (HW modification candidate)

DigitalOut myled(LED1);

void bmpDisp( FILE *fp )
{
    unsigned char data[32];
    unsigned char *gData =&data[0],*rData=&data[8],*bData=&data[16];

    fseek(fp, 54 , SEEK_SET);//bitmap headder throw
    for( int j = 7 ; j>=0 ; j-- )
    {
        rData[j] = 0;
        gData[j] = 0;
        bData[j] = 0;       
        for( int i=0 ; i<8 ; i++ )
        {
            bData[j] = bData[j] <<1;
            if ( fgetc(fp) > 127 )
                bData[j] = bData[j] | 0x01;
            
            gData[j] = gData[j]<<1;
            if ( fgetc(fp) > 127 )
                gData[j] |= 0x01;
            
            rData[j] = rData[j]<<1;
            if ( fgetc(fp) > 127 )
                rData[j] |= 0x01;
            
         }
    }
    sendData( 0 , data , sizeof(data) );
}


int main() {
     
    myled = 0;
    FILE *fp;
    int fileNumMax = 100;
    float waitTime = 0.1;
    
    //LEDモジュールの初期化
    initHt1632();
    
    //表示のwait時間を読み込み
    if( ( fp = fopen("/sd/loop.txt", "r") ) != NULL )
    {
        fscanf( fp, "%d,%f" , &fileNumMax , &waitTime );
        fclose(fp);
        free(fp);
    }
    else
    {
            fileNumMax = 99;
            waitTime = 0.1;
    }

    myled = 1;
    //01.bmpから99.bmpまでを表示を繰り返す
    char filePath[256] = "";
    while(1)
    {
        for( int fileNum = 1 ; fileNum <= fileNumMax ; fileNum++ )
        {
            sprintf( filePath , "/sd/%02d.bmp" , fileNum );
        
            if( ( fp = fopen(filePath, "r") ) == NULL )
            {
                free( fp );
                break;
            }
            else
            {
                myled = ~myled;
    
                bmpDisp( fp );
                fclose( fp );
                free( fp );
                wait(waitTime);
    
            }
        }
    }
}