This software will measure the ON / OFF the number of USER-SW.

Dependencies:   mbed-src

Committer:
abanum
Date:
Tue Jan 13 10:19:37 2015 +0000
Revision:
0:d086f26efefc
GR-PEACH????????????; This is the rapid?fire measurement software for GR-PEACH.; ???????????????????; Display must be connected to the terminal software.; USER-SW?ON/OFF???????...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abanum 0:d086f26efefc 1 #include "mbed.h"
abanum 0:d086f26efefc 2
abanum 0:d086f26efefc 3 DigitalOut myled(LED_USER);
abanum 0:d086f26efefc 4 DigitalIn key1(USER_BUTTON0);
abanum 0:d086f26efefc 5 Serial pc(USBTX, USBRX); // tx, rx
abanum 0:d086f26efefc 6
abanum 0:d086f26efefc 7 Ticker flipper;
abanum 0:d086f26efefc 8 #define MODE 2 //MODE
abanum 0:d086f26efefc 9 #define IN 3 //IN
abanum 0:d086f26efefc 10 #define EV_IN 1 //IN
abanum 0:d086f26efefc 11 #define EV_MODE 2 //MODE
abanum 0:d086f26efefc 12 volatile unsigned char key_dat = 0;
abanum 0:d086f26efefc 13 volatile unsigned char key_old = 0;
abanum 0:d086f26efefc 14 volatile unsigned char key_buf[2] = {0,0};
abanum 0:d086f26efefc 15 volatile unsigned char key_ev[2] = {0,0};
abanum 0:d086f26efefc 16 /*タイマーデータ*/
abanum 0:d086f26efefc 17 #define MODE_1S 1000
abanum 0:d086f26efefc 18 #define MODE_10S 10000
abanum 0:d086f26efefc 19 #define REP_1000MS 1000
abanum 0:d086f26efefc 20 #define REP_500MS 500
abanum 0:d086f26efefc 21 #define EV_10S 4 //10Sイベント
abanum 0:d086f26efefc 22 //volatile unsigned char timer_dat = 0;
abanum 0:d086f26efefc 23 volatile unsigned char timer_ev[1] = {0};
abanum 0:d086f26efefc 24 //volatile unsigned int mode_1s_t = 0;
abanum 0:d086f26efefc 25 volatile unsigned int mode_10s_t = 0;
abanum 0:d086f26efefc 26 int c_in = 0,mode = 0;
abanum 0:d086f26efefc 27
abanum 0:d086f26efefc 28 void flip() {
abanum 0:d086f26efefc 29 unsigned char x;
abanum 0:d086f26efefc 30 key_buf[0] <<= 1;
abanum 0:d086f26efefc 31 if (!key1) {
abanum 0:d086f26efefc 32 key_buf[0] ++;
abanum 0:d086f26efefc 33 }
abanum 0:d086f26efefc 34 key_buf[0] &= 0x0f;
abanum 0:d086f26efefc 35 key_dat = 0;
abanum 0:d086f26efefc 36 for(x=0;x<1;x++){
abanum 0:d086f26efefc 37 if (key_buf[x] == 0x0f){
abanum 0:d086f26efefc 38 key_dat =key_dat | (1<<x);
abanum 0:d086f26efefc 39 }
abanum 0:d086f26efefc 40 }
abanum 0:d086f26efefc 41 key_ev[0] = key_ev[0] | (~key_old & key_dat); // ON edge EVENT set
abanum 0:d086f26efefc 42 key_ev[1] = key_ev[1] | (~key_dat & key_old); // OFF edge EVENT set
abanum 0:d086f26efefc 43 key_old = key_dat;
abanum 0:d086f26efefc 44
abanum 0:d086f26efefc 45 if(mode_10s_t){
abanum 0:d086f26efefc 46 mode_10s_t--;
abanum 0:d086f26efefc 47 if(mode_10s_t == 0){
abanum 0:d086f26efefc 48 timer_ev[0] |= EV_10S;
abanum 0:d086f26efefc 49 }
abanum 0:d086f26efefc 50 }
abanum 0:d086f26efefc 51 }
abanum 0:d086f26efefc 52
abanum 0:d086f26efefc 53 int main()
abanum 0:d086f26efefc 54 {
abanum 0:d086f26efefc 55 flipper.attach(&flip, 0.001); // the address of the function to be attached (flip) and the interval (2 seconds)
abanum 0:d086f26efefc 56 pc.printf("PUSH KEY \r\nSTART ");
abanum 0:d086f26efefc 57
abanum 0:d086f26efefc 58 while(1)
abanum 0:d086f26efefc 59 {
abanum 0:d086f26efefc 60 if(mode == 0)
abanum 0:d086f26efefc 61 {
abanum 0:d086f26efefc 62 if(key_ev[0] & EV_IN)
abanum 0:d086f26efefc 63 {
abanum 0:d086f26efefc 64 pc.printf("\r\n");
abanum 0:d086f26efefc 65 wait(1.0);
abanum 0:d086f26efefc 66 pc.printf("3\r");
abanum 0:d086f26efefc 67 wait(1.0);
abanum 0:d086f26efefc 68 pc.printf("3 2\r");
abanum 0:d086f26efefc 69 wait(1.0);
abanum 0:d086f26efefc 70 pc.printf("3 2 1\r");
abanum 0:d086f26efefc 71 wait(1.0);
abanum 0:d086f26efefc 72 pc.printf(" GO! \r");
abanum 0:d086f26efefc 73 wait(1.0);
abanum 0:d086f26efefc 74 key_ev[0] &= ~EV_IN;
abanum 0:d086f26efefc 75 mode = 1;
abanum 0:d086f26efefc 76 mode_10s_t = MODE_10S;
abanum 0:d086f26efefc 77 }
abanum 0:d086f26efefc 78 }
abanum 0:d086f26efefc 79 if(mode == 1)
abanum 0:d086f26efefc 80 {
abanum 0:d086f26efefc 81 if(key_ev[0] & EV_IN)
abanum 0:d086f26efefc 82 {
abanum 0:d086f26efefc 83 c_in++;
abanum 0:d086f26efefc 84 myled = 0;
abanum 0:d086f26efefc 85 // pc.printf("%2.1f SEC %2d\r",mode_10s_t/100.0,c_in);
abanum 0:d086f26efefc 86 key_ev[0] &= ~EV_IN;
abanum 0:d086f26efefc 87 }
abanum 0:d086f26efefc 88 if((mode_10s_t % 100)==0)pc.printf("%3.1f SEC %2d \r",mode_10s_t/1000.0,c_in);
abanum 0:d086f26efefc 89
abanum 0:d086f26efefc 90 if(key_ev[1] & EV_IN)
abanum 0:d086f26efefc 91 {
abanum 0:d086f26efefc 92 myled = 1;
abanum 0:d086f26efefc 93 key_ev[1] &= ~EV_IN;
abanum 0:d086f26efefc 94 }
abanum 0:d086f26efefc 95 }
abanum 0:d086f26efefc 96
abanum 0:d086f26efefc 97 if(mode == 2)
abanum 0:d086f26efefc 98 {
abanum 0:d086f26efefc 99 myled = 0;
abanum 0:d086f26efefc 100 pc.printf("\r\n\r\n\r\nRESULT=%2.1f\r",c_in/10.0);
abanum 0:d086f26efefc 101 wait(100);
abanum 0:d086f26efefc 102 }
abanum 0:d086f26efefc 103 if(timer_ev[0] & EV_10S)
abanum 0:d086f26efefc 104 {
abanum 0:d086f26efefc 105 timer_ev[0] &= ~EV_10S;
abanum 0:d086f26efefc 106 mode = 2;
abanum 0:d086f26efefc 107 }
abanum 0:d086f26efefc 108 }
abanum 0:d086f26efefc 109 }