![](/media/cache/profiles/avater.png.50x50_q85.jpg)
デジットで入手したフルカラーLEDの制御プログラムです。
デジットで入手したフルカラーLEDの制御プログラム。
main.cpp
- Committer:
- MrBearing
- Date:
- 2013-07-15
- Revision:
- 1:00a40243c245
- Parent:
- 0:dc9726268dc6
File content as of revision 1:00a40243c245:
/** * This program is test for p9813 IC **/ #include "mbed.h" //DigitalOut led(LED1); BusOut leds(LED1,LED2,LED3,LED4); AnalogIn analog(p15); #define H 1 #define L 0 DigitalOut di(p10);//signal DigitalOut ci(p11);//clock void sendBit(char bit){ ci =L; di = (bit==0 ? L:H ); ci=H;//read DI at rising edge } char toGrayCode(char byte){ char shift = byte>>1; return shift^byte; } void sendByte(char byte){ char mask =0x80; for( ; mask != 0x00 ; mask>>=1){// 1000 0000 sendBit(byte & mask); } } void sendStartFrame(){ for(int i = 0; i<4 ;i++){ sendByte(0x00); } } void sendStopFrame(){ sendStartFrame(); } void sendRGB(char rb,char gb ,char bb){ /* printf("******\n"); printf("r is %X \n",rb); printf("g is %X \n",gb ); printf("b is %X \n",bb ); printf("******\n\n"); */ char r = toGrayCode(rb); char g = toGrayCode(gb); char b = toGrayCode(bb); sendStartFrame(); sendBit(H); sendBit(H); // error check sendBit( (~b) & 0x80 );//mask by 1000 0000 sendBit( (~b) & 0x40 );//mask by 0100 0000 sendBit( (~g) & 0x80 );//mask by 1000 0000 sendBit( (~g) & 0x40 );//mask by 0100 0000 sendBit( (~r) & 0x80 );//mask by 1000 0000 sendBit( (~r) & 0x40 );//mask by 0100 0000 //send RGB data sendByte(b); sendByte(g); sendByte(r); sendStopFrame(); } void sendRGB(int rgb){ char r = (char) ((rgb & 0x00FF0000) >> 16); char g = (char) ((rgb & 0x0000FF00) >> 8); char b = (char) ( rgb & 0x000000FF); //printf("r:%X,g:%X,b:%X \n",r,g,b); sendRGB(r,g,b); } int main() { int rgb =0x000000; int color[] ={ 0x00000000, 0x000000FF, 0x0000FF00, 0x0000FFFF, 0x00FF0000, 0x00FF00FF, 0x00FFFF00, 0x00FFFFFF}; leds =0x0; int index=0; while(1) { //printf("%d\n",index); leds=leds+1; sendRGB(color[index]); index++; if(index == 8){ index = 0; //printf("******"); } wait(2.0*analog.read()); /* leds=leds+1; sendRGB(0xFF,0x00,0x00); wait(2.0*analog.read()); leds=leds+1; sendRGB(0x00,0xFF,0x00); wait(2.0*analog.read()); leds=leds+1; */ } }