This is a sample program to use a rocker IS switch from NKK. It reads a file from SD card and send to the switch. Supported file format is the one that is used by a NKK\'s editor for IS series switches. Part of this program is derived from a sample program for PIC micro cotnroller written by NKK.
Dependencies: mbed SDFileSystem
main.cpp@0:da9accbde08b, 2011-01-30 (annotated)
- Committer:
- non
- Date:
- Sun Jan 30 12:03:20 2011 +0000
- Revision:
- 0:da9accbde08b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
non | 0:da9accbde08b | 1 | /* |
non | 0:da9accbde08b | 2 | Sample program to use a rocker IS switch from NKK. |
non | 0:da9accbde08b | 3 | Part of this program is derived from a sample program for PIC |
non | 0:da9accbde08b | 4 | micro cotnroller written by NKK. |
non | 0:da9accbde08b | 5 | */ |
non | 0:da9accbde08b | 6 | |
non | 0:da9accbde08b | 7 | #include "mbed.h" |
non | 0:da9accbde08b | 8 | #include "SDFileSystem.h" |
non | 0:da9accbde08b | 9 | |
non | 0:da9accbde08b | 10 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
non | 0:da9accbde08b | 11 | SPI spi(p11, p12, p13); // mosi(SDO), miso(SDI), sclk(SCLK) |
non | 0:da9accbde08b | 12 | DigitalOut is_cs(p21); |
non | 0:da9accbde08b | 13 | DigitalOut is_reset(p22); |
non | 0:da9accbde08b | 14 | DigitalOut is_dc(p23); |
non | 0:da9accbde08b | 15 | DigitalOut is_vcc(p24); |
non | 0:da9accbde08b | 16 | DigitalOut led1(LED1); |
non | 0:da9accbde08b | 17 | DigitalIn sw1(p18); |
non | 0:da9accbde08b | 18 | DigitalIn sw2(p19); |
non | 0:da9accbde08b | 19 | DigitalIn sw3(p20); |
non | 0:da9accbde08b | 20 | |
non | 0:da9accbde08b | 21 | void OledSendCommand( const unsigned char *com ); |
non | 0:da9accbde08b | 22 | void OledInit( void ); |
non | 0:da9accbde08b | 23 | void OledSendData( const unsigned char *dat, int len ); |
non | 0:da9accbde08b | 24 | |
non | 0:da9accbde08b | 25 | const int DAT = 1; |
non | 0:da9accbde08b | 26 | const int CMD = 0; |
non | 0:da9accbde08b | 27 | |
non | 0:da9accbde08b | 28 | unsigned char dat[96*64/8]; |
non | 0:da9accbde08b | 29 | const unsigned char cls[96*64/8] = {0}; |
non | 0:da9accbde08b | 30 | |
non | 0:da9accbde08b | 31 | int main() { |
non | 0:da9accbde08b | 32 | sw1.mode(PullUp); |
non | 0:da9accbde08b | 33 | sw2.mode(PullUp); |
non | 0:da9accbde08b | 34 | sw3.mode(PullUp); |
non | 0:da9accbde08b | 35 | // Setup the spi for 8 bit data, high steady state clock, |
non | 0:da9accbde08b | 36 | // second edge capture, with a 4MHz clock rate |
non | 0:da9accbde08b | 37 | spi.format(8, 3); |
non | 0:da9accbde08b | 38 | spi.frequency(4000000); |
non | 0:da9accbde08b | 39 | |
non | 0:da9accbde08b | 40 | is_reset = 0; |
non | 0:da9accbde08b | 41 | is_vcc = 0; |
non | 0:da9accbde08b | 42 | |
non | 0:da9accbde08b | 43 | OledInit(); |
non | 0:da9accbde08b | 44 | |
non | 0:da9accbde08b | 45 | for (;;) { |
non | 0:da9accbde08b | 46 | DIR *d; |
non | 0:da9accbde08b | 47 | struct dirent *p; |
non | 0:da9accbde08b | 48 | d = opendir("/sd/bw"); |
non | 0:da9accbde08b | 49 | if (d != NULL) { |
non | 0:da9accbde08b | 50 | while ((p = readdir(d)) != NULL) { |
non | 0:da9accbde08b | 51 | char fname[20]; |
non | 0:da9accbde08b | 52 | sprintf(fname, "/sd/bw/%s", p->d_name); |
non | 0:da9accbde08b | 53 | FILE *fp = fopen(fname, "rb"); |
non | 0:da9accbde08b | 54 | if (fp == NULL) { |
non | 0:da9accbde08b | 55 | // error("Could not open file for read\n"); |
non | 0:da9accbde08b | 56 | } else { |
non | 0:da9accbde08b | 57 | fread(dat, 1, 8, fp); // skip header |
non | 0:da9accbde08b | 58 | fread(dat, 1, sizeof(dat), fp); |
non | 0:da9accbde08b | 59 | fclose(fp); |
non | 0:da9accbde08b | 60 | OledSendData(dat, 96*64/8); |
non | 0:da9accbde08b | 61 | wait_ms(100); |
non | 0:da9accbde08b | 62 | while (sw1 && sw2 && sw3) |
non | 0:da9accbde08b | 63 | ; |
non | 0:da9accbde08b | 64 | } |
non | 0:da9accbde08b | 65 | } |
non | 0:da9accbde08b | 66 | closedir(d); |
non | 0:da9accbde08b | 67 | } |
non | 0:da9accbde08b | 68 | } |
non | 0:da9accbde08b | 69 | } |
non | 0:da9accbde08b | 70 | |
non | 0:da9accbde08b | 71 | ////////////////////////////////////////////////////////////////////// |
non | 0:da9accbde08b | 72 | ////////////////////////////////////////////////////////////////////// |
non | 0:da9accbde08b | 73 | // OLED controll commands (Initial settings commands) |
non | 0:da9accbde08b | 74 | const unsigned char SoftwareReset[] = { 0x01, 0x01 }; |
non | 0:da9accbde08b | 75 | const unsigned char DotMatrixDisplay[] = { 0x02, 0x02, 0x00 }; |
non | 0:da9accbde08b | 76 | const unsigned char SetRWOperation[] = { 0x02, 0x07, 0x00 }; |
non | 0:da9accbde08b | 77 | const unsigned char SetDisplayDirection[] = { 0x02, 0x09, 0x00 }; |
non | 0:da9accbde08b | 78 | const unsigned char DotMatrixStandby[] = { 0x02, 0x14, 0x00 }; |
non | 0:da9accbde08b | 79 | const unsigned char GraphicMemoryWrite[] = { 0x02, 0x1d, 0x00 }; |
non | 0:da9accbde08b | 80 | const unsigned char SetupColumnAddress[] = { 0x03, 0x30, 0x00, 0x5f }; |
non | 0:da9accbde08b | 81 | const unsigned char SetupRowAddress[] = { 0x03, 0x32, 0x00, 0x3f }; |
non | 0:da9accbde08b | 82 | const unsigned char XaxisRWStartPoint[] = { 0x02, 0x34, 0x00 }; |
non | 0:da9accbde08b | 83 | const unsigned char XaxisRWEndPoint[] = { 0x02, 0x35, 0x0b }; |
non | 0:da9accbde08b | 84 | const unsigned char YaxisRWStartPoint[] = { 0x02, 0x36, 0x00 }; |
non | 0:da9accbde08b | 85 | const unsigned char YaxisRWEndPoint[] = { 0x02, 0x37, 0x3f }; |
non | 0:da9accbde08b | 86 | const unsigned char XaxisRStartAddress[] = { 0x02, 0x38, 0x00 }; |
non | 0:da9accbde08b | 87 | const unsigned char YaxisRStartAddress[] = { 0x02, 0x39, 0x00 }; |
non | 0:da9accbde08b | 88 | const unsigned char SetScreenSaverTimer1[] = { 0x02, 0xc3, 0x00 }; |
non | 0:da9accbde08b | 89 | const unsigned char SetScreenSaverTimer2[] = { 0x02, 0xc4, 0x00 }; |
non | 0:da9accbde08b | 90 | const unsigned char RepeatScreenSaver[] = { 0x02, 0xcc, 0x00 }; |
non | 0:da9accbde08b | 91 | const unsigned char StartStopScreenSaver[] = { 0x02, 0xcd, 0x00 }; |
non | 0:da9accbde08b | 92 | const unsigned char SetSystemClock[] = { 0x02, 0xd0, 0x80 }; |
non | 0:da9accbde08b | 93 | const unsigned char SetSTBYPin[] = { 0x02, 0xd2, 0x00 }; |
non | 0:da9accbde08b | 94 | const unsigned char DACASetting[] = { 0x02, 0xd4, 0x00 }; |
non | 0:da9accbde08b | 95 | const unsigned char DACBSetting[] = { 0x02, 0xd5, 0x00 }; |
non | 0:da9accbde08b | 96 | const unsigned char DACCSetting[] = { 0x02, 0xd6, 0x00 }; |
non | 0:da9accbde08b | 97 | const unsigned char DACDSetting[] = { 0x02, 0xd7, 0x00 }; |
non | 0:da9accbde08b | 98 | const unsigned char DimmerSetting[] = { 0x02, 0xdb, 0x0f }; |
non | 0:da9accbde08b | 99 | |
non | 0:da9accbde08b | 100 | const unsigned char Reserved1[] = { 0x02, 0x10, 0x03 }; |
non | 0:da9accbde08b | 101 | const unsigned char Reserved2[] = { 0x02, 0x12, 0x63 }; |
non | 0:da9accbde08b | 102 | const unsigned char Reserved3[] = { 0x02, 0x13, 0x00 }; |
non | 0:da9accbde08b | 103 | const unsigned char Reserved4[] = { 0x02, 0x16, 0x00 }; |
non | 0:da9accbde08b | 104 | const unsigned char Reserved5[] = { 0x02, 0x17, 0x00 }; |
non | 0:da9accbde08b | 105 | const unsigned char Reserved6[] = { 0x02, 0x18, 0x09 }; |
non | 0:da9accbde08b | 106 | const unsigned char Reserved7[] = { 0x02, 0x1a, 0x04 }; |
non | 0:da9accbde08b | 107 | const unsigned char Reserved8[] = { 0x02, 0x1c, 0x00 }; |
non | 0:da9accbde08b | 108 | const unsigned char Reserved9[] = { 0x02, 0x48, 0x03 }; |
non | 0:da9accbde08b | 109 | const unsigned char Reserved10[] = { 0x02, 0xd9, 0x00 }; |
non | 0:da9accbde08b | 110 | const unsigned char Reserved11[] = { 0x02, 0xdd, 0x88 }; |
non | 0:da9accbde08b | 111 | |
non | 0:da9accbde08b | 112 | const unsigned char SendImage[] = { 0x01, 0x08 }; |
non | 0:da9accbde08b | 113 | const unsigned char DotMatrixDisplayON[] = { 0x02, 0x02, 0x01 }; |
non | 0:da9accbde08b | 114 | |
non | 0:da9accbde08b | 115 | // |
non | 0:da9accbde08b | 116 | // initializing OLED |
non | 0:da9accbde08b | 117 | // |
non | 0:da9accbde08b | 118 | void OledInit( void ) { |
non | 0:da9accbde08b | 119 | // reset OLED |
non | 0:da9accbde08b | 120 | is_vcc = 0; |
non | 0:da9accbde08b | 121 | is_reset = 0; |
non | 0:da9accbde08b | 122 | wait_us(3); |
non | 0:da9accbde08b | 123 | is_vcc = 1; |
non | 0:da9accbde08b | 124 | wait_ms(1); |
non | 0:da9accbde08b | 125 | is_reset = 1; |
non | 0:da9accbde08b | 126 | |
non | 0:da9accbde08b | 127 | // initial settings |
non | 0:da9accbde08b | 128 | OledSendCommand( SoftwareReset ); |
non | 0:da9accbde08b | 129 | wait_us(3); |
non | 0:da9accbde08b | 130 | OledSendCommand( DotMatrixDisplayON ); |
non | 0:da9accbde08b | 131 | // OledSendCommand( DotMatrixDisplay ); |
non | 0:da9accbde08b | 132 | OledSendCommand( SetRWOperation ); |
non | 0:da9accbde08b | 133 | OledSendCommand( SetDisplayDirection ); |
non | 0:da9accbde08b | 134 | OledSendCommand( Reserved1 ); |
non | 0:da9accbde08b | 135 | OledSendCommand( Reserved2 ); |
non | 0:da9accbde08b | 136 | OledSendCommand( Reserved3 ); |
non | 0:da9accbde08b | 137 | OledSendCommand( DotMatrixStandby ); |
non | 0:da9accbde08b | 138 | OledSendCommand( Reserved4 ); |
non | 0:da9accbde08b | 139 | OledSendCommand( Reserved5 ); |
non | 0:da9accbde08b | 140 | OledSendCommand( Reserved6 ); |
non | 0:da9accbde08b | 141 | OledSendCommand( Reserved7 ); |
non | 0:da9accbde08b | 142 | OledSendCommand( Reserved8 ); |
non | 0:da9accbde08b | 143 | OledSendCommand( GraphicMemoryWrite ); |
non | 0:da9accbde08b | 144 | OledSendCommand( SetupColumnAddress ); |
non | 0:da9accbde08b | 145 | OledSendCommand( SetupRowAddress ); |
non | 0:da9accbde08b | 146 | OledSendCommand( XaxisRWStartPoint ); |
non | 0:da9accbde08b | 147 | OledSendCommand( XaxisRWEndPoint ); |
non | 0:da9accbde08b | 148 | OledSendCommand( YaxisRWStartPoint ); |
non | 0:da9accbde08b | 149 | OledSendCommand( YaxisRWEndPoint ); |
non | 0:da9accbde08b | 150 | OledSendCommand( XaxisRStartAddress ); |
non | 0:da9accbde08b | 151 | OledSendCommand( YaxisRStartAddress ); |
non | 0:da9accbde08b | 152 | OledSendCommand( Reserved9 ); |
non | 0:da9accbde08b | 153 | OledSendCommand( SetScreenSaverTimer1 ); |
non | 0:da9accbde08b | 154 | OledSendCommand( SetScreenSaverTimer2 ); |
non | 0:da9accbde08b | 155 | OledSendCommand( RepeatScreenSaver ); |
non | 0:da9accbde08b | 156 | OledSendCommand( StartStopScreenSaver ); |
non | 0:da9accbde08b | 157 | OledSendCommand( SetSystemClock ); |
non | 0:da9accbde08b | 158 | OledSendCommand( SetSTBYPin ); |
non | 0:da9accbde08b | 159 | OledSendCommand( DACASetting ); |
non | 0:da9accbde08b | 160 | OledSendCommand( DACBSetting ); |
non | 0:da9accbde08b | 161 | OledSendCommand( DACCSetting ); |
non | 0:da9accbde08b | 162 | OledSendCommand( DACDSetting ); |
non | 0:da9accbde08b | 163 | OledSendCommand( Reserved10 ); |
non | 0:da9accbde08b | 164 | OledSendCommand( DimmerSetting ); |
non | 0:da9accbde08b | 165 | OledSendCommand( Reserved11 ); |
non | 0:da9accbde08b | 166 | } |
non | 0:da9accbde08b | 167 | |
non | 0:da9accbde08b | 168 | // |
non | 0:da9accbde08b | 169 | // Send a command / data to OLED via SPI |
non | 0:da9accbde08b | 170 | // |
non | 0:da9accbde08b | 171 | void OledSend( const unsigned char *p, int len ) { |
non | 0:da9accbde08b | 172 | for (; len>0; len --, p ++) { |
non | 0:da9accbde08b | 173 | is_cs = 0; |
non | 0:da9accbde08b | 174 | spi.write(*p); |
non | 0:da9accbde08b | 175 | is_cs = 1; |
non | 0:da9accbde08b | 176 | } |
non | 0:da9accbde08b | 177 | } |
non | 0:da9accbde08b | 178 | |
non | 0:da9accbde08b | 179 | // |
non | 0:da9accbde08b | 180 | // Send a command to OLED |
non | 0:da9accbde08b | 181 | // |
non | 0:da9accbde08b | 182 | void OledSendCommand( const unsigned char *com ) { |
non | 0:da9accbde08b | 183 | is_dc = CMD; |
non | 0:da9accbde08b | 184 | OledSend(com+1, 1); |
non | 0:da9accbde08b | 185 | is_dc = DAT; |
non | 0:da9accbde08b | 186 | OledSend(com+2, *com-1); |
non | 0:da9accbde08b | 187 | } |
non | 0:da9accbde08b | 188 | |
non | 0:da9accbde08b | 189 | // |
non | 0:da9accbde08b | 190 | // Send data to OLED |
non | 0:da9accbde08b | 191 | // |
non | 0:da9accbde08b | 192 | void OledSendData( const unsigned char *dat, int len ) { |
non | 0:da9accbde08b | 193 | OledSendCommand( SendImage ); |
non | 0:da9accbde08b | 194 | is_dc = DAT; |
non | 0:da9accbde08b | 195 | OledSend(dat, len); |
non | 0:da9accbde08b | 196 | OledSendCommand( DotMatrixDisplayON ); |
non | 0:da9accbde08b | 197 | } |