デジットで入手したフルカラーLEDの制御プログラムです。
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /** 00002 * This program is test for p9813 IC 00003 **/ 00004 00005 00006 #include "mbed.h" 00007 00008 //DigitalOut led(LED1); 00009 BusOut leds(LED1,LED2,LED3,LED4); 00010 AnalogIn analog(p15); 00011 00012 00013 #define H 1 00014 #define L 0 00015 00016 DigitalOut di(p10);//signal 00017 DigitalOut ci(p11);//clock 00018 00019 void sendBit(char bit){ 00020 ci =L; 00021 di = (bit==0 ? L:H ); 00022 ci=H;//read DI at rising edge 00023 } 00024 char toGrayCode(char byte){ 00025 char shift = byte>>1; 00026 return shift^byte; 00027 } 00028 00029 void sendByte(char byte){ 00030 char mask =0x80; 00031 for( ; mask != 0x00 ; mask>>=1){// 1000 0000 00032 sendBit(byte & mask); 00033 } 00034 } 00035 00036 void sendStartFrame(){ 00037 for(int i = 0; i<4 ;i++){ 00038 sendByte(0x00); 00039 } 00040 } 00041 00042 void sendStopFrame(){ 00043 sendStartFrame(); 00044 } 00045 00046 00047 void sendRGB(char rb,char gb ,char bb){ 00048 /* 00049 printf("******\n"); 00050 printf("r is %X \n",rb); 00051 printf("g is %X \n",gb ); 00052 printf("b is %X \n",bb ); 00053 printf("******\n\n"); 00054 */ 00055 char r = toGrayCode(rb); 00056 char g = toGrayCode(gb); 00057 char b = toGrayCode(bb); 00058 00059 sendStartFrame(); 00060 sendBit(H); 00061 sendBit(H); 00062 // error check 00063 sendBit( (~b) & 0x80 );//mask by 1000 0000 00064 sendBit( (~b) & 0x40 );//mask by 0100 0000 00065 sendBit( (~g) & 0x80 );//mask by 1000 0000 00066 sendBit( (~g) & 0x40 );//mask by 0100 0000 00067 sendBit( (~r) & 0x80 );//mask by 1000 0000 00068 sendBit( (~r) & 0x40 );//mask by 0100 0000 00069 //send RGB data 00070 sendByte(b); 00071 sendByte(g); 00072 sendByte(r); 00073 sendStopFrame(); 00074 } 00075 00076 void sendRGB(int rgb){ 00077 char r = (char) ((rgb & 0x00FF0000) >> 16); 00078 char g = (char) ((rgb & 0x0000FF00) >> 8); 00079 char b = (char) ( rgb & 0x000000FF); 00080 //printf("r:%X,g:%X,b:%X \n",r,g,b); 00081 sendRGB(r,g,b); 00082 } 00083 00084 00085 00086 int main() { 00087 int rgb =0x000000; 00088 int color[] ={ 00089 0x00000000, 00090 0x000000FF, 00091 0x0000FF00, 00092 0x0000FFFF, 00093 0x00FF0000, 00094 0x00FF00FF, 00095 0x00FFFF00, 00096 0x00FFFFFF}; 00097 leds =0x0; 00098 int index=0; 00099 while(1) { 00100 //printf("%d\n",index); 00101 leds=leds+1; 00102 sendRGB(color[index]); 00103 index++; 00104 if(index == 8){ 00105 index = 0; 00106 //printf("******"); 00107 } 00108 wait(2.0*analog.read()); 00109 /* 00110 leds=leds+1; 00111 sendRGB(0xFF,0x00,0x00); 00112 wait(2.0*analog.read()); 00113 leds=leds+1; 00114 sendRGB(0x00,0xFF,0x00); 00115 wait(2.0*analog.read()); 00116 leds=leds+1; 00117 */ 00118 } 00119 }
Generated on Wed Jul 13 2022 02:44:45 by
1.7.2
Takumi Okamoto