CORE
/
mission
2018.08能代CORE'S キッチン ミッション用プログラム
Fork of mission by
Diff: main.cpp
- Revision:
- 3:0562feabce7b
- Parent:
- 2:b145797d04fb
- Child:
- 4:82660534b32d
diff -r b145797d04fb -r 0562feabce7b main.cpp --- 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