2018.08能代CORE'S キッチン ミッション用プログラム

Dependencies:   BMP180 mbed

Fork of mission by hitomi shio

Revision:
3:0562feabce7b
Parent:
2:b145797d04fb
Child:
4:82660534b32d
--- a/main.cpp	Sun Aug 05 12:37:59 2018 +0000
+++ b/main.cpp	Wed Aug 08 08:12:53 2018 +0000
@@ -1,17 +1,16 @@
 #include "mbed.h"
-#include "math.h"
+#include "math.h" 
 #include "BMP180.h"
 
 #define p0 1013.25f//海面気圧
-#define TIME_TOP      3
-#define TIME_WATER    5
-#define TIME_BUZZER   16
+#define TIME_TOP      13
+#define TIME_WATER    10
+#define TIME_BUZZER   15
 #define NUM           5
 #define RATE          10
 
-enum PHASE{EGG,RISE,DROP,BUZZER} Phase;
-
-//Serial         pc(USBTX,USBRX);
+enum PHASE{EGG,SERVO,RISE,DROP,BUZZER} Phase;
+enum MOVE{HEAT,CRACK,OPEN,TOP,HEAT_BUZZER} Move;
 
 PwmOut         servo_crack1(p26);   
 PwmOut         servo_crack2(p25);
@@ -19,7 +18,7 @@
 PwmOut         servo_open2(p23);
 DigitalIn      rec1(p5);
 DigitalIn      rec2(p6);
-DigitalOut     heat(p22);
+DigitalOut     heat(p22);  
 DigitalOut     buzzer(p21);
 DigitalOut     myled1(LED1);
 DigitalOut     myled2(LED2);
@@ -29,46 +28,60 @@
 LocalFileSystem local("local"); 
 
 Timer          timer_acc;
-Timer          timer_top;
+Timer          timer_top; 
 Timer          timer_all;
 Ticker         tic_mission;
+//Timeout        tim_servo;
 Ticker         tic_buzzer;
-
+ 
+bool           Save;
 void           _mission(); 
-void           _heater_acc();
+void           _heater_acc(); 
 void           _buzzer();
+void           _data();
+void           _servo();
 float          _getAlt(float press, float temp);
 float          _median(float data[], int num);
 float          Med_alt,Maeno_alt;
 float          Pressure,Temperature,Altitude;
 float          alt[NUM],max=-1000;
+float          t;
 int            Cnt_top=0,Cnt_water=0;
