...

Dependencies:   DS_1337 Grove_OLED_Display_128X64 mbed

Committer:
loovee
Date:
Tue Apr 01 07:05:54 2014 +0000
Revision:
0:4683a4a41f47
...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loovee 0:4683a4a41f47 1 #include "mbed.h"
loovee 0:4683a4a41f47 2 #include "pinmap.h"
loovee 0:4683a4a41f47 3 #include "font_watch.h"
loovee 0:4683a4a41f47 4 #include "DS1337.h"
loovee 0:4683a4a41f47 5 #include "SeeedOLED.h"
loovee 0:4683a4a41f47 6
loovee 0:4683a4a41f47 7
loovee 0:4683a4a41f47 8 #define HARD_SPI 1
loovee 0:4683a4a41f47 9
loovee 0:4683a4a41f47 10 DigitalOut blue(P0_20);
loovee 0:4683a4a41f47 11 DigitalOut white(P0_23);
loovee 0:4683a4a41f47 12
loovee 0:4683a4a41f47 13 #define I2C_FREQ 100000
loovee 0:4683a4a41f47 14
loovee 0:4683a4a41f47 15 I2C i2c(P0_5, P0_4); // sda, scl
loovee 0:4683a4a41f47 16
loovee 0:4683a4a41f47 17
loovee 0:4683a4a41f47 18 DS1337 RTC;
loovee 0:4683a4a41f47 19
loovee 0:4683a4a41f47 20 Serial uart(P0_19, P0_18);
loovee 0:4683a4a41f47 21
loovee 0:4683a4a41f47 22 typedef struct{
loovee 0:4683a4a41f47 23
loovee 0:4683a4a41f47 24 int hour;
loovee 0:4683a4a41f47 25 int minutes;
loovee 0:4683a4a41f47 26 int second;
loovee 0:4683a4a41f47 27 int year;
loovee 0:4683a4a41f47 28 int month;
loovee 0:4683a4a41f47 29 int day;
loovee 0:4683a4a41f47 30 int week;
loovee 0:4683a4a41f47 31
loovee 0:4683a4a41f47 32 }TIME_S;
loovee 0:4683a4a41f47 33
loovee 0:4683a4a41f47 34 TIME_S time_now, time_buf;
loovee 0:4683a4a41f47 35
loovee 0:4683a4a41f47 36 unsigned char disp[1024];
loovee 0:4683a4a41f47 37
loovee 0:4683a4a41f47 38 void initDta()
loovee 0:4683a4a41f47 39 {
loovee 0:4683a4a41f47 40 for(int i=0; i<1024; i++)
loovee 0:4683a4a41f47 41 {
loovee 0:4683a4a41f47 42 disp[i] = 0x00;
loovee 0:4683a4a41f47 43 }
loovee 0:4683a4a41f47 44 }
loovee 0:4683a4a41f47 45
loovee 0:4683a4a41f47 46
loovee 0:4683a4a41f47 47 void display()
loovee 0:4683a4a41f47 48 {
loovee 0:4683a4a41f47 49
loovee 0:4683a4a41f47 50 for(int i=0; i<8; i++)
loovee 0:4683a4a41f47 51 {
loovee 0:4683a4a41f47 52 oled.setTextXY(i,0);
loovee 0:4683a4a41f47 53 for(int j=0; j<128; j++)
loovee 0:4683a4a41f47 54 {
loovee 0:4683a4a41f47 55 oled.sendData(disp[128*i+j]);
loovee 0:4683a4a41f47 56 }
loovee 0:4683a4a41f47 57 }
loovee 0:4683a4a41f47 58 }
loovee 0:4683a4a41f47 59
loovee 0:4683a4a41f47 60
loovee 0:4683a4a41f47 61 void clearOled()
loovee 0:4683a4a41f47 62 {
loovee 0:4683a4a41f47 63 initDta();
loovee 0:4683a4a41f47 64 display();
loovee 0:4683a4a41f47 65 }
loovee 0:4683a4a41f47 66
loovee 0:4683a4a41f47 67
loovee 0:4683a4a41f47 68
loovee 0:4683a4a41f47 69
loovee 0:4683a4a41f47 70 void initOLED()
loovee 0:4683a4a41f47 71 {
loovee 0:4683a4a41f47 72 oled.sendCommand(SeeedOLED_Display_Off_Cmd); //display off
loovee 0:4683a4a41f47 73 wait_ms(5);
loovee 0:4683a4a41f47 74 oled.sendCommand(SeeedOLED_Display_On_Cmd); //display on
loovee 0:4683a4a41f47 75 wait_ms(5);
loovee 0:4683a4a41f47 76 oled.sendCommand(SeeedOLED_Normal_Display_Cmd); //Set Normal Display (default)
loovee 0:4683a4a41f47 77
loovee 0:4683a4a41f47 78
loovee 0:4683a4a41f47 79 oled.setNormalDisplay(); // Set display to normal mode (i.e non-inverse mode)
loovee 0:4683a4a41f47 80 oled.setPageMode(); // Set addressing mode to Page Mode
loovee 0:4683a4a41f47 81 clearOled();
loovee 0:4683a4a41f47 82 }
loovee 0:4683a4a41f47 83
loovee 0:4683a4a41f47 84 void time_init()
loovee 0:4683a4a41f47 85 {
loovee 0:4683a4a41f47 86 RTC.readTime();
loovee 0:4683a4a41f47 87 time_now.hour = RTC.getHours();
loovee 0:4683a4a41f47 88 time_now.minutes = RTC.getMinutes();
loovee 0:4683a4a41f47 89 time_now.second = RTC.getSeconds();
loovee 0:4683a4a41f47 90 time_now.year = RTC.getYears();
loovee 0:4683a4a41f47 91 time_now.month = RTC.getMonths();
loovee 0:4683a4a41f47 92 time_now.day = RTC.getDays();
loovee 0:4683a4a41f47 93 time_now.week = RTC.getDayOfWeek();
loovee 0:4683a4a41f47 94
loovee 0:4683a4a41f47 95 time_buf.hour = RTC.getHours();
loovee 0:4683a4a41f47 96 time_buf.minutes = RTC.getMinutes();
loovee 0:4683a4a41f47 97 time_buf.second = RTC.getSeconds();
loovee 0:4683a4a41f47 98 time_buf.year = RTC.getYears();
loovee 0:4683a4a41f47 99 time_buf.month = RTC.getMonths();
loovee 0:4683a4a41f47 100 time_buf.day = RTC.getDays();
loovee 0:4683a4a41f47 101 time_buf.week = RTC.getDayOfWeek();
loovee 0:4683a4a41f47 102 }
loovee 0:4683a4a41f47 103
loovee 0:4683a4a41f47 104 void time_refresh()
loovee 0:4683a4a41f47 105 {
loovee 0:4683a4a41f47 106 RTC.readTime();
loovee 0:4683a4a41f47 107 time_now.hour = RTC.getHours();
loovee 0:4683a4a41f47 108 time_now.minutes = RTC.getMinutes();
loovee 0:4683a4a41f47 109 time_now.second = RTC.getSeconds();
loovee 0:4683a4a41f47 110 time_now.year = RTC.getYears();
loovee 0:4683a4a41f47 111 time_now.month = RTC.getMonths();
loovee 0:4683a4a41f47 112 time_now.day = RTC.getDays();
loovee 0:4683a4a41f47 113 time_now.week = RTC.getDayOfWeek();
loovee 0:4683a4a41f47 114 }
loovee 0:4683a4a41f47 115
loovee 0:4683a4a41f47 116 void setTime()
loovee 0:4683a4a41f47 117 {
loovee 0:4683a4a41f47 118 RTC.setSeconds(50);
loovee 0:4683a4a41f47 119 RTC.setMinutes(35);
loovee 0:4683a4a41f47 120 RTC.setHours(17);
loovee 0:4683a4a41f47 121 RTC.setDays(27);
loovee 0:4683a4a41f47 122 RTC.setDayOfWeek(4);
loovee 0:4683a4a41f47 123 RTC.setMonths(3);
loovee 0:4683a4a41f47 124 RTC.setYears(2014);
loovee 0:4683a4a41f47 125
loovee 0:4683a4a41f47 126 RTC.setTime();
loovee 0:4683a4a41f47 127 }
loovee 0:4683a4a41f47 128
loovee 0:4683a4a41f47 129
loovee 0:4683a4a41f47 130 void drawPix(int x1, int y1, unsigned int color)
loovee 0:4683a4a41f47 131 {
loovee 0:4683a4a41f47 132 int x = 127-y1;
loovee 0:4683a4a41f47 133 int y = x1;
loovee 0:4683a4a41f47 134
loovee 0:4683a4a41f47 135 int n = y/8;
loovee 0:4683a4a41f47 136 n = 128*n+x;
loovee 0:4683a4a41f47 137
loovee 0:4683a4a41f47 138 int bit = y%8;
loovee 0:4683a4a41f47 139
loovee 0:4683a4a41f47 140
loovee 0:4683a4a41f47 141 if(color)
loovee 0:4683a4a41f47 142 disp[n] |= (0x01<<bit);
loovee 0:4683a4a41f47 143 else
loovee 0:4683a4a41f47 144 disp[n] &= ~(0x01<<bit);
loovee 0:4683a4a41f47 145 }
loovee 0:4683a4a41f47 146
loovee 0:4683a4a41f47 147 void drawBuff(int x, int y, int buf_len, int buf_width, int color, const unsigned char *buff)
loovee 0:4683a4a41f47 148 {
loovee 0:4683a4a41f47 149 for(int i=0; i<(buf_width/8); i++)
loovee 0:4683a4a41f47 150 {
loovee 0:4683a4a41f47 151 for(int j=0; j<buf_len; j++)
loovee 0:4683a4a41f47 152 {
loovee 0:4683a4a41f47 153 for(int k=0; k<8; k++)
loovee 0:4683a4a41f47 154 {
loovee 0:4683a4a41f47 155 int clr_ = (buff[i*buf_len+j] & (0x01<<k)) ? color : 0;
loovee 0:4683a4a41f47 156 drawPix(j+x, 8*i+k+y, clr_);
loovee 0:4683a4a41f47 157 }
loovee 0:4683a4a41f47 158 }
loovee 0:4683a4a41f47 159 }
loovee 0:4683a4a41f47 160 }
loovee 0:4683a4a41f47 161
loovee 0:4683a4a41f47 162 void dispFont(int x, int y, int color, const unsigned char *font)
loovee 0:4683a4a41f47 163 {
loovee 0:4683a4a41f47 164 drawBuff(x, y, 11, 32, color, font);
loovee 0:4683a4a41f47 165 }
loovee 0:4683a4a41f47 166
loovee 0:4683a4a41f47 167 void dispFont_small(int x, int y, int color, const unsigned char *font)
loovee 0:4683a4a41f47 168 {
loovee 0:4683a4a41f47 169 drawBuff(x, y, 8, 16, color, font);
loovee 0:4683a4a41f47 170 }
loovee 0:4683a4a41f47 171
loovee 0:4683a4a41f47 172 void dispChar(char c, int x, int y, int color)
loovee 0:4683a4a41f47 173 {
loovee 0:4683a4a41f47 174 c = c-32;
loovee 0:4683a4a41f47 175 drawBuff(x, y, 8, 16, color, font_ascii[c]);
loovee 0:4683a4a41f47 176 }
loovee 0:4683a4a41f47 177
loovee 0:4683a4a41f47 178
loovee 0:4683a4a41f47 179 void dispString(char *str)
loovee 0:4683a4a41f47 180 {
loovee 0:4683a4a41f47 181 clearOled();
loovee 0:4683a4a41f47 182
loovee 0:4683a4a41f47 183 int x=0, y=0;
loovee 0:4683a4a41f47 184
loovee 0:4683a4a41f47 185 int pix = 0;
loovee 0:4683a4a41f47 186
loovee 0:4683a4a41f47 187 while(*str)
loovee 0:4683a4a41f47 188 {
loovee 0:4683a4a41f47 189 dispChar(*str, x, y, 1);
loovee 0:4683a4a41f47 190 str++;
loovee 0:4683a4a41f47 191 x += 8;
loovee 0:4683a4a41f47 192 pix++;
loovee 0:4683a4a41f47 193
loovee 0:4683a4a41f47 194 if(pix == 8)
loovee 0:4683a4a41f47 195 {
loovee 0:4683a4a41f47 196 pix = 0;
loovee 0:4683a4a41f47 197 x = 0;
loovee 0:4683a4a41f47 198 y += 16;
loovee 0:4683a4a41f47 199 }
loovee 0:4683a4a41f47 200 }
loovee 0:4683a4a41f47 201 }
loovee 0:4683a4a41f47 202
loovee 0:4683a4a41f47 203 void dispDot(int x, int y, int color)
loovee 0:4683a4a41f47 204 {
loovee 0:4683a4a41f47 205 drawBuff(x, y, 7, 32, color, font_dot);
loovee 0:4683a4a41f47 206 }
loovee 0:4683a4a41f47 207
loovee 0:4683a4a41f47 208 void refresh_time()
loovee 0:4683a4a41f47 209 {
loovee 0:4683a4a41f47 210 int y = 60+16;
loovee 0:4683a4a41f47 211 int color_ =1;
loovee 0:4683a4a41f47 212 dispFont(0, y, color_, font_num[time_now.hour/10]);
loovee 0:4683a4a41f47 213 dispFont(14, y, color_, font_num[time_now.hour%10]);
loovee 0:4683a4a41f47 214 dispDot(28, y-2, color_);
loovee 0:4683a4a41f47 215 dispFont(38, y, color_, font_num[time_now.minutes/10]);
loovee 0:4683a4a41f47 216 dispFont(52, y, color_, font_num[time_now.minutes%10]);
loovee 0:4683a4a41f47 217 }
loovee 0:4683a4a41f47 218
loovee 0:4683a4a41f47 219 void refresh_day()
loovee 0:4683a4a41f47 220 {
loovee 0:4683a4a41f47 221 int color_ = 1;
loovee 0:4683a4a41f47 222
loovee 0:4683a4a41f47 223 int y = 40+16;
loovee 0:4683a4a41f47 224 dispChar('M', 0, y, color_);
loovee 0:4683a4a41f47 225 dispChar('a', 8, y, color_);
loovee 0:4683a4a41f47 226 dispChar('r', 16, y, color_);
loovee 0:4683a4a41f47 227
loovee 0:4683a4a41f47 228 // dispChar()
loovee 0:4683a4a41f47 229
loovee 0:4683a4a41f47 230 dispFont_small(30, y, color_, font_ascii[time_now.day/10+'0'-32]);
loovee 0:4683a4a41f47 231 dispFont_small(38, y, color_, font_ascii[time_now.day%10+'0'-32]);
loovee 0:4683a4a41f47 232 }
loovee 0:4683a4a41f47 233
loovee 0:4683a4a41f47 234 void show_time()
loovee 0:4683a4a41f47 235 {
loovee 0:4683a4a41f47 236 clearOled();
loovee 0:4683a4a41f47 237
loovee 0:4683a4a41f47 238 drawBuff(12, 0+16, 40, 40, 1, font_ophw);
loovee 0:4683a4a41f47 239 int color_ = 1;
loovee 0:4683a4a41f47 240 refresh_day();
loovee 0:4683a4a41f47 241 for(int i=0; i<63; i++)
loovee 0:4683a4a41f47 242 {
loovee 0:4683a4a41f47 243 drawPix(i, 56+16, color_);
loovee 0:4683a4a41f47 244 drawPix(i, 57+16, color_);
loovee 0:4683a4a41f47 245 }
loovee 0:4683a4a41f47 246 refresh_time();
loovee 0:4683a4a41f47 247 }
loovee 0:4683a4a41f47 248
loovee 0:4683a4a41f47 249 int main()
loovee 0:4683a4a41f47 250 {
loovee 0:4683a4a41f47 251 uart.baud(38400);
loovee 0:4683a4a41f47 252
loovee 0:4683a4a41f47 253 initOLED();
loovee 0:4683a4a41f47 254 clearOled();
loovee 0:4683a4a41f47 255
loovee 0:4683a4a41f47 256 dispString("xadow smart watch");
loovee 0:4683a4a41f47 257 display();
loovee 0:4683a4a41f47 258 wait(1);
loovee 0:4683a4a41f47 259 //setTime();
loovee 0:4683a4a41f47 260 time_init();
loovee 0:4683a4a41f47 261 show_time();
loovee 0:4683a4a41f47 262
loovee 0:4683a4a41f47 263 char ble_str[40];
loovee 0:4683a4a41f47 264 int len_str = 0;
loovee 0:4683a4a41f47 265
loovee 0:4683a4a41f47 266 display();
loovee 0:4683a4a41f47 267 for(;;)
loovee 0:4683a4a41f47 268 {
loovee 0:4683a4a41f47 269 time_refresh();
loovee 0:4683a4a41f47 270
loovee 0:4683a4a41f47 271 if(time_now.day != time_buf.day)
loovee 0:4683a4a41f47 272 {
loovee 0:4683a4a41f47 273 refresh_day();
loovee 0:4683a4a41f47 274 display();
loovee 0:4683a4a41f47 275 }
loovee 0:4683a4a41f47 276
loovee 0:4683a4a41f47 277 if(time_now.minutes != time_buf.minutes)
loovee 0:4683a4a41f47 278 {
loovee 0:4683a4a41f47 279 refresh_time();
loovee 0:4683a4a41f47 280 display();
loovee 0:4683a4a41f47 281 }
loovee 0:4683a4a41f47 282
loovee 0:4683a4a41f47 283 wait(0.1);
loovee 0:4683a4a41f47 284
loovee 0:4683a4a41f47 285
loovee 0:4683a4a41f47 286 while (uart.readable())
loovee 0:4683a4a41f47 287 {
loovee 0:4683a4a41f47 288 ble_str[len_str++] = uart.getc();
loovee 0:4683a4a41f47 289 }
loovee 0:4683a4a41f47 290
loovee 0:4683a4a41f47 291 if(len_str == 1 && (ble_str[0] == 't' || ble_str[0] == 'T'))
loovee 0:4683a4a41f47 292 {
loovee 0:4683a4a41f47 293 time_refresh();
loovee 0:4683a4a41f47 294 display();
loovee 0:4683a4a41f47 295 uart.printf("%d/%d/%d\r\n", time_now.year, time_now.month, time_now.day);
loovee 0:4683a4a41f47 296 uart.printf("%d:%d:%d\r\n", time_now.hour, time_now.minutes, time_now.second);
loovee 0:4683a4a41f47 297 len_str = 0;
loovee 0:4683a4a41f47 298 }
loovee 0:4683a4a41f47 299 else if(ble_str[0] == 's' && len_str == 16) // set time
loovee 0:4683a4a41f47 300 {
loovee 0:4683a4a41f47 301 // s201403280944003
loovee 0:4683a4a41f47 302 RTC.setSeconds((ble_str[13]-'0')*10+(ble_str[14]-'0'));
loovee 0:4683a4a41f47 303 RTC.setMinutes((ble_str[11]-'0')*10+(ble_str[12]-'0'));
loovee 0:4683a4a41f47 304 RTC.setHours((ble_str[9]-'0')*10+(ble_str[10]-'0'));
loovee 0:4683a4a41f47 305 RTC.setDays((ble_str[7]-'0')*10+(ble_str[8]-'0'));
loovee 0:4683a4a41f47 306 RTC.setDayOfWeek(ble_str[15]-'0');
loovee 0:4683a4a41f47 307 RTC.setMonths((ble_str[5]-'0')*10+(ble_str[6]-'0'));
loovee 0:4683a4a41f47 308 RTC.setYears((ble_str[1]-'0')*1000+(ble_str[2]-'0')*100+(ble_str[3]-'0')*10+(ble_str[4]-'0'));
loovee 0:4683a4a41f47 309
loovee 0:4683a4a41f47 310 RTC.setTime();
loovee 0:4683a4a41f47 311 }
loovee 0:4683a4a41f47 312 else if(len_str>0)
loovee 0:4683a4a41f47 313 {
loovee 0:4683a4a41f47 314 uart.printf("get ok\r\n");
loovee 0:4683a4a41f47 315 ble_str[len_str] = '\0';
loovee 0:4683a4a41f47 316 dispString(ble_str);
loovee 0:4683a4a41f47 317 display();
loovee 0:4683a4a41f47 318 wait(3);
loovee 0:4683a4a41f47 319 show_time();
loovee 0:4683a4a41f47 320 display();
loovee 0:4683a4a41f47 321 len_str = 0;
loovee 0:4683a4a41f47 322 }
loovee 0:4683a4a41f47 323
loovee 0:4683a4a41f47 324 }
loovee 0:4683a4a41f47 325 }
loovee 0:4683a4a41f47 326