Smart pole

Dependencies:   FTPClient SDFileSystem WIZnetInterface mbed

Fork of FTP_Streaming_Music_Player_WIZwiki-W7500 by justin kim

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SSD1306.h Source File

SSD1306.h

00001 #include "data.h"
00002 #define addr    (0x78)
00003 
00004 #if defined(TARGET_WIZwiki_W7500)
00005 #define SDA                  PA_10
00006 #define SCL                  PA_9
00007 #endif
00008 
00009 I2C i2c(SDA, SCL);
00010 
00011 void send_cmd(uint8_t cmd){
00012      char c[2] ={0x00,cmd};
00013      
00014        i2c.write(addr,c,2,1);
00015      
00016 }
00017 
00018 void send_data(uint8_t data){
00019     char c[2] = {0x40,data};
00020     i2c.write(addr,c,2,1);
00021     
00022 }
00023 
00024 void init(void)
00025 {
00026     wait_ms(5); // TBD
00027        
00028     send_cmd(0xae); // display off
00029     send_cmd(0xd5); // display divide ratio/osc. freq. ratio
00030     send_cmd(0x80);
00031     send_cmd(0xa8); // multiplex ation mode: 63
00032     send_cmd(0x3f);
00033     send_cmd(0xd3); // set display offset
00034     send_cmd(0x00);
00035     send_cmd(0x40); // set display start line
00036     send_cmd(0x8d); // set display offset
00037     send_cmd(0x14);
00038     send_cmd(0xa1); // segment remap
00039     send_cmd(0xc8); // set COM output scan direction
00040     send_cmd(0xda); // common pads hardware: alternative
00041     send_cmd(0x12);
00042     send_cmd(0x81); // contrast control
00043     send_cmd(0xcf);
00044     send_cmd(0xd9); // set pre-charge period
00045     send_cmd(0xf1);
00046     send_cmd(0xdb); // VCOM deselect level mode
00047     send_cmd(0x40); // set vcomh = 0.83 * VCC
00048     send_cmd(0xa4); // set entire display on/off
00049     send_cmd(0xa6); // set normal display
00050     send_cmd(0xaf); // set display on
00051 }
00052 
00053 // set position (x, 8*y)
00054 void locate(int x, int y){
00055     send_cmd(0xb0+y);
00056     send_cmd(((x&0xf0)>>4)|0x10);
00057     send_cmd((x&0x0f)|0x01);
00058 }
00059 
00060 void cls(void){
00061     int x, y;
00062     for(y = 0; y < 8; y++){
00063         locate(0, y);
00064         for(x = 0; x < 128; x++) send_data(0x00);
00065     }
00066 }
00067 
00068 
00069 
00070  void OLED_ShowStr(unsigned char x, unsigned char y, char ch[], unsigned char TextSize)
00071 {
00072     unsigned char c = 0,i = 0,j = 0;
00073     switch(TextSize)
00074     {
00075         case 1:
00076         {
00077             while(ch[j] != '\0')
00078             {
00079                 c = ch[j] - 32;
00080                 if(x > 126)
00081                 {
00082                     x = 0;
00083                     y++;
00084                 }
00085                 locate(x,y);
00086                 for(i=0;i<6;i++)
00087                     send_data(F6x8[c][i]);
00088                 x += 6;
00089                 j++;
00090             }
00091         }break;
00092         case 2:
00093         {
00094             while(ch[j] != '\0')
00095             {
00096                 c = ch[j] - 32;
00097                 if(x > 120)
00098                 {
00099                     x = 0;
00100                     y++;
00101                 }
00102                 locate(x,y);
00103                 for(i=0;i<8;i++)
00104                     send_data(F8X16[c*16+i]);
00105                 locate(x,y+1);
00106                 for(i=0;i<8;i++)
00107                     send_data(F8X16[c*16+i+8]);
00108                 x += 8;
00109                 j++;
00110             }
00111         }break;
00112     }
00113 }
00114 void OLED_DrawBMP(unsigned char x0,
00115                            unsigned char y0,unsigned char x1,
00116                            unsigned char y1,unsigned char BMP[])
00117 {
00118     unsigned int j=0;
00119     unsigned char x,y;
00120 
00121   if(y1%8==0)
00122         y = y1/8;
00123   else
00124         y = y1/8 + 1;
00125     for(y=y0;y<y1;y++)
00126     {
00127         locate(x0,y);
00128     for(x=x0;x<x1;x++)
00129         {
00130             send_data(BMP[j++]);
00131         }
00132     }
00133 }
00134 //==========================================================//
00135 // Prints a display big number (96 bytes) in coordinates X Y,
00136 // being multiples of 8. This means we have 16 COLS (0-15)
00137 // and 8 ROWS (0-7).
00138 void printBigNumber(unsigned char s, int x, int y)
00139 {
00140     locate(x,y);
00141     int salto=0;
00142     for(int i=0; i<96; i++) {
00143         if(s == ' ') {
00144             send_data(0);
00145         } else
00146             send_data(bigNumbers[s-0x30][i]);
00147 
00148         if(salto == 23) {
00149             salto = 0;
00150             x++;
00151             locate(x,y);
00152         } else {
00153             salto++;
00154         }
00155     }
00156 }
00157 void printBigTime(char *s)
00158 {
00159 
00160     int y=0;
00161     int lon = strlen(s);
00162     if(lon == 6) {
00163         y = 0;
00164     } else if (lon == 5) {
00165         y = 3;
00166     } else if (lon == 4) {
00167         y = 6;
00168     }
00169       else if(lon == 3) {
00170         y = 9;
00171     } else if (lon == 2) {
00172         y = 12;
00173     } else if (lon == 1) {
00174         y = 15;
00175     }
00176 
00177     int x = 2;
00178     while(*s) {
00179         printBigNumber(*s, x, y);
00180 
00181         y+=3;
00182         x=2;
00183         locate(x,y);
00184         *s++;
00185     }
00186 }
00187 void LED_P23x32Str(unsigned char x, unsigned char y, char ch[])
00188 {
00189   unsigned char c = 0, i = 0, j = 0, k = 0;
00190   while (ch[j] != '\0')
00191   {
00192     c = ch[j] - '0';
00193     if (x > 120) {
00194       x = 0;
00195       y++;
00196     }
00197 
00198     for (k = 0; k < 4; k++) {
00199       locate(x, y + k);
00200       for (i = 0; i < 23; i++) {
00201         send_data(F23x32[c * 23 * 4 + k * 23 + i]);
00202       }
00203     }
00204     x += 25;
00205     j++;
00206   }
00207 }
00208 
00209