-int            altitude;
-int            med_alt; 
+int            u=0;
+
 FILE *fp; 
 
 int main(){
-    //FILE *fp; 
+    bmp.Initialize(BMP180_OSS_ULTRA_LOW_POWER);
+    timer_all.start();
+    servo_crack1.period_ms(20);
+    servo_crack2.period_ms(20);
+    servo_open1.period_ms(20);
+    servo_open2.period_ms(20);
     fp = fopen("/local/out.txt", "a"); 
     fprintf(fp,"%f:Hello,World\n\r");
+    fclose(fp);
     buzzer=0; 
     _heater_acc(); 
-    Phase=RISE;  
-    tic_mission.attach(&_mission,1.0/10);
+    Phase=EGG;  
+    tic_mission.attach(&_mission,1.0/20);
     //tic_buzzer.attach(&_buzzer,1.0/RATE);
-    /*while(1){
-        _buzzer();
+    while(1){
+        //_buzzer();
         /*if(Phase==BUZZER){ 
             tic_mission.detach();*/
-        if(timer_top.read()>=TIME_BUZZER){
+        if(Save){
+            _data();
+        }
+        /*if(timer_top.read()>=TIME_BUZZER){
             buzzer=0;
-        }
-    
+        }*/
+    }
 }
     
     
 void _mission(){
-    if(Phase==BUZZER){
+    if(Phase==BUZZER){ 
         _buzzer();
     }
     myled4=!myled4;
@@ -77,74 +90,63 @@
                         buzzer=0;
                         myled1=0;
                         myled2=0;
-                        timer_all.start();
-                        FILE *fp; 
-                        //fp = fopen("/local/out.txt", "a"); 
-                        fprintf(fp,"%f:ヒーターON\n\r",timer_all);
-                        timer_acc.start();
                         servo_crack1.pulsewidth(0.005);
                         servo_crack2.pulsewidth(0.024);
-                        fprintf(fp, "%f:サーボ_割る\n\r",timer_all);
-                        wait(1.0);
-                        servo_open1.pulsewidth(0.005);
-                        servo_open2.pulsewidth(0.024);
-                        fprintf(fp, "%f:サーボ_開く\n\r",timer_all);
-                        //fclose(fp);
-                        Phase=RISE;
+                        t=timer_all.read();
+                        Move=CRACK;
+                        Save=true;
+                        Phase=SERVO;
+                        
+        case SERVO:     if(timer_all.read()-t>=1.0){
+                            servo_open1.pulsewidth(0.005);
+                            servo_open2.pulsewidth(0.024);
+                            Move=OPEN;
+                            Save=true;
+                            //tim_servo.attach(&_servo, 1.0); 
+                            Phase=RISE;
+                        }
                         break;
         case RISE:      
-                        bmp.Initialize(BMP180_OSS_ULTRA_LOW_POWER);
-                        //pc.printf("Temperature ,Pressure, Altitude\r\n");
-                        int j;
-                        for(j=0;j<NUM;j++){
+                        for(int j=0;j<NUM;j++){
                             bmp.ReadData(&Temperature,&Pressure);
-                            altitude = _getAlt(Pressure,Temperature);
-                            alt[j]=altitude;
+                            alt[j]=_getAlt(Pressure,Temperature);
                         }
                         Med_alt=_median(alt,NUM);
-                        //pc.printf("%f,%f\n\r",Med_alt,max);
-                        if(med_alt>max){
+                        if(Med_alt>max){
                             max=Med_alt;
                             Cnt_top=0;
                         }else if(max-Med_alt>=2.0){
                             Cnt_top++;
                         }
-                        //pc.printf("%d\n\r",Cnt_top);
                         if(Cnt_top>=3||timer_acc.read()>=TIME_TOP){
-                            fp = fopen("/local/out.txt", "a");
-                            //pc.printf("頂点判定");
-                            fprintf(fp, "%f:頂点判定\n\r",timer_all);
-                            fclose(fp);
                             myled1=1;
                             timer_top.start();
-                            //tic_buzzer.attach(&_buzzer,1.0/100);
                             Phase=DROP;
+                            Move=TOP;
+                            Save=true;
+                            _data();
                         }
                         break;
         case DROP:
                         Maeno_alt=Med_alt;
-                        int i;
-                        for(i=0;i<NUM;i++){
+                        for(int i=0;i<NUM;i++){
                             bmp.ReadData(&Temperature,&Pressure);
-                            altitude = _getAlt(Pressure,Temperature);
-                            alt[i]=altitude;
+                            alt[i]=_getAlt(Pressure,Temperature);
                         }
                         Med_alt=_median(alt,NUM);
-                        //pc.printf("%f,%f\n\r",Med_alt,max);
                         if(Maeno_alt-Med_alt>=-1.0&&Maeno_alt-Med_alt<=1.0){
                             Cnt_water++;
                         }else{
                             Cnt_water=0;
                         }
-                        //pc.printf("%d\n\r",Cnt_water);
                         if(/*Cnt_water>=3||*/timer_top.read()>=TIME_WATER){
-                            fp = fopen("/local/out.txt", "a"); 
-                            //pc.printf("着水判定");
+                            //fp = fopen("/local/out.txt", "a"); 
                             myled2=1;
+                            buzzer=1;
                             heat=0;
-                            buzzer=1;
                             //tic_buzzer.attach(&_buzzer,1/100);
-                            fprintf(fp, "%f:ヒーターOFF\nブザーON\n\r",timer_all);
+                            Move=HEAT_BUZZER;
+                            Save=true;
                             //fclose(fp);
                             Phase=BUZZER;
                             //tic_buzzer.attach(&_buzzer,1.0/40);
@@ -157,22 +159,35 @@
                         if(timer_top.read()>=TIME_BUZZER){
                             fp = fopen("/local/out.txt", "a"); 
                             buzzer=0;
-                            fprintf(fp, "%f:ブザーOFF\n\r",timer_all);
+                            fprintf(fp, "%f:ブザーOFF\n\r",timer_all.read());
                             fclose(fp);
                         }
                         break;*/
-        } 
+        }  
 }
 
 void _heater_acc(){
         heat=0;
         while(1){
-            if(rec1==1){
+            if(u!=rec1){
+                heat=!heat;
+                u=rec1;
+                Move=HEAT;
+                Save=true;
+                _data();
+            }
+            /*if(rec1==1){
                 heat=1;
+                Move=HEAT_ON;
+                Save=true;
+                _data();
             }else if(rec1==0){
                 heat=0;
-            }
+                Move=HEAT_OFF;
+                Save=true; 
+            }*/
             if(rec2==1){
+                timer_acc.start();
                 break;
             }
         }
@@ -210,4 +225,18 @@
     else         ans = (data_cpy[num/2-1]+data_cpy[num/2])/2.0;
     delete[] data_cpy;
     return ans;
-}  
\ No newline at end of file
+}  
+
+void _data(){
+        Save=false;
+        fp = fopen("/local/out.txt", "a"); 
+        fprintf(fp,"%f:%d\n\r",timer_all.read(),Move);
+        fclose(fp);
+}
+
+/*void _servo(){
+        servo_open1.pulsewidth(0.005);
+        servo_open2.pulsewidth(0.024);
+        Move=OPEN;
+        Save=true;
+}*/
\ No newline at end of file