![](/media/cache/profiles/90a82bf94b4c5981e7e68ff425e519f3.50x50_q85.jpg)
akizuki no geiger counter kit
Dependencies: EthernetNetIf NTPClient_NetServices TextLCD mbed
Revision 0:8a84478219ae, committed 2011-03-31
- Comitter:
- suupen
- Date:
- Thu Mar 31 11:42:38 2011 +0000
- Commit message:
- Ver0.1 2001/03/31
Changed in this revision
diff -r 000000000000 -r 8a84478219ae EthernetNetIf.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetNetIf.lib Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
diff -r 000000000000 -r 8a84478219ae HTTPClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPClient.lib Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/HTTPClient/#d0be6af2d1db
diff -r 000000000000 -r 8a84478219ae NTPClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NTPClient.lib Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/NTPClient/#7c3f1199256a
diff -r 000000000000 -r 8a84478219ae TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 000000000000 -r 8a84478219ae main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,407 @@ +/************************************** +* Akizuki Geiger Kit +* +* program ver 0.1 2001/03/31 +* +* Text Lcd +* RS : p8 +* E : p9 +* WR : P14 (output=Low(GND)) +* d4 : p13 +* d5 : p10 +* d6 : p12 +* d7 : p11 +* +* Akizuki Geiger +* signal : p24 (Akizuki Geiger Kit no "EX Out" kara 1:3 no teikou bunatu de 9[V] wo 3[V] ni site nyuuryoku) +* signalGnd : p21(output=Low(GND)) +* +* sanko bunken +* maikon to densi kosaku No.5 +* CQ shupansha +**************************************/ + +#include "mbed.h" +#include "TextLCD.h" +#include "EthernetNetIf.h" +#include "NTPClient.h" +#include "HTTPClient.h" + +#define TMP_TEXT_BUF_SIZE (256) // mojiretu yo buffer size + +enum hyojisaki_t{ + lcd_hyoji, + twitter_hyoji + }; + +// Ethernet +EthernetNetIf eth; +NTPClient ntp; + +// File access +LocalFileSystem local("local"); + + +// Text LCD +DigitalOut RW(p14); +TextLCD lcd(p8, p9, p13, p10, p12, p11, TextLCD::LCD20x4); // rs, e, d4-d7 + +DigitalOut BackLight(p22); + +// Geiger +DigitalOut Geiger_GND(p21); // Geiger signal Gnd +InterruptIn Geiger_signal(p24); // Geiger signal + + +// sokutei chi +unsigned int C_geiger = 0; +unsigned int C_geigerMin[6] = {0, 0, 0, 0, 0, 0}; +unsigned int C_geigerHour[6] = {0, 0, 0, 0, 0, 0}; + +// sokutei chi no kakunou pointer +unsigned char P_geigerMin = 5; // C_geigerMin no Pointer 0-5 +unsigned char P_geigerHour = 5; // C_geigerHour no Pointer 0-5 + +// Twitter +char id[32] = "\0"; +char password[32] = "\0"; + +/*********************************** +* File access +* +* Text file kara 1gyo bun wo syutoku +***********************************/ +unsigned char GetFileLine(FILE *stm, char *str){ + char count = 0; + + if(fread(&str[count], 1, 1, stm) > 0){ + count++; + while((fread(&str[count], 1, 1, stm) > 0) + &&(str[count] != '\n') + &&(count < TMP_TEXT_BUF_SIZE)){ + count++; + } + } + str[count] = '\n'; + return(count); +} + +/*********************************** +* tag kara mojiretu wo syutoku +***********************************/ +int GetStatus(char *path, char *tag, char *text){ + char *TmpText = (char*)malloc(TMP_TEXT_BUF_SIZE); + + if(TmpText == NULL){ + return (-1); + } + + char *TmpTag = (char*)malloc(TMP_TEXT_BUF_SIZE); + + if(TmpTag == NULL){ + free(TmpTag); + return(-1); + } + + FILE *stm = fopen(path, "r"); + + if(stm != NULL){ + text[0] = '\0'; + sprintf(TmpTag, "%s:%%s",tag); + + while(GetFileLine(stm, TmpText) > 0){ + sscanf(TmpText, TmpTag, text); + } + fclose(stm); + } + + free(TmpText); + free(TmpTag); + + return(0); +} + + +/*********************************** +* Twitter +***********************************/ +void TwitMsg(char *msg){ + HTTPClient twitter; + HTTPMap h_msg; + h_msg["status"] = msg; //A good example of Key/Value pair use with Web APIs + + twitter.basicAuth(id, password); //We use basic authentication, replace with you account's parameters + + //No need to retieve data sent back by the server + HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", h_msg, NULL); + if( r == HTTP_OK ) + { + printf("Tweet sent with success!\n"); + } + else + { + printf("Problem during tweeting, return code %d\n", r); + } +} + +/************************************** +* 10Fun Count data no hyoji sakusei +***************************************/ +void geiger_10FunHyoji(char *msg, hyojisaki_t hyoji){ + char tmp[5] = "\0"; + signed char i; + signed char p; + + //strcat(msg, "M:"); + + for(i = 0; i <= 5; i++){ + p = P_geigerMin - i; + if(p < 0){ + p += 6; + } + switch(hyoji){ + case lcd_hyoji: + sprintf(tmp, "%3d",C_geigerMin[p]); + break; + case twitter_hyoji: + default: + sprintf(tmp, "%3d ",C_geigerMin[p]); + break; + } + + strcat(msg, tmp); + } +} + +/************************************** +* 1Jikan Count data no hyoji sakusei +***************************************/ +void geiger_1JikanHyoji(char *msg, hyojisaki_t hyoji){ + char tmp[4] = "\0"; + signed char i; + signed char p; + + //strcat(msg, "H:"); + + for(i = 0; i <= 5; i++){ + p = P_geigerHour - i; + if(p < 0){ + p += 6; + } + switch(hyoji){ + case lcd_hyoji: + sprintf(tmp, "%3d",C_geigerHour[p]); + break; + case twitter_hyoji: + default: + sprintf(tmp, "%3d ",C_geigerHour[p]); + break; + } + + strcat(msg, tmp); + } +} + +/************************************** +* calendar hyoji +***************************************/ +void calendarHyoji(char *msg){ + time_t ctTime; + struct tm *jst_time; + char tmp[21] = "\0"; + + ctTime = time(NULL); + ctTime += 32400; + jst_time = localtime(&ctTime); + + 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); + strcat(msg, tmp); +} + + +/************************************** +* LCD output +* +* kiokuchi wo LCD ni hyoji +***************************************/ +void LCD_output(){ + char msg[21] = "\0"; + + // calendar + calendarHyoji(msg); + lcd.locate(0,0); + lcd.printf("%s",msg); + + // 10 fun no genzai iti + lcd.locate(0,1); + lcd.printf("M:"); + msg[0] = '\0'; + geiger_10FunHyoji(msg, lcd_hyoji); + lcd.locate(2,1); + lcd.printf("%s",msg); + + // 1 jikan no genzai iti + lcd.locate(0,2); + lcd.printf("H:"); + msg[0] = '\0'; + geiger_1JikanHyoji(msg, lcd_hyoji); + lcd.locate(2,2); + lcd.printf("%s",msg); + + // genzai count + lcd.locate(0,3); + lcd.printf("genzai = "); + + lcd.locate(9,3); + lcd.printf("%3d",C_geiger); + + +} + +/************************************** +* Twitter he syuturyoku +* +* kiokuchi wo LCD ni hyoji +***************************************/ +void twitter_output(void){ + char msg[256] = "\0"; + + // calendar + calendarHyoji(msg); + strcat(msg,"\n"); + + + // 10 fun no genzai iti + strcat(msg,"\n"); + strcat(msg,"10Min/count:"); + geiger_10FunHyoji(msg, twitter_hyoji); + + + // 1 jikan no genzai iti + strcat(msg,"\n"); + strcat(msg,"1Hour/count:"); + geiger_1JikanHyoji(msg, twitter_hyoji); + + TwitMsg(msg); + + +} +/************************************* +* geiger signal input interrupt +* +* geiger counter karano singo wo count +**************************************/ +void geiger(){ + C_geiger++; + + +} + +/**************************************** +* Timer +* +* 10Fun goto no sekisan to 1jikan goto no sekisan +*****************************************/ +Ticker timer; + +void attime(){ + unsigned char i; + unsigned int wk = 0; + + + + // 1jikan keika nara 1jikan no sekisan keisan + P_geigerMin++; + if(P_geigerMin > 5){ + P_geigerMin = 0; + } + + C_geigerMin[P_geigerMin] = C_geiger; + C_geiger = 0; + + if(P_geigerMin == 5){ + for(i = 0; i < 6; i++){ + wk += C_geigerMin[i]; + } + P_geigerHour++; + if(P_geigerHour > 5){ + P_geigerHour = 0; + } + C_geigerHour[P_geigerHour] = wk; + + } + + twitter_output(); +} + + + +/************************************ +* main +* +************************************/ +int main() { + /****************************** + * Twitter id password syutoku + ******************************/ + GetStatus("/local/env.ini","ID",id); + GetStatus("/local/env.ini","PASS",password); + + printf("%s\n",id); + printf("%s\n",password); + + /****************************** + * geiger setup + *******************************/ + // 10Fun syuuki timer interrupt + timer.attach(&attime, 600); + + Geiger_signal.rise(&geiger); + Geiger_signal.mode(PullNone); + + /***************************** + * LCD setup + *****************************/ + RW = 0; + BackLight = 0; +// lcd.printf("Hello World!\n"); + + /********************************** + * Ethernet setup + **********************************/ + printf("Start\n"); + + printf("Setting up...\n"); + EthernetErr ethErr = eth.setup(); + if(ethErr) + { + printf("Error %d in setup.\n", ethErr); + return -1; + } + printf("Setup OK\r\n"); + + /********************************* + * NTP setup + *********************************/ + time_t ctTime; + ctTime = time(NULL); + printf("Current time is (UTC): %s\n", ctime(&ctTime)); + + Host server(IpAddr(), 123, "0.uk.pool.ntp.org"); + ntp.setTime(server); + + ctTime = time(NULL); + printf("\nTime is now (UTC): %s\n", ctime(&ctTime)); + + + + + + + while(1){ + + LCD_output(); + + // wait(1.0); + } +}
diff -r 000000000000 -r 8a84478219ae mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Mar 31 11:42:38 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e