Smart pole

Dependencies:   FTPClient SDFileSystem WIZnetInterface mbed

Fork of FTP_Streaming_Music_Player_WIZwiki-W7500 by justin kim

Committer:
Ricky_Kwon
Date:
Fri Oct 30 03:53:23 2015 +0000
Revision:
1:c47c255fcad4
Smart pole

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ricky_Kwon 1:c47c255fcad4 1 #include "data.h"
Ricky_Kwon 1:c47c255fcad4 2 #define addr (0x78)
Ricky_Kwon 1:c47c255fcad4 3
Ricky_Kwon 1:c47c255fcad4 4 #if defined(TARGET_WIZwiki_W7500)
Ricky_Kwon 1:c47c255fcad4 5 #define SDA PA_10
Ricky_Kwon 1:c47c255fcad4 6 #define SCL PA_9
Ricky_Kwon 1:c47c255fcad4 7 #endif
Ricky_Kwon 1:c47c255fcad4 8
Ricky_Kwon 1:c47c255fcad4 9 I2C i2c(SDA, SCL);
Ricky_Kwon 1:c47c255fcad4 10
Ricky_Kwon 1:c47c255fcad4 11 void send_cmd(uint8_t cmd){
Ricky_Kwon 1:c47c255fcad4 12 char c[2] ={0x00,cmd};
Ricky_Kwon 1:c47c255fcad4 13
Ricky_Kwon 1:c47c255fcad4 14 i2c.write(addr,c,2,1);
Ricky_Kwon 1:c47c255fcad4 15
Ricky_Kwon 1:c47c255fcad4 16 }
Ricky_Kwon 1:c47c255fcad4 17
Ricky_Kwon 1:c47c255fcad4 18 void send_data(uint8_t data){
Ricky_Kwon 1:c47c255fcad4 19 char c[2] = {0x40,data};
Ricky_Kwon 1:c47c255fcad4 20 i2c.write(addr,c,2,1);
Ricky_Kwon 1:c47c255fcad4 21
Ricky_Kwon 1:c47c255fcad4 22 }
Ricky_Kwon 1:c47c255fcad4 23
Ricky_Kwon 1:c47c255fcad4 24 void init(void)
Ricky_Kwon 1:c47c255fcad4 25 {
Ricky_Kwon 1:c47c255fcad4 26 wait_ms(5); // TBD
Ricky_Kwon 1:c47c255fcad4 27
Ricky_Kwon 1:c47c255fcad4 28 send_cmd(0xae); // display off
Ricky_Kwon 1:c47c255fcad4 29 send_cmd(0xd5); // display divide ratio/osc. freq. ratio
Ricky_Kwon 1:c47c255fcad4 30 send_cmd(0x80);
Ricky_Kwon 1:c47c255fcad4 31 send_cmd(0xa8); // multiplex ation mode: 63
Ricky_Kwon 1:c47c255fcad4 32 send_cmd(0x3f);
Ricky_Kwon 1:c47c255fcad4 33 send_cmd(0xd3); // set display offset
Ricky_Kwon 1:c47c255fcad4 34 send_cmd(0x00);
Ricky_Kwon 1:c47c255fcad4 35 send_cmd(0x40); // set display start line
Ricky_Kwon 1:c47c255fcad4 36 send_cmd(0x8d); // set display offset
Ricky_Kwon 1:c47c255fcad4 37 send_cmd(0x14);
Ricky_Kwon 1:c47c255fcad4 38 send_cmd(0xa1); // segment remap
Ricky_Kwon 1:c47c255fcad4 39 send_cmd(0xc8); // set COM output scan direction
Ricky_Kwon 1:c47c255fcad4 40 send_cmd(0xda); // common pads hardware: alternative
Ricky_Kwon 1:c47c255fcad4 41 send_cmd(0x12);
Ricky_Kwon 1:c47c255fcad4 42 send_cmd(0x81); // contrast control
Ricky_Kwon 1:c47c255fcad4 43 send_cmd(0xcf);
Ricky_Kwon 1:c47c255fcad4 44 send_cmd(0xd9); // set pre-charge period
Ricky_Kwon 1:c47c255fcad4 45 send_cmd(0xf1);
Ricky_Kwon 1:c47c255fcad4 46 send_cmd(0xdb); // VCOM deselect level mode
Ricky_Kwon 1:c47c255fcad4 47 send_cmd(0x40); // set vcomh = 0.83 * VCC
Ricky_Kwon 1:c47c255fcad4 48 send_cmd(0xa4); // set entire display on/off
Ricky_Kwon 1:c47c255fcad4 49 send_cmd(0xa6); // set normal display
Ricky_Kwon 1:c47c255fcad4 50 send_cmd(0xaf); // set display on
Ricky_Kwon 1:c47c255fcad4 51 }
Ricky_Kwon 1:c47c255fcad4 52
Ricky_Kwon 1:c47c255fcad4 53 // set position (x, 8*y)
Ricky_Kwon 1:c47c255fcad4 54 void locate(int x, int y){
Ricky_Kwon 1:c47c255fcad4 55 send_cmd(0xb0+y);
Ricky_Kwon 1:c47c255fcad4 56 send_cmd(((x&0xf0)>>4)|0x10);
Ricky_Kwon 1:c47c255fcad4 57 send_cmd((x&0x0f)|0x01);
Ricky_Kwon 1:c47c255fcad4 58 }
Ricky_Kwon 1:c47c255fcad4 59
Ricky_Kwon 1:c47c255fcad4 60 void cls(void){
Ricky_Kwon 1:c47c255fcad4 61 int x, y;
Ricky_Kwon 1:c47c255fcad4 62 for(y = 0; y < 8; y++){
Ricky_Kwon 1:c47c255fcad4 63 locate(0, y);
Ricky_Kwon 1:c47c255fcad4 64 for(x = 0; x < 128; x++) send_data(0x00);
Ricky_Kwon 1:c47c255fcad4 65 }
Ricky_Kwon 1:c47c255fcad4 66 }
Ricky_Kwon 1:c47c255fcad4 67
Ricky_Kwon 1:c47c255fcad4 68
Ricky_Kwon 1:c47c255fcad4 69
Ricky_Kwon 1:c47c255fcad4 70 void OLED_ShowStr(unsigned char x, unsigned char y, char ch[], unsigned char TextSize)
Ricky_Kwon 1:c47c255fcad4 71 {
Ricky_Kwon 1:c47c255fcad4 72 unsigned char c = 0,i = 0,j = 0;
Ricky_Kwon 1:c47c255fcad4 73 switch(TextSize)
Ricky_Kwon 1:c47c255fcad4 74 {
Ricky_Kwon 1:c47c255fcad4 75 case 1:
Ricky_Kwon 1:c47c255fcad4 76 {
Ricky_Kwon 1:c47c255fcad4 77 while(ch[j] != '\0')
Ricky_Kwon 1:c47c255fcad4 78 {
Ricky_Kwon 1:c47c255fcad4 79 c = ch[j] - 32;
Ricky_Kwon 1:c47c255fcad4 80 if(x > 126)
Ricky_Kwon 1:c47c255fcad4 81 {
Ricky_Kwon 1:c47c255fcad4 82 x = 0;
Ricky_Kwon 1:c47c255fcad4 83 y++;
Ricky_Kwon 1:c47c255fcad4 84 }
Ricky_Kwon 1:c47c255fcad4 85 locate(x,y);
Ricky_Kwon 1:c47c255fcad4 86 for(i=0;i<6;i++)
Ricky_Kwon 1:c47c255fcad4 87 send_data(F6x8[c][i]);
Ricky_Kwon 1:c47c255fcad4 88 x += 6;
Ricky_Kwon 1:c47c255fcad4 89 j++;
Ricky_Kwon 1:c47c255fcad4 90 }
Ricky_Kwon 1:c47c255fcad4 91 }break;
Ricky_Kwon 1:c47c255fcad4 92 case 2:
Ricky_Kwon 1:c47c255fcad4 93 {
Ricky_Kwon 1:c47c255fcad4 94 while(ch[j] != '\0')
Ricky_Kwon 1:c47c255fcad4 95 {
Ricky_Kwon 1:c47c255fcad4 96 c = ch[j] - 32;
Ricky_Kwon 1:c47c255fcad4 97 if(x > 120)
Ricky_Kwon 1:c47c255fcad4 98 {
Ricky_Kwon 1:c47c255fcad4 99 x = 0;
Ricky_Kwon 1:c47c255fcad4 100 y++;
Ricky_Kwon 1:c47c255fcad4 101 }
Ricky_Kwon 1:c47c255fcad4 102 locate(x,y);
Ricky_Kwon 1:c47c255fcad4 103 for(i=0;i<8;i++)
Ricky_Kwon 1:c47c255fcad4 104 send_data(F8X16[c*16+i]);
Ricky_Kwon 1:c47c255fcad4 105 locate(x,y+1);
Ricky_Kwon 1:c47c255fcad4 106 for(i=0;i<8;i++)
Ricky_Kwon 1:c47c255fcad4 107 send_data(F8X16[c*16+i+8]);
Ricky_Kwon 1:c47c255fcad4 108 x += 8;
Ricky_Kwon 1:c47c255fcad4 109 j++;
Ricky_Kwon 1:c47c255fcad4 110 }
Ricky_Kwon 1:c47c255fcad4 111 }break;
Ricky_Kwon 1:c47c255fcad4 112 }
Ricky_Kwon 1:c47c255fcad4 113 }
Ricky_Kwon 1:c47c255fcad4 114 void OLED_DrawBMP(unsigned char x0,
Ricky_Kwon 1:c47c255fcad4 115 unsigned char y0,unsigned char x1,
Ricky_Kwon 1:c47c255fcad4 116 unsigned char y1,unsigned char BMP[])
Ricky_Kwon 1:c47c255fcad4 117 {
Ricky_Kwon 1:c47c255fcad4 118 unsigned int j=0;
Ricky_Kwon 1:c47c255fcad4 119 unsigned char x,y;
Ricky_Kwon 1:c47c255fcad4 120
Ricky_Kwon 1:c47c255fcad4 121 if(y1%8==0)
Ricky_Kwon 1:c47c255fcad4 122 y = y1/8;
Ricky_Kwon 1:c47c255fcad4 123 else
Ricky_Kwon 1:c47c255fcad4 124 y = y1/8 + 1;
Ricky_Kwon 1:c47c255fcad4 125 for(y=y0;y<y1;y++)
Ricky_Kwon 1:c47c255fcad4 126 {
Ricky_Kwon 1:c47c255fcad4 127 locate(x0,y);
Ricky_Kwon 1:c47c255fcad4 128 for(x=x0;x<x1;x++)
Ricky_Kwon 1:c47c255fcad4 129 {
Ricky_Kwon 1:c47c255fcad4 130 send_data(BMP[j++]);
Ricky_Kwon 1:c47c255fcad4 131 }
Ricky_Kwon 1:c47c255fcad4 132 }
Ricky_Kwon 1:c47c255fcad4 133 }
Ricky_Kwon 1:c47c255fcad4 134 //==========================================================//
Ricky_Kwon 1:c47c255fcad4 135 // Prints a display big number (96 bytes) in coordinates X Y,
Ricky_Kwon 1:c47c255fcad4 136 // being multiples of 8. This means we have 16 COLS (0-15)
Ricky_Kwon 1:c47c255fcad4 137 // and 8 ROWS (0-7).
Ricky_Kwon 1:c47c255fcad4 138 void printBigNumber(unsigned char s, int x, int y)
Ricky_Kwon 1:c47c255fcad4 139 {
Ricky_Kwon 1:c47c255fcad4 140 locate(x,y);
Ricky_Kwon 1:c47c255fcad4 141 int salto=0;
Ricky_Kwon 1:c47c255fcad4 142 for(int i=0; i<96; i++) {
Ricky_Kwon 1:c47c255fcad4 143 if(s == ' ') {
Ricky_Kwon 1:c47c255fcad4 144 send_data(0);
Ricky_Kwon 1:c47c255fcad4 145 } else
Ricky_Kwon 1:c47c255fcad4 146 send_data(bigNumbers[s-0x30][i]);
Ricky_Kwon 1:c47c255fcad4 147
Ricky_Kwon 1:c47c255fcad4 148 if(salto == 23) {
Ricky_Kwon 1:c47c255fcad4 149 salto = 0;
Ricky_Kwon 1:c47c255fcad4 150 x++;
Ricky_Kwon 1:c47c255fcad4 151 locate(x,y);
Ricky_Kwon 1:c47c255fcad4 152 } else {
Ricky_Kwon 1:c47c255fcad4 153 salto++;
Ricky_Kwon 1:c47c255fcad4 154 }
Ricky_Kwon 1:c47c255fcad4 155 }
Ricky_Kwon 1:c47c255fcad4 156 }
Ricky_Kwon 1:c47c255fcad4 157 void printBigTime(char *s)
Ricky_Kwon 1:c47c255fcad4 158 {
Ricky_Kwon 1:c47c255fcad4 159
Ricky_Kwon 1:c47c255fcad4 160 int y=0;
Ricky_Kwon 1:c47c255fcad4 161 int lon = strlen(s);
Ricky_Kwon 1:c47c255fcad4 162 if(lon == 6) {
Ricky_Kwon 1:c47c255fcad4 163 y = 0;
Ricky_Kwon 1:c47c255fcad4 164 } else if (lon == 5) {
Ricky_Kwon 1:c47c255fcad4 165 y = 3;
Ricky_Kwon 1:c47c255fcad4 166 } else if (lon == 4) {
Ricky_Kwon 1:c47c255fcad4 167 y = 6;
Ricky_Kwon 1:c47c255fcad4 168 }
Ricky_Kwon 1:c47c255fcad4 169 else if(lon == 3) {
Ricky_Kwon 1:c47c255fcad4 170 y = 9;
Ricky_Kwon 1:c47c255fcad4 171 } else if (lon == 2) {
Ricky_Kwon 1:c47c255fcad4 172 y = 12;
Ricky_Kwon 1:c47c255fcad4 173 } else if (lon == 1) {
Ricky_Kwon 1:c47c255fcad4 174 y = 15;
Ricky_Kwon 1:c47c255fcad4 175 }
Ricky_Kwon 1:c47c255fcad4 176
Ricky_Kwon 1:c47c255fcad4 177 int x = 2;
Ricky_Kwon 1:c47c255fcad4 178 while(*s) {
Ricky_Kwon 1:c47c255fcad4 179 printBigNumber(*s, x, y);
Ricky_Kwon 1:c47c255fcad4 180
Ricky_Kwon 1:c47c255fcad4 181 y+=3;
Ricky_Kwon 1:c47c255fcad4 182 x=2;
Ricky_Kwon 1:c47c255fcad4 183 locate(x,y);
Ricky_Kwon 1:c47c255fcad4 184 *s++;
Ricky_Kwon 1:c47c255fcad4 185 }
Ricky_Kwon 1:c47c255fcad4 186 }
Ricky_Kwon 1:c47c255fcad4 187 void LED_P23x32Str(unsigned char x, unsigned char y, char ch[])
Ricky_Kwon 1:c47c255fcad4 188 {
Ricky_Kwon 1:c47c255fcad4 189 unsigned char c = 0, i = 0, j = 0, k = 0;
Ricky_Kwon 1:c47c255fcad4 190 while (ch[j] != '\0')
Ricky_Kwon 1:c47c255fcad4 191 {
Ricky_Kwon 1:c47c255fcad4 192 c = ch[j] - '0';
Ricky_Kwon 1:c47c255fcad4 193 if (x > 120) {
Ricky_Kwon 1:c47c255fcad4 194 x = 0;
Ricky_Kwon 1:c47c255fcad4 195 y++;
Ricky_Kwon 1:c47c255fcad4 196 }
Ricky_Kwon 1:c47c255fcad4 197
Ricky_Kwon 1:c47c255fcad4 198 for (k = 0; k < 4; k++) {
Ricky_Kwon 1:c47c255fcad4 199 locate(x, y + k);
Ricky_Kwon 1:c47c255fcad4 200 for (i = 0; i < 23; i++) {
Ricky_Kwon 1:c47c255fcad4 201 send_data(F23x32[c * 23 * 4 + k * 23 + i]);
Ricky_Kwon 1:c47c255fcad4 202 }
Ricky_Kwon 1:c47c255fcad4 203 }
Ricky_Kwon 1:c47c255fcad4 204 x += 25;
Ricky_Kwon 1:c47c255fcad4 205 j++;
Ricky_Kwon 1:c47c255fcad4 206 }
Ricky_Kwon 1:c47c255fcad4 207 }
Ricky_Kwon 1:c47c255fcad4 208
Ricky_Kwon 1:c47c255fcad4 209