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

Committer:
non
Date:
Sun Jan 30 12:03:20 2011 +0000
Revision:
0:da9accbde08b

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }