akizuki no geiger counter kit

Dependencies:   EthernetNetIf NTPClient_NetServices TextLCD mbed

Files at this revision

API Documentation at this revision

Comitter:
suupen
Date:
Thu Mar 31 11:42:38 2011 +0000
Commit message:
Ver0.1 2001/03/31

Changed in this revision

EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
HTTPClient.lib Show annotated file Show diff for this revision Revisions of this file
NTPClient.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
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