Google weather APIから取得したお天気情報をVFDに表示します。
Dependencies: NetServices mbed spxml
main.cpp@0:e89d01416461, 2011-11-26 (annotated)
- Committer:
- kanpapa
- Date:
- Sat Nov 26 12:12:08 2011 +0000
- Revision:
- 0:e89d01416461
beta version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kanpapa | 0:e89d01416461 | 1 | // |
kanpapa | 0:e89d01416461 | 2 | // VFD fontx2 weather |
kanpapa | 0:e89d01416461 | 3 | // |
kanpapa | 0:e89d01416461 | 4 | // 2011/11/26 by @kanpapa |
kanpapa | 0:e89d01416461 | 5 | // |
kanpapa | 0:e89d01416461 | 6 | // Special thanks: @gingaxx |
kanpapa | 0:e89d01416461 | 7 | // |
kanpapa | 0:e89d01416461 | 8 | |
kanpapa | 0:e89d01416461 | 9 | #include "mbed.h" |
kanpapa | 0:e89d01416461 | 10 | |
kanpapa | 0:e89d01416461 | 11 | #include "EthernetNetIf.h" |
kanpapa | 0:e89d01416461 | 12 | #include "HTTPClient.h" |
kanpapa | 0:e89d01416461 | 13 | |
kanpapa | 0:e89d01416461 | 14 | #include "spdomparser.hpp" |
kanpapa | 0:e89d01416461 | 15 | #include "spxmlnode.hpp" |
kanpapa | 0:e89d01416461 | 16 | #include "spxmlhandle.hpp" |
kanpapa | 0:e89d01416461 | 17 | |
kanpapa | 0:e89d01416461 | 18 | #include "vfd_gp1059.h" |
kanpapa | 0:e89d01416461 | 19 | /* |
kanpapa | 0:e89d01416461 | 20 | ========================= |
kanpapa | 0:e89d01416461 | 21 | FUTABA VFD GP1059A01(I/O) |
kanpapa | 0:e89d01416461 | 22 | ------------------------- |
kanpapa | 0:e89d01416461 | 23 | p9 1 (D0) I/O |
kanpapa | 0:e89d01416461 | 24 | p10 2 (D1) I/O |
kanpapa | 0:e89d01416461 | 25 | p11 3 (D2) I/O |
kanpapa | 0:e89d01416461 | 26 | p12 4 (D3) I/O |
kanpapa | 0:e89d01416461 | 27 | p13 5 (D4) I/O |
kanpapa | 0:e89d01416461 | 28 | p14 6 (D5) I/O |
kanpapa | 0:e89d01416461 | 29 | p15 7 (D6) I/O |
kanpapa | 0:e89d01416461 | 30 | p16 8 (D7) I/O |
kanpapa | 0:e89d01416461 | 31 | p21 10 (INT) O |
kanpapa | 0:e89d01416461 | 32 | p22 11 (WR) I |
kanpapa | 0:e89d01416461 | 33 | p23 12 (RD) I |
kanpapa | 0:e89d01416461 | 34 | p24 13 (CS) I |
kanpapa | 0:e89d01416461 | 35 | p25 14 (C/D) I |
kanpapa | 0:e89d01416461 | 36 | */ |
kanpapa | 0:e89d01416461 | 37 | |
kanpapa | 0:e89d01416461 | 38 | VFD_GP1059 vfd(p9, p10, p11, p12, p13, p14, p15, p16, p21, p22, p23, p24, p25); |
kanpapa | 0:e89d01416461 | 39 | |
kanpapa | 0:e89d01416461 | 40 | LocalFileSystem local("local"); |
kanpapa | 0:e89d01416461 | 41 | |
kanpapa | 0:e89d01416461 | 42 | // LED Status |
kanpapa | 0:e89d01416461 | 43 | DigitalOut led1(LED1); |
kanpapa | 0:e89d01416461 | 44 | DigitalOut led2(LED2); |
kanpapa | 0:e89d01416461 | 45 | DigitalOut led3(LED3); |
kanpapa | 0:e89d01416461 | 46 | DigitalOut led4(LED4); |
kanpapa | 0:e89d01416461 | 47 | |
kanpapa | 0:e89d01416461 | 48 | unsigned char reverse_bit(unsigned char x){ |
kanpapa | 0:e89d01416461 | 49 | const unsigned int bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; |
kanpapa | 0:e89d01416461 | 50 | unsigned char y = 0; |
kanpapa | 0:e89d01416461 | 51 | for (int i = 0; i < 8; i++){ |
kanpapa | 0:e89d01416461 | 52 | if ((bit[i] & x) != 0){ |
kanpapa | 0:e89d01416461 | 53 | y |= bit[7-i]; |
kanpapa | 0:e89d01416461 | 54 | } |
kanpapa | 0:e89d01416461 | 55 | } |
kanpapa | 0:e89d01416461 | 56 | return(y); |
kanpapa | 0:e89d01416461 | 57 | } |
kanpapa | 0:e89d01416461 | 58 | |
kanpapa | 0:e89d01416461 | 59 | // |
kanpapa | 0:e89d01416461 | 60 | // FONTX2 test routine |
kanpapa | 0:e89d01416461 | 61 | // original version @gingaxx |
kanpapa | 0:e89d01416461 | 62 | // |
kanpapa | 0:e89d01416461 | 63 | |
kanpapa | 0:e89d01416461 | 64 | //#define kanji_file "/local/SHMZN16X.FNT" |
kanpapa | 0:e89d01416461 | 65 | //#define kanji_file "/local/k12x10.fnt" |
kanpapa | 0:e89d01416461 | 66 | //#define kanji_file "/local/J2KZN16A.FNT" |
kanpapa | 0:e89d01416461 | 67 | //#define kanji_file "/local/XBGZN16X.TLF" |
kanpapa | 0:e89d01416461 | 68 | #define kanji_file "/local/MGOZN16X.TLF" |
kanpapa | 0:e89d01416461 | 69 | |
kanpapa | 0:e89d01416461 | 70 | int cx = 0; |
kanpapa | 0:e89d01416461 | 71 | int cy = 0; |
kanpapa | 0:e89d01416461 | 72 | //int offsety = 0; |
kanpapa | 0:e89d01416461 | 73 | //bool kstate = false; |
kanpapa | 0:e89d01416461 | 74 | //unsigned char kbuf; |
kanpapa | 0:e89d01416461 | 75 | |
kanpapa | 0:e89d01416461 | 76 | FILE *fp; // File open buffer |
kanpapa | 0:e89d01416461 | 77 | |
kanpapa | 0:e89d01416461 | 78 | unsigned short start[92], end[92]; // table |
kanpapa | 0:e89d01416461 | 79 | unsigned char font[64]; // kanji image read buffer |
kanpapa | 0:e89d01416461 | 80 | |
kanpapa | 0:e89d01416461 | 81 | char Identifier[6+1]; // 00-05 "FONTX2" |
kanpapa | 0:e89d01416461 | 82 | char FontName[8+1]; // 06-13 Font name |
kanpapa | 0:e89d01416461 | 83 | unsigned char XSize; // 14 |
kanpapa | 0:e89d01416461 | 84 | unsigned char YSize; // 15 |
kanpapa | 0:e89d01416461 | 85 | unsigned char CodeType; // 16 0:ASCII, 1:KANJI |
kanpapa | 0:e89d01416461 | 86 | unsigned char Tnum; // 17 Table entry number |
kanpapa | 0:e89d01416461 | 87 | |
kanpapa | 0:e89d01416461 | 88 | //#define FONT_XBYTE ((XSize + 7) >> 3) |
kanpapa | 0:e89d01416461 | 89 | //#define FONT_YBYTE ((YSize + 7) >> 3) |
kanpapa | 0:e89d01416461 | 90 | |
kanpapa | 0:e89d01416461 | 91 | void kanji_init(){ |
kanpapa | 0:e89d01416461 | 92 | //move cursor |
kanpapa | 0:e89d01416461 | 93 | fp = fopen(kanji_file , "r"); |
kanpapa | 0:e89d01416461 | 94 | |
kanpapa | 0:e89d01416461 | 95 | if(!fp) { |
kanpapa | 0:e89d01416461 | 96 | printf("File could not be opened!\n"); |
kanpapa | 0:e89d01416461 | 97 | led1 = 1; |
kanpapa | 0:e89d01416461 | 98 | exit(1); |
kanpapa | 0:e89d01416461 | 99 | } |
kanpapa | 0:e89d01416461 | 100 | |
kanpapa | 0:e89d01416461 | 101 | fgets(Identifier, 6+1, fp); // FONTX2 |
kanpapa | 0:e89d01416461 | 102 | fgets(FontName, 8+1, fp); |
kanpapa | 0:e89d01416461 | 103 | fread(&XSize, 1, 1, fp); |
kanpapa | 0:e89d01416461 | 104 | fread(&YSize, 1, 1, fp); |
kanpapa | 0:e89d01416461 | 105 | fread(&CodeType, 1, 1, fp); |
kanpapa | 0:e89d01416461 | 106 | fread(&Tnum, 1, 1, fp); |
kanpapa | 0:e89d01416461 | 107 | |
kanpapa | 0:e89d01416461 | 108 | printf("Identifier: %s\n\r",Identifier); |
kanpapa | 0:e89d01416461 | 109 | printf("FontName: %s\n\r",FontName); |
kanpapa | 0:e89d01416461 | 110 | printf("XSize: %d\n\r",XSize); |
kanpapa | 0:e89d01416461 | 111 | printf("YSize: %d\n\r",YSize); |
kanpapa | 0:e89d01416461 | 112 | printf("CodeType: %d\n\r",CodeType); |
kanpapa | 0:e89d01416461 | 113 | printf("Tnum: %d\n\r",Tnum); |
kanpapa | 0:e89d01416461 | 114 | |
kanpapa | 0:e89d01416461 | 115 | // Table read |
kanpapa | 0:e89d01416461 | 116 | for (int a = 0; a < Tnum; a++){ |
kanpapa | 0:e89d01416461 | 117 | fread(&start[a], 1, 2, fp); |
kanpapa | 0:e89d01416461 | 118 | fread(&end[a] , 1, 2, fp); |
kanpapa | 0:e89d01416461 | 119 | printf("Table No.%d start:%04x end:%04x\n\r",a,start[a],end[a]); |
kanpapa | 0:e89d01416461 | 120 | } |
kanpapa | 0:e89d01416461 | 121 | } |
kanpapa | 0:e89d01416461 | 122 | |
kanpapa | 0:e89d01416461 | 123 | //Kanji puts cr = kanji code |
kanpapa | 0:e89d01416461 | 124 | void k_puts(int cr){ |
kanpapa | 0:e89d01416461 | 125 | |
kanpapa | 0:e89d01416461 | 126 | const unsigned char bit_chk[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; |
kanpapa | 0:e89d01416461 | 127 | |
kanpapa | 0:e89d01416461 | 128 | // LF code control |
kanpapa | 0:e89d01416461 | 129 | if (cr == '\n') { |
kanpapa | 0:e89d01416461 | 130 | cx = 0; |
kanpapa | 0:e89d01416461 | 131 | cy++; |
kanpapa | 0:e89d01416461 | 132 | return; |
kanpapa | 0:e89d01416461 | 133 | } |
kanpapa | 0:e89d01416461 | 134 | |
kanpapa | 0:e89d01416461 | 135 | // calculate kanji address |
kanpapa | 0:e89d01416461 | 136 | int c = 0; |
kanpapa | 0:e89d01416461 | 137 | int adrs = 0; |
kanpapa | 0:e89d01416461 | 138 | while(cr > start[c]){ |
kanpapa | 0:e89d01416461 | 139 | if (cr > end[c]){ |
kanpapa | 0:e89d01416461 | 140 | adrs += end[c] - start[c] + 1; |
kanpapa | 0:e89d01416461 | 141 | } else { |
kanpapa | 0:e89d01416461 | 142 | adrs += cr - start[c]; |
kanpapa | 0:e89d01416461 | 143 | } |
kanpapa | 0:e89d01416461 | 144 | c++; |
kanpapa | 0:e89d01416461 | 145 | } |
kanpapa | 0:e89d01416461 | 146 | c--; |
kanpapa | 0:e89d01416461 | 147 | printf("cr=%X, table num=%d, adrs=%d \r\n",cr,c,adrs); |
kanpapa | 0:e89d01416461 | 148 | |
kanpapa | 0:e89d01416461 | 149 | // Kanji image Read |
kanpapa | 0:e89d01416461 | 150 | fseek( fp, Tnum * 4 + 18 + 32 * adrs, SEEK_SET ); |
kanpapa | 0:e89d01416461 | 151 | fread( &font, 1, 32, fp); |
kanpapa | 0:e89d01416461 | 152 | |
kanpapa | 0:e89d01416461 | 153 | // debug dump |
kanpapa | 0:e89d01416461 | 154 | //for (int s = 0; s < 32 ; s++){ |
kanpapa | 0:e89d01416461 | 155 | // printf(" %02x ",font[s]); |
kanpapa | 0:e89d01416461 | 156 | //} |
kanpapa | 0:e89d01416461 | 157 | //printf("\r\n"); |
kanpapa | 0:e89d01416461 | 158 | |
kanpapa | 0:e89d01416461 | 159 | // kanji put |
kanpapa | 0:e89d01416461 | 160 | c = 0; |
kanpapa | 0:e89d01416461 | 161 | unsigned int vfd_address = cx * 8 * 16 + cy * 2; |
kanpapa | 0:e89d01416461 | 162 | //printf("VFD address: %04x\r\n",vfd_address); |
kanpapa | 0:e89d01416461 | 163 | |
kanpapa | 0:e89d01416461 | 164 | int n = 0; |
kanpapa | 0:e89d01416461 | 165 | for (int j = 0; j < 2 ; j++) { |
kanpapa | 0:e89d01416461 | 166 | for (int x = 0; x < 8; x++) { |
kanpapa | 0:e89d01416461 | 167 | //printf("set VFD address: %04x\r\n",vfd_address); |
kanpapa | 0:e89d01416461 | 168 | vfd.set_write_read_address(vfd_address); |
kanpapa | 0:e89d01416461 | 169 | int m = 0; |
kanpapa | 0:e89d01416461 | 170 | for (int k = 0; k < 2 ; k++) { |
kanpapa | 0:e89d01416461 | 171 | unsigned int d = 0; |
kanpapa | 0:e89d01416461 | 172 | for (int i = 0; i < 8; i++) { |
kanpapa | 0:e89d01416461 | 173 | if (font[m * 2 + j] & bit_chk[x]) { |
kanpapa | 0:e89d01416461 | 174 | //printf("BIT on!\r\n"); |
kanpapa | 0:e89d01416461 | 175 | d = d | 1; |
kanpapa | 0:e89d01416461 | 176 | } |
kanpapa | 0:e89d01416461 | 177 | if (i < 7) { |
kanpapa | 0:e89d01416461 | 178 | d = d << 1; |
kanpapa | 0:e89d01416461 | 179 | } |
kanpapa | 0:e89d01416461 | 180 | //printf("i:%d, k:%d, m:%d, font:%02x, bit_chk:%02x, data:%02x\r\n",i,k,m,font[m*2+j],bit_chk[x],d); |
kanpapa | 0:e89d01416461 | 181 | m++; |
kanpapa | 0:e89d01416461 | 182 | } |
kanpapa | 0:e89d01416461 | 183 | //printf("send_data: %02x\r\n",d); |
kanpapa | 0:e89d01416461 | 184 | vfd.send_data(d); |
kanpapa | 0:e89d01416461 | 185 | } |
kanpapa | 0:e89d01416461 | 186 | vfd_address = vfd_address + 8; |
kanpapa | 0:e89d01416461 | 187 | } |
kanpapa | 0:e89d01416461 | 188 | n++; |
kanpapa | 0:e89d01416461 | 189 | } |
kanpapa | 0:e89d01416461 | 190 | |
kanpapa | 0:e89d01416461 | 191 | // move cursor |
kanpapa | 0:e89d01416461 | 192 | cx++; |
kanpapa | 0:e89d01416461 | 193 | if (cx >= 15){ //LF control |
kanpapa | 0:e89d01416461 | 194 | cx = 0; |
kanpapa | 0:e89d01416461 | 195 | cy++; |
kanpapa | 0:e89d01416461 | 196 | } |
kanpapa | 0:e89d01416461 | 197 | } |
kanpapa | 0:e89d01416461 | 198 | |
kanpapa | 0:e89d01416461 | 199 | void kanji_end(){ |
kanpapa | 0:e89d01416461 | 200 | fclose(fp); |
kanpapa | 0:e89d01416461 | 201 | } |
kanpapa | 0:e89d01416461 | 202 | |
kanpapa | 0:e89d01416461 | 203 | void display_vfd_space(){ |
kanpapa | 0:e89d01416461 | 204 | k_puts(0x8140); |
kanpapa | 0:e89d01416461 | 205 | } |
kanpapa | 0:e89d01416461 | 206 | |
kanpapa | 0:e89d01416461 | 207 | void display_vfd (const char * buf){ |
kanpapa | 0:e89d01416461 | 208 | unsigned int kc = 0; |
kanpapa | 0:e89d01416461 | 209 | while (1) { |
kanpapa | 0:e89d01416461 | 210 | // "0" - "9" 0x30-0x39 824f-8258 |
kanpapa | 0:e89d01416461 | 211 | // "A" - "Z" 0x41-0x4A 8260-8279 |
kanpapa | 0:e89d01416461 | 212 | // "a" - "z" 0x61-0x7a 8281-829a |
kanpapa | 0:e89d01416461 | 213 | printf("check buf= %02x ", *buf); |
kanpapa | 0:e89d01416461 | 214 | if (*buf == 0) break; |
kanpapa | 0:e89d01416461 | 215 | if (*buf >= '0' && *buf <= '9') { |
kanpapa | 0:e89d01416461 | 216 | kc = 0x821f + *buf; |
kanpapa | 0:e89d01416461 | 217 | } else if (*buf >= 'A' && *buf <= 'Z') { |
kanpapa | 0:e89d01416461 | 218 | kc = 0x821f + *buf; |
kanpapa | 0:e89d01416461 | 219 | } else if (*buf >= 'a' && *buf <= 'z') { |
kanpapa | 0:e89d01416461 | 220 | kc = 0x8220 + *buf; |
kanpapa | 0:e89d01416461 | 221 | } else if (*buf == '%') { |
kanpapa | 0:e89d01416461 | 222 | kc = 0x8193; |
kanpapa | 0:e89d01416461 | 223 | } else if (*buf == '/') { |
kanpapa | 0:e89d01416461 | 224 | kc = 0x815e; |
kanpapa | 0:e89d01416461 | 225 | } else if (*buf == ':') { |
kanpapa | 0:e89d01416461 | 226 | kc = 0x8146; |
kanpapa | 0:e89d01416461 | 227 | } else if (*buf == '\n') { |
kanpapa | 0:e89d01416461 | 228 | kc = '\n'; |
kanpapa | 0:e89d01416461 | 229 | } else if (*buf >= 0x80) { |
kanpapa | 0:e89d01416461 | 230 | // kanji |
kanpapa | 0:e89d01416461 | 231 | kc = *buf * 256 + *(buf + 1); |
kanpapa | 0:e89d01416461 | 232 | buf++; |
kanpapa | 0:e89d01416461 | 233 | } else { |
kanpapa | 0:e89d01416461 | 234 | kc = 0; |
kanpapa | 0:e89d01416461 | 235 | } |
kanpapa | 0:e89d01416461 | 236 | buf++; |
kanpapa | 0:e89d01416461 | 237 | |
kanpapa | 0:e89d01416461 | 238 | printf("kc: %04x ",kc); |
kanpapa | 0:e89d01416461 | 239 | if (kc != 0) { |
kanpapa | 0:e89d01416461 | 240 | k_puts(kc); |
kanpapa | 0:e89d01416461 | 241 | } |
kanpapa | 0:e89d01416461 | 242 | } |
kanpapa | 0:e89d01416461 | 243 | } |
kanpapa | 0:e89d01416461 | 244 | |
kanpapa | 0:e89d01416461 | 245 | const char tokyo[7] = {0x93, 0x8c, 0x8b, 0x9e, 0x93, 0x73, 0x00}; |
kanpapa | 0:e89d01416461 | 246 | const char otacity[7] = {0x91, 0xe5, 0x93, 0x63, 0x8b, 0xe6, 0x00}; |
kanpapa | 0:e89d01416461 | 247 | const char today_weather[7] = {0x82, 0xcc, 0x93, 0x56, 0x8b, 0x43, 0x00}; |
kanpapa | 0:e89d01416461 | 248 | const char kanji_condition[7] = {0x8b, 0x43, 0x89, 0xb7, 0x81, 0x46, 0x00}; |
kanpapa | 0:e89d01416461 | 249 | const char kanji_c[3] = {0x81, 0x8e, 0x00}; |
kanpapa | 0:e89d01416461 | 250 | |
kanpapa | 0:e89d01416461 | 251 | EthernetNetIf eth; |
kanpapa | 0:e89d01416461 | 252 | HTTPClient http; |
kanpapa | 0:e89d01416461 | 253 | |
kanpapa | 0:e89d01416461 | 254 | HTTPResult result; |
kanpapa | 0:e89d01416461 | 255 | bool completed = false; |
kanpapa | 0:e89d01416461 | 256 | void request_callback(HTTPResult r) { |
kanpapa | 0:e89d01416461 | 257 | result = r; |
kanpapa | 0:e89d01416461 | 258 | completed = true; |
kanpapa | 0:e89d01416461 | 259 | } |
kanpapa | 0:e89d01416461 | 260 | |
kanpapa | 0:e89d01416461 | 261 | void blink_LED() { |
kanpapa | 0:e89d01416461 | 262 | for (int i = 0 ; i < 5 ; i++) { |
kanpapa | 0:e89d01416461 | 263 | led4 = 1; |
kanpapa | 0:e89d01416461 | 264 | wait(0.2); |
kanpapa | 0:e89d01416461 | 265 | led4 = 0; |
kanpapa | 0:e89d01416461 | 266 | wait(0.2); |
kanpapa | 0:e89d01416461 | 267 | } |
kanpapa | 0:e89d01416461 | 268 | return; |
kanpapa | 0:e89d01416461 | 269 | } |
kanpapa | 0:e89d01416461 | 270 | |
kanpapa | 0:e89d01416461 | 271 | void dispCurrent() { |
kanpapa | 0:e89d01416461 | 272 | display_vfd(tokyo); |
kanpapa | 0:e89d01416461 | 273 | display_vfd(otacity); |
kanpapa | 0:e89d01416461 | 274 | display_vfd(today_weather); |
kanpapa | 0:e89d01416461 | 275 | display_vfd_space(); |
kanpapa | 0:e89d01416461 | 276 | return; |
kanpapa | 0:e89d01416461 | 277 | } |
kanpapa | 0:e89d01416461 | 278 | |
kanpapa | 0:e89d01416461 | 279 | void parseWeather(SP_XmlElementNode *node) { |
kanpapa | 0:e89d01416461 | 280 | SP_XmlHandle handle(node); |
kanpapa | 0:e89d01416461 | 281 | SP_XmlElementNode * condition = handle.getChild( "condition" ).toElement(); |
kanpapa | 0:e89d01416461 | 282 | if (condition) { |
kanpapa | 0:e89d01416461 | 283 | printf("current condition=%s\n",condition->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 284 | display_vfd(condition->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 285 | display_vfd_space(); |
kanpapa | 0:e89d01416461 | 286 | } |
kanpapa | 0:e89d01416461 | 287 | SP_XmlElementNode * tempc = handle.getChild( "temp_c" ).toElement(); |
kanpapa | 0:e89d01416461 | 288 | if (tempc) { |
kanpapa | 0:e89d01416461 | 289 | printf("current temp=%sC\n",tempc->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 290 | display_vfd(kanji_condition); |
kanpapa | 0:e89d01416461 | 291 | display_vfd(tempc->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 292 | display_vfd(kanji_c); |
kanpapa | 0:e89d01416461 | 293 | display_vfd_space(); |
kanpapa | 0:e89d01416461 | 294 | } |
kanpapa | 0:e89d01416461 | 295 | SP_XmlElementNode * humidity = handle.getChild( "humidity" ).toElement(); |
kanpapa | 0:e89d01416461 | 296 | if (humidity) { |
kanpapa | 0:e89d01416461 | 297 | printf("current humidity=%s\n", humidity->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 298 | display_vfd(humidity->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 299 | display_vfd_space(); |
kanpapa | 0:e89d01416461 | 300 | } |
kanpapa | 0:e89d01416461 | 301 | SP_XmlElementNode * wind_condition = handle.getChild( "wind_condition" ).toElement(); |
kanpapa | 0:e89d01416461 | 302 | if (wind_condition) { |
kanpapa | 0:e89d01416461 | 303 | printf("current wind_condition=%s\n",wind_condition->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 304 | display_vfd(wind_condition->getAttrValue("data")); |
kanpapa | 0:e89d01416461 | 305 | } |
kanpapa | 0:e89d01416461 | 306 | } |
kanpapa | 0:e89d01416461 | 307 | |
kanpapa | 0:e89d01416461 | 308 | int main() { |
kanpapa | 0:e89d01416461 | 309 | // the eth and HTTP code has be taken directly from the HTTPStream documentation page |
kanpapa | 0:e89d01416461 | 310 | // see http://mbed.org/cookbook/HTTP-Client-Data-Containers |
kanpapa | 0:e89d01416461 | 311 | |
kanpapa | 0:e89d01416461 | 312 | // Start Sign |
kanpapa | 0:e89d01416461 | 313 | blink_LED(); |
kanpapa | 0:e89d01416461 | 314 | |
kanpapa | 0:e89d01416461 | 315 | // init VFD |
kanpapa | 0:e89d01416461 | 316 | vfd.cls(); |
kanpapa | 0:e89d01416461 | 317 | vfd.set_disp_start_address(0); // Display address: 000000H |
kanpapa | 0:e89d01416461 | 318 | vfd.luminance_adjustment(0x0f); // 100% |
kanpapa | 0:e89d01416461 | 319 | |
kanpapa | 0:e89d01416461 | 320 | // setup FONTX2 |
kanpapa | 0:e89d01416461 | 321 | kanji_init(); |
kanpapa | 0:e89d01416461 | 322 | printf("kanji_init()\r\n"); |
kanpapa | 0:e89d01416461 | 323 | |
kanpapa | 0:e89d01416461 | 324 | printf("LAN setup\n"); |
kanpapa | 0:e89d01416461 | 325 | EthernetErr ethErr = eth.setup(); |
kanpapa | 0:e89d01416461 | 326 | if (ethErr) { |
kanpapa | 0:e89d01416461 | 327 | printf("Error in LAN setup\n"); |
kanpapa | 0:e89d01416461 | 328 | vfd.cls(); |
kanpapa | 0:e89d01416461 | 329 | display_vfd("Error in LAN setup"); |
kanpapa | 0:e89d01416461 | 330 | // Close FONTX2 file |
kanpapa | 0:e89d01416461 | 331 | kanji_end(); |
kanpapa | 0:e89d01416461 | 332 | printf("kanji_end()\r\n"); |
kanpapa | 0:e89d01416461 | 333 | return -1; |
kanpapa | 0:e89d01416461 | 334 | } |
kanpapa | 0:e89d01416461 | 335 | printf("LAN setup ok\n"); |
kanpapa | 0:e89d01416461 | 336 | |
kanpapa | 0:e89d01416461 | 337 | SP_XmlDomParser parser; |
kanpapa | 0:e89d01416461 | 338 | |
kanpapa | 0:e89d01416461 | 339 | HTTPStream stream; |
kanpapa | 0:e89d01416461 | 340 | |
kanpapa | 0:e89d01416461 | 341 | char BigBuf[512 + 1] = {0}; |
kanpapa | 0:e89d01416461 | 342 | stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read |
kanpapa | 0:e89d01416461 | 343 | |
kanpapa | 0:e89d01416461 | 344 | while(1){ |
kanpapa | 0:e89d01416461 | 345 | led1 = 1; |
kanpapa | 0:e89d01416461 | 346 | //HTTPResult r = http.get("http://www.google.com/ig/api?weather=Los+Angeles", &stream, request_callback); |
kanpapa | 0:e89d01416461 | 347 | HTTPResult r = http.get("http://www.google.com/ig/api?weather=ota,tokyo&hl=ja", &stream, request_callback); |
kanpapa | 0:e89d01416461 | 348 | |
kanpapa | 0:e89d01416461 | 349 | while (!completed) { |
kanpapa | 0:e89d01416461 | 350 | Net::poll(); //Polls the Networking stack |
kanpapa | 0:e89d01416461 | 351 | if (stream.readable()) { |
kanpapa | 0:e89d01416461 | 352 | BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string |
kanpapa | 0:e89d01416461 | 353 | |
kanpapa | 0:e89d01416461 | 354 | parser.append( BigBuf, strlen(BigBuf)); // stream current buffer data to the XML parser |
kanpapa | 0:e89d01416461 | 355 | |
kanpapa | 0:e89d01416461 | 356 | stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it |
kanpapa | 0:e89d01416461 | 357 | } |
kanpapa | 0:e89d01416461 | 358 | } |
kanpapa | 0:e89d01416461 | 359 | if (result == HTTP_OK) { |
kanpapa | 0:e89d01416461 | 360 | printf("HTTP Read completely\n"); |
kanpapa | 0:e89d01416461 | 361 | } else { |
kanpapa | 0:e89d01416461 | 362 | printf("HTTP Error %d\n", result); |
kanpapa | 0:e89d01416461 | 363 | vfd.cls(); |
kanpapa | 0:e89d01416461 | 364 | display_vfd("HTTP Error"); |
kanpapa | 0:e89d01416461 | 365 | // Close FONTX2 file |
kanpapa | 0:e89d01416461 | 366 | kanji_end(); |
kanpapa | 0:e89d01416461 | 367 | printf("kanji_end()\r\n"); |
kanpapa | 0:e89d01416461 | 368 | return -1; |
kanpapa | 0:e89d01416461 | 369 | } |
kanpapa | 0:e89d01416461 | 370 | |
kanpapa | 0:e89d01416461 | 371 | SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() ); |
kanpapa | 0:e89d01416461 | 372 | SP_XmlElementNode * child2 = rootHandle.getChild( "weather" ) |
kanpapa | 0:e89d01416461 | 373 | .getChild( "current_conditions").toElement(); |
kanpapa | 0:e89d01416461 | 374 | led1 = 0; |
kanpapa | 0:e89d01416461 | 375 | |
kanpapa | 0:e89d01416461 | 376 | if ( child2 ) { |
kanpapa | 0:e89d01416461 | 377 | dispCurrent(); |
kanpapa | 0:e89d01416461 | 378 | parseWeather(child2); |
kanpapa | 0:e89d01416461 | 379 | } |
kanpapa | 0:e89d01416461 | 380 | |
kanpapa | 0:e89d01416461 | 381 | if ( NULL != parser.getError() ) { |
kanpapa | 0:e89d01416461 | 382 | printf( "\n\nerror: %s\n", parser.getError() ); |
kanpapa | 0:e89d01416461 | 383 | } |
kanpapa | 0:e89d01416461 | 384 | |
kanpapa | 0:e89d01416461 | 385 | // scrool 30 * (10sec + 1sec * 3 + 10sec) |
kanpapa | 0:e89d01416461 | 386 | led2 = 1; |
kanpapa | 0:e89d01416461 | 387 | for (int loop = 0; loop < 30 ; loop++) { |
kanpapa | 0:e89d01416461 | 388 | uint16_t address = 0; |
kanpapa | 0:e89d01416461 | 389 | vfd.set_disp_start_address(address); |
kanpapa | 0:e89d01416461 | 390 | wait(10); |
kanpapa | 0:e89d01416461 | 391 | |
kanpapa | 0:e89d01416461 | 392 | for (int dot = 0; dot < 3; dot++) { |
kanpapa | 0:e89d01416461 | 393 | vfd.set_disp_start_address(address); |
kanpapa | 0:e89d01416461 | 394 | wait(1); |
kanpapa | 0:e89d01416461 | 395 | address++; |
kanpapa | 0:e89d01416461 | 396 | } |
kanpapa | 0:e89d01416461 | 397 | wait(10); |
kanpapa | 0:e89d01416461 | 398 | } |
kanpapa | 0:e89d01416461 | 399 | led2 = 0; |
kanpapa | 0:e89d01416461 | 400 | |
kanpapa | 0:e89d01416461 | 401 | // END Sign |
kanpapa | 0:e89d01416461 | 402 | blink_LED(); |
kanpapa | 0:e89d01416461 | 403 | |
kanpapa | 0:e89d01416461 | 404 | //kanji_end(); |
kanpapa | 0:e89d01416461 | 405 | //printf("kanji_end()\r\n"); |
kanpapa | 0:e89d01416461 | 406 | |
kanpapa | 0:e89d01416461 | 407 | printf("end\n"); |
kanpapa | 0:e89d01416461 | 408 | |
kanpapa | 0:e89d01416461 | 409 | wait(60); |
kanpapa | 0:e89d01416461 | 410 | } |
kanpapa | 0:e89d01416461 | 411 | } |