akizuki no geiger counter kit

Dependencies:   EthernetNetIf NTPClient_NetServices TextLCD mbed

Committer:
suupen
Date:
Thu Mar 31 11:42:38 2011 +0000
Revision:
0:8a84478219ae
Ver0.1 2001/03/31

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:8a84478219ae 1 /**************************************
suupen 0:8a84478219ae 2 * Akizuki Geiger Kit
suupen 0:8a84478219ae 3 *
suupen 0:8a84478219ae 4 * program ver 0.1 2001/03/31
suupen 0:8a84478219ae 5 *
suupen 0:8a84478219ae 6 * Text Lcd
suupen 0:8a84478219ae 7 * RS : p8
suupen 0:8a84478219ae 8 * E : p9
suupen 0:8a84478219ae 9 * WR : P14 (output=Low(GND))
suupen 0:8a84478219ae 10 * d4 : p13
suupen 0:8a84478219ae 11 * d5 : p10
suupen 0:8a84478219ae 12 * d6 : p12
suupen 0:8a84478219ae 13 * d7 : p11
suupen 0:8a84478219ae 14 *
suupen 0:8a84478219ae 15 * Akizuki Geiger
suupen 0:8a84478219ae 16 * signal : p24 (Akizuki Geiger Kit no "EX Out" kara 1:3 no teikou bunatu de 9[V] wo 3[V] ni site nyuuryoku)
suupen 0:8a84478219ae 17 * signalGnd : p21(output=Low(GND))
suupen 0:8a84478219ae 18 *
suupen 0:8a84478219ae 19 * sanko bunken
suupen 0:8a84478219ae 20 * maikon to densi kosaku No.5
suupen 0:8a84478219ae 21 * CQ shupansha
suupen 0:8a84478219ae 22 **************************************/
suupen 0:8a84478219ae 23
suupen 0:8a84478219ae 24 #include "mbed.h"
suupen 0:8a84478219ae 25 #include "TextLCD.h"
suupen 0:8a84478219ae 26 #include "EthernetNetIf.h"
suupen 0:8a84478219ae 27 #include "NTPClient.h"
suupen 0:8a84478219ae 28 #include "HTTPClient.h"
suupen 0:8a84478219ae 29
suupen 0:8a84478219ae 30 #define TMP_TEXT_BUF_SIZE (256) // mojiretu yo buffer size
suupen 0:8a84478219ae 31
suupen 0:8a84478219ae 32 enum hyojisaki_t{
suupen 0:8a84478219ae 33 lcd_hyoji,
suupen 0:8a84478219ae 34 twitter_hyoji
suupen 0:8a84478219ae 35 };
suupen 0:8a84478219ae 36
suupen 0:8a84478219ae 37 // Ethernet
suupen 0:8a84478219ae 38 EthernetNetIf eth;
suupen 0:8a84478219ae 39 NTPClient ntp;
suupen 0:8a84478219ae 40
suupen 0:8a84478219ae 41 // File access
suupen 0:8a84478219ae 42 LocalFileSystem local("local");
suupen 0:8a84478219ae 43
suupen 0:8a84478219ae 44
suupen 0:8a84478219ae 45 // Text LCD
suupen 0:8a84478219ae 46 DigitalOut RW(p14);
suupen 0:8a84478219ae 47 TextLCD lcd(p8, p9, p13, p10, p12, p11, TextLCD::LCD20x4); // rs, e, d4-d7
suupen 0:8a84478219ae 48
suupen 0:8a84478219ae 49 DigitalOut BackLight(p22);
suupen 0:8a84478219ae 50
suupen 0:8a84478219ae 51 // Geiger
suupen 0:8a84478219ae 52 DigitalOut Geiger_GND(p21); // Geiger signal Gnd
suupen 0:8a84478219ae 53 InterruptIn Geiger_signal(p24); // Geiger signal
suupen 0:8a84478219ae 54
suupen 0:8a84478219ae 55
suupen 0:8a84478219ae 56 // sokutei chi
suupen 0:8a84478219ae 57 unsigned int C_geiger = 0;
suupen 0:8a84478219ae 58 unsigned int C_geigerMin[6] = {0, 0, 0, 0, 0, 0};
suupen 0:8a84478219ae 59 unsigned int C_geigerHour[6] = {0, 0, 0, 0, 0, 0};
suupen 0:8a84478219ae 60
suupen 0:8a84478219ae 61 // sokutei chi no kakunou pointer
suupen 0:8a84478219ae 62 unsigned char P_geigerMin = 5; // C_geigerMin no Pointer 0-5
suupen 0:8a84478219ae 63 unsigned char P_geigerHour = 5; // C_geigerHour no Pointer 0-5
suupen 0:8a84478219ae 64
suupen 0:8a84478219ae 65 // Twitter
suupen 0:8a84478219ae 66 char id[32] = "\0";
suupen 0:8a84478219ae 67 char password[32] = "\0";
suupen 0:8a84478219ae 68
suupen 0:8a84478219ae 69 /***********************************
suupen 0:8a84478219ae 70 * File access
suupen 0:8a84478219ae 71 *
suupen 0:8a84478219ae 72 * Text file kara 1gyo bun wo syutoku
suupen 0:8a84478219ae 73 ***********************************/
suupen 0:8a84478219ae 74 unsigned char GetFileLine(FILE *stm, char *str){
suupen 0:8a84478219ae 75 char count = 0;
suupen 0:8a84478219ae 76
suupen 0:8a84478219ae 77 if(fread(&str[count], 1, 1, stm) > 0){
suupen 0:8a84478219ae 78 count++;
suupen 0:8a84478219ae 79 while((fread(&str[count], 1, 1, stm) > 0)
suupen 0:8a84478219ae 80 &&(str[count] != '\n')
suupen 0:8a84478219ae 81 &&(count < TMP_TEXT_BUF_SIZE)){
suupen 0:8a84478219ae 82 count++;
suupen 0:8a84478219ae 83 }
suupen 0:8a84478219ae 84 }
suupen 0:8a84478219ae 85 str[count] = '\n';
suupen 0:8a84478219ae 86 return(count);
suupen 0:8a84478219ae 87 }
suupen 0:8a84478219ae 88
suupen 0:8a84478219ae 89 /***********************************
suupen 0:8a84478219ae 90 * tag kara mojiretu wo syutoku
suupen 0:8a84478219ae 91 ***********************************/
suupen 0:8a84478219ae 92 int GetStatus(char *path, char *tag, char *text){
suupen 0:8a84478219ae 93 char *TmpText = (char*)malloc(TMP_TEXT_BUF_SIZE);
suupen 0:8a84478219ae 94
suupen 0:8a84478219ae 95 if(TmpText == NULL){
suupen 0:8a84478219ae 96 return (-1);
suupen 0:8a84478219ae 97 }
suupen 0:8a84478219ae 98
suupen 0:8a84478219ae 99 char *TmpTag = (char*)malloc(TMP_TEXT_BUF_SIZE);
suupen 0:8a84478219ae 100
suupen 0:8a84478219ae 101 if(TmpTag == NULL){
suupen 0:8a84478219ae 102 free(TmpTag);
suupen 0:8a84478219ae 103 return(-1);
suupen 0:8a84478219ae 104 }
suupen 0:8a84478219ae 105
suupen 0:8a84478219ae 106 FILE *stm = fopen(path, "r");
suupen 0:8a84478219ae 107
suupen 0:8a84478219ae 108 if(stm != NULL){
suupen 0:8a84478219ae 109 text[0] = '\0';
suupen 0:8a84478219ae 110 sprintf(TmpTag, "%s:%%s",tag);
suupen 0:8a84478219ae 111
suupen 0:8a84478219ae 112 while(GetFileLine(stm, TmpText) > 0){
suupen 0:8a84478219ae 113 sscanf(TmpText, TmpTag, text);
suupen 0:8a84478219ae 114 }
suupen 0:8a84478219ae 115 fclose(stm);
suupen 0:8a84478219ae 116 }
suupen 0:8a84478219ae 117
suupen 0:8a84478219ae 118 free(TmpText);
suupen 0:8a84478219ae 119 free(TmpTag);
suupen 0:8a84478219ae 120
suupen 0:8a84478219ae 121 return(0);
suupen 0:8a84478219ae 122 }
suupen 0:8a84478219ae 123
suupen 0:8a84478219ae 124
suupen 0:8a84478219ae 125 /***********************************
suupen 0:8a84478219ae 126 * Twitter
suupen 0:8a84478219ae 127 ***********************************/
suupen 0:8a84478219ae 128 void TwitMsg(char *msg){
suupen 0:8a84478219ae 129 HTTPClient twitter;
suupen 0:8a84478219ae 130 HTTPMap h_msg;
suupen 0:8a84478219ae 131 h_msg["status"] = msg; //A good example of Key/Value pair use with Web APIs
suupen 0:8a84478219ae 132
suupen 0:8a84478219ae 133 twitter.basicAuth(id, password); //We use basic authentication, replace with you account's parameters
suupen 0:8a84478219ae 134
suupen 0:8a84478219ae 135 //No need to retieve data sent back by the server
suupen 0:8a84478219ae 136 HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", h_msg, NULL);
suupen 0:8a84478219ae 137 if( r == HTTP_OK )
suupen 0:8a84478219ae 138 {
suupen 0:8a84478219ae 139 printf("Tweet sent with success!\n");
suupen 0:8a84478219ae 140 }
suupen 0:8a84478219ae 141 else
suupen 0:8a84478219ae 142 {
suupen 0:8a84478219ae 143 printf("Problem during tweeting, return code %d\n", r);
suupen 0:8a84478219ae 144 }
suupen 0:8a84478219ae 145 }
suupen 0:8a84478219ae 146
suupen 0:8a84478219ae 147 /**************************************
suupen 0:8a84478219ae 148 * 10Fun Count data no hyoji sakusei
suupen 0:8a84478219ae 149 ***************************************/
suupen 0:8a84478219ae 150 void geiger_10FunHyoji(char *msg, hyojisaki_t hyoji){
suupen 0:8a84478219ae 151 char tmp[5] = "\0";
suupen 0:8a84478219ae 152 signed char i;
suupen 0:8a84478219ae 153 signed char p;
suupen 0:8a84478219ae 154
suupen 0:8a84478219ae 155 //strcat(msg, "M:");
suupen 0:8a84478219ae 156
suupen 0:8a84478219ae 157 for(i = 0; i <= 5; i++){
suupen 0:8a84478219ae 158 p = P_geigerMin - i;
suupen 0:8a84478219ae 159 if(p < 0){
suupen 0:8a84478219ae 160 p += 6;
suupen 0:8a84478219ae 161 }
suupen 0:8a84478219ae 162 switch(hyoji){
suupen 0:8a84478219ae 163 case lcd_hyoji:
suupen 0:8a84478219ae 164 sprintf(tmp, "%3d",C_geigerMin[p]);
suupen 0:8a84478219ae 165 break;
suupen 0:8a84478219ae 166 case twitter_hyoji:
suupen 0:8a84478219ae 167 default:
suupen 0:8a84478219ae 168 sprintf(tmp, "%3d ",C_geigerMin[p]);
suupen 0:8a84478219ae 169 break;
suupen 0:8a84478219ae 170 }
suupen 0:8a84478219ae 171
suupen 0:8a84478219ae 172 strcat(msg, tmp);
suupen 0:8a84478219ae 173 }
suupen 0:8a84478219ae 174 }
suupen 0:8a84478219ae 175
suupen 0:8a84478219ae 176 /**************************************
suupen 0:8a84478219ae 177 * 1Jikan Count data no hyoji sakusei
suupen 0:8a84478219ae 178 ***************************************/
suupen 0:8a84478219ae 179 void geiger_1JikanHyoji(char *msg, hyojisaki_t hyoji){
suupen 0:8a84478219ae 180 char tmp[4] = "\0";
suupen 0:8a84478219ae 181 signed char i;
suupen 0:8a84478219ae 182 signed char p;
suupen 0:8a84478219ae 183
suupen 0:8a84478219ae 184 //strcat(msg, "H:");
suupen 0:8a84478219ae 185
suupen 0:8a84478219ae 186 for(i = 0; i <= 5; i++){
suupen 0:8a84478219ae 187 p = P_geigerHour - i;
suupen 0:8a84478219ae 188 if(p < 0){
suupen 0:8a84478219ae 189 p += 6;
suupen 0:8a84478219ae 190 }
suupen 0:8a84478219ae 191 switch(hyoji){
suupen 0:8a84478219ae 192 case lcd_hyoji:
suupen 0:8a84478219ae 193 sprintf(tmp, "%3d",C_geigerHour[p]);
suupen 0:8a84478219ae 194 break;
suupen 0:8a84478219ae 195 case twitter_hyoji:
suupen 0:8a84478219ae 196 default:
suupen 0:8a84478219ae 197 sprintf(tmp, "%3d ",C_geigerHour[p]);
suupen 0:8a84478219ae 198 break;
suupen 0:8a84478219ae 199 }
suupen 0:8a84478219ae 200
suupen 0:8a84478219ae 201 strcat(msg, tmp);
suupen 0:8a84478219ae 202 }
suupen 0:8a84478219ae 203 }
suupen 0:8a84478219ae 204
suupen 0:8a84478219ae 205 /**************************************
suupen 0:8a84478219ae 206 * calendar hyoji
suupen 0:8a84478219ae 207 ***************************************/
suupen 0:8a84478219ae 208 void calendarHyoji(char *msg){
suupen 0:8a84478219ae 209 time_t ctTime;
suupen 0:8a84478219ae 210 struct tm *jst_time;
suupen 0:8a84478219ae 211 char tmp[21] = "\0";
suupen 0:8a84478219ae 212
suupen 0:8a84478219ae 213 ctTime = time(NULL);
suupen 0:8a84478219ae 214 ctTime += 32400;
suupen 0:8a84478219ae 215 jst_time = localtime(&ctTime);
suupen 0:8a84478219ae 216
suupen 0:8a84478219ae 217 sprintf(tmp,"%4d/%02d/%02d %02d:%02d:%02d",(jst_time->tm_year + 1900),(jst_time->tm_mon + 1),jst_time->tm_mday, jst_time->tm_hour, jst_time->tm_min, jst_time->tm_sec);
suupen 0:8a84478219ae 218 strcat(msg, tmp);
suupen 0:8a84478219ae 219 }
suupen 0:8a84478219ae 220
suupen 0:8a84478219ae 221
suupen 0:8a84478219ae 222 /**************************************
suupen 0:8a84478219ae 223 * LCD output
suupen 0:8a84478219ae 224 *
suupen 0:8a84478219ae 225 * kiokuchi wo LCD ni hyoji
suupen 0:8a84478219ae 226 ***************************************/
suupen 0:8a84478219ae 227 void LCD_output(){
suupen 0:8a84478219ae 228 char msg[21] = "\0";
suupen 0:8a84478219ae 229
suupen 0:8a84478219ae 230 // calendar
suupen 0:8a84478219ae 231 calendarHyoji(msg);
suupen 0:8a84478219ae 232 lcd.locate(0,0);
suupen 0:8a84478219ae 233 lcd.printf("%s",msg);
suupen 0:8a84478219ae 234
suupen 0:8a84478219ae 235 // 10 fun no genzai iti
suupen 0:8a84478219ae 236 lcd.locate(0,1);
suupen 0:8a84478219ae 237 lcd.printf("M:");
suupen 0:8a84478219ae 238 msg[0] = '\0';
suupen 0:8a84478219ae 239 geiger_10FunHyoji(msg, lcd_hyoji);
suupen 0:8a84478219ae 240 lcd.locate(2,1);
suupen 0:8a84478219ae 241 lcd.printf("%s",msg);
suupen 0:8a84478219ae 242
suupen 0:8a84478219ae 243 // 1 jikan no genzai iti
suupen 0:8a84478219ae 244 lcd.locate(0,2);
suupen 0:8a84478219ae 245 lcd.printf("H:");
suupen 0:8a84478219ae 246 msg[0] = '\0';
suupen 0:8a84478219ae 247 geiger_1JikanHyoji(msg, lcd_hyoji);
suupen 0:8a84478219ae 248 lcd.locate(2,2);
suupen 0:8a84478219ae 249 lcd.printf("%s",msg);
suupen 0:8a84478219ae 250
suupen 0:8a84478219ae 251 // genzai count
suupen 0:8a84478219ae 252 lcd.locate(0,3);
suupen 0:8a84478219ae 253 lcd.printf("genzai = ");
suupen 0:8a84478219ae 254
suupen 0:8a84478219ae 255 lcd.locate(9,3);
suupen 0:8a84478219ae 256 lcd.printf("%3d",C_geiger);
suupen 0:8a84478219ae 257
suupen 0:8a84478219ae 258
suupen 0:8a84478219ae 259 }
suupen 0:8a84478219ae 260
suupen 0:8a84478219ae 261 /**************************************
suupen 0:8a84478219ae 262 * Twitter he syuturyoku
suupen 0:8a84478219ae 263 *
suupen 0:8a84478219ae 264 * kiokuchi wo LCD ni hyoji
suupen 0:8a84478219ae 265 ***************************************/
suupen 0:8a84478219ae 266 void twitter_output(void){
suupen 0:8a84478219ae 267 char msg[256] = "\0";
suupen 0:8a84478219ae 268
suupen 0:8a84478219ae 269 // calendar
suupen 0:8a84478219ae 270 calendarHyoji(msg);
suupen 0:8a84478219ae 271 strcat(msg,"\n");
suupen 0:8a84478219ae 272
suupen 0:8a84478219ae 273
suupen 0:8a84478219ae 274 // 10 fun no genzai iti
suupen 0:8a84478219ae 275 strcat(msg,"\n");
suupen 0:8a84478219ae 276 strcat(msg,"10Min/count:");
suupen 0:8a84478219ae 277 geiger_10FunHyoji(msg, twitter_hyoji);
suupen 0:8a84478219ae 278
suupen 0:8a84478219ae 279
suupen 0:8a84478219ae 280 // 1 jikan no genzai iti
suupen 0:8a84478219ae 281 strcat(msg,"\n");
suupen 0:8a84478219ae 282 strcat(msg,"1Hour/count:");
suupen 0:8a84478219ae 283 geiger_1JikanHyoji(msg, twitter_hyoji);
suupen 0:8a84478219ae 284
suupen 0:8a84478219ae 285 TwitMsg(msg);
suupen 0:8a84478219ae 286
suupen 0:8a84478219ae 287
suupen 0:8a84478219ae 288 }
suupen 0:8a84478219ae 289 /*************************************
suupen 0:8a84478219ae 290 * geiger signal input interrupt
suupen 0:8a84478219ae 291 *
suupen 0:8a84478219ae 292 * geiger counter karano singo wo count
suupen 0:8a84478219ae 293 **************************************/
suupen 0:8a84478219ae 294 void geiger(){
suupen 0:8a84478219ae 295 C_geiger++;
suupen 0:8a84478219ae 296
suupen 0:8a84478219ae 297
suupen 0:8a84478219ae 298 }
suupen 0:8a84478219ae 299
suupen 0:8a84478219ae 300 /****************************************
suupen 0:8a84478219ae 301 * Timer
suupen 0:8a84478219ae 302 *
suupen 0:8a84478219ae 303 * 10Fun goto no sekisan to 1jikan goto no sekisan
suupen 0:8a84478219ae 304 *****************************************/
suupen 0:8a84478219ae 305 Ticker timer;
suupen 0:8a84478219ae 306
suupen 0:8a84478219ae 307 void attime(){
suupen 0:8a84478219ae 308 unsigned char i;
suupen 0:8a84478219ae 309 unsigned int wk = 0;
suupen 0:8a84478219ae 310
suupen 0:8a84478219ae 311
suupen 0:8a84478219ae 312
suupen 0:8a84478219ae 313 // 1jikan keika nara 1jikan no sekisan keisan
suupen 0:8a84478219ae 314 P_geigerMin++;
suupen 0:8a84478219ae 315 if(P_geigerMin > 5){
suupen 0:8a84478219ae 316 P_geigerMin = 0;
suupen 0:8a84478219ae 317 }
suupen 0:8a84478219ae 318
suupen 0:8a84478219ae 319 C_geigerMin[P_geigerMin] = C_geiger;
suupen 0:8a84478219ae 320 C_geiger = 0;
suupen 0:8a84478219ae 321
suupen 0:8a84478219ae 322 if(P_geigerMin == 5){
suupen 0:8a84478219ae 323 for(i = 0; i < 6; i++){
suupen 0:8a84478219ae 324 wk += C_geigerMin[i];
suupen 0:8a84478219ae 325 }
suupen 0:8a84478219ae 326 P_geigerHour++;
suupen 0:8a84478219ae 327 if(P_geigerHour > 5){
suupen 0:8a84478219ae 328 P_geigerHour = 0;
suupen 0:8a84478219ae 329 }
suupen 0:8a84478219ae 330 C_geigerHour[P_geigerHour] = wk;
suupen 0:8a84478219ae 331
suupen 0:8a84478219ae 332 }
suupen 0:8a84478219ae 333
suupen 0:8a84478219ae 334 twitter_output();
suupen 0:8a84478219ae 335 }
suupen 0:8a84478219ae 336
suupen 0:8a84478219ae 337
suupen 0:8a84478219ae 338
suupen 0:8a84478219ae 339 /************************************
suupen 0:8a84478219ae 340 * main
suupen 0:8a84478219ae 341 *
suupen 0:8a84478219ae 342 ************************************/
suupen 0:8a84478219ae 343 int main() {
suupen 0:8a84478219ae 344 /******************************
suupen 0:8a84478219ae 345 * Twitter id password syutoku
suupen 0:8a84478219ae 346 ******************************/
suupen 0:8a84478219ae 347 GetStatus("/local/env.ini","ID",id);
suupen 0:8a84478219ae 348 GetStatus("/local/env.ini","PASS",password);
suupen 0:8a84478219ae 349
suupen 0:8a84478219ae 350 printf("%s\n",id);
suupen 0:8a84478219ae 351 printf("%s\n",password);
suupen 0:8a84478219ae 352
suupen 0:8a84478219ae 353 /******************************
suupen 0:8a84478219ae 354 * geiger setup
suupen 0:8a84478219ae 355 *******************************/
suupen 0:8a84478219ae 356 // 10Fun syuuki timer interrupt
suupen 0:8a84478219ae 357 timer.attach(&attime, 600);
suupen 0:8a84478219ae 358
suupen 0:8a84478219ae 359 Geiger_signal.rise(&geiger);
suupen 0:8a84478219ae 360 Geiger_signal.mode(PullNone);
suupen 0:8a84478219ae 361
suupen 0:8a84478219ae 362 /*****************************
suupen 0:8a84478219ae 363 * LCD setup
suupen 0:8a84478219ae 364 *****************************/
suupen 0:8a84478219ae 365 RW = 0;
suupen 0:8a84478219ae 366 BackLight = 0;
suupen 0:8a84478219ae 367 // lcd.printf("Hello World!\n");
suupen 0:8a84478219ae 368
suupen 0:8a84478219ae 369 /**********************************
suupen 0:8a84478219ae 370 * Ethernet setup
suupen 0:8a84478219ae 371 **********************************/
suupen 0:8a84478219ae 372 printf("Start\n");
suupen 0:8a84478219ae 373
suupen 0:8a84478219ae 374 printf("Setting up...\n");
suupen 0:8a84478219ae 375 EthernetErr ethErr = eth.setup();
suupen 0:8a84478219ae 376 if(ethErr)
suupen 0:8a84478219ae 377 {
suupen 0:8a84478219ae 378 printf("Error %d in setup.\n", ethErr);
suupen 0:8a84478219ae 379 return -1;
suupen 0:8a84478219ae 380 }
suupen 0:8a84478219ae 381 printf("Setup OK\r\n");
suupen 0:8a84478219ae 382
suupen 0:8a84478219ae 383 /*********************************
suupen 0:8a84478219ae 384 * NTP setup
suupen 0:8a84478219ae 385 *********************************/
suupen 0:8a84478219ae 386 time_t ctTime;
suupen 0:8a84478219ae 387 ctTime = time(NULL);
suupen 0:8a84478219ae 388 printf("Current time is (UTC): %s\n", ctime(&ctTime));
suupen 0:8a84478219ae 389
suupen 0:8a84478219ae 390 Host server(IpAddr(), 123, "0.uk.pool.ntp.org");
suupen 0:8a84478219ae 391 ntp.setTime(server);
suupen 0:8a84478219ae 392
suupen 0:8a84478219ae 393 ctTime = time(NULL);
suupen 0:8a84478219ae 394 printf("\nTime is now (UTC): %s\n", ctime(&ctTime));
suupen 0:8a84478219ae 395
suupen 0:8a84478219ae 396
suupen 0:8a84478219ae 397
suupen 0:8a84478219ae 398
suupen 0:8a84478219ae 399
suupen 0:8a84478219ae 400
suupen 0:8a84478219ae 401 while(1){
suupen 0:8a84478219ae 402
suupen 0:8a84478219ae 403 LCD_output();
suupen 0:8a84478219ae 404
suupen 0:8a84478219ae 405 // wait(1.0);
suupen 0:8a84478219ae 406 }
suupen 0:8a84478219ae 407 }