Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:31fa273aa56d, committed 2018-08-03
- Comitter:
- ShioHitomi
- Date:
- Fri Aug 03 01:09:43 2018 +0000
- Commit message:
- CORE'S???????????
Changed in this revision
diff -r 000000000000 -r 31fa273aa56d BMP180.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BMP180.lib Fri Aug 03 01:09:43 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/spiridion/code/BMP180/#072073c79cfd
diff -r 000000000000 -r 31fa273aa56d main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Aug 03 01:09:43 2018 +0000
@@ -0,0 +1,196 @@
+#include "mbed.h"
+#include "math.h"
+#include "BMP180.h"
+
+#define p0 1013.25f//海面気圧
+#define TIME_TOP 14
+#define TIME_WATER 20
+#define TIME_BUZZER 25
+#define NUM 5
+#define RATE 10
+
+enum PHASE{EGG,RISE,DROP,BUZZER} Phase;
+
+//Serial pc(USBTX,USBRX);
+
+PwmOut servo_crack1(p26);
+PwmOut servo_crack2(p25);
+PwmOut servo_open1(p24);
+PwmOut servo_open2(p23);
+DigitalIn rec1(p5);
+DigitalIn rec2(p6);
+DigitalOut heat(p22);
+DigitalOut buzzer(p20);
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+BMP180 bmp (p28, p27);
+LocalFileSystem local("local");
+
+Timer timer_acc;
+Timer timer_top;
+Timer timer_all;
+Ticker tic_mission;
+Ticker tic_buzzer;
+
+void _mission();
+void _heater_acc();
+void _buzzer();
+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;
+int Cnt_top=0,Cnt_water=0;
+int altitude;
+int med_alt;
+
+int main(){
+ _heater_acc();
+ Phase=EGG;
+ tic_mission.attach(&_mission,1.0/RATE);
+ tic_buzzer.attach(&_buzzer,1.0/RATE);
+ while(1){
+ if(timer_top.read()>=TIME_BUZZER){
+ buzzer=0;
+ }
+ }
+}
+
+
+void _mission(){
+ switch(Phase){
+ case EGG:
+ 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;
+ 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++){
+ bmp.ReadData(&Temperature,&Pressure);
+ altitude = _getAlt(Pressure,Temperature);
+ alt[j]=altitude;
+ }
+ Med_alt=_median(alt,NUM);
+ //pc.printf("%f,%f\n\r",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);
+ myled1=1;
+ timer_top.start();
+ Phase=DROP;
+ }
+ break;
+ case DROP:
+ Maeno_alt=Med_alt;
+ int i;
+ for(i=0;i<NUM;i++){
+ bmp.ReadData(&Temperature,&Pressure);
+ altitude = _getAlt(Pressure,Temperature);
+ alt[i]=altitude;
+ }
+ 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("着水判定");
+ myled2=1;
+ heat=0;
+ buzzer=1;
+ fprintf(fp, "%f:ヒーターOFF\nブザーON\n\r",timer_all);
+ fclose(fp);
+ Phase=BUZZER;
+ tic_mission.detach();
+ }
+ //break;
+
+ /*case BUZZER:
+ if(timer_top>=TIME_BUZZER){
+ fp = fopen("/local/out.txt", "a");
+ buzzer=0;
+ fprintf(fp, "%f:ブザーOFF\n\r",timer_all);
+ fclose(fp);
+ }
+ break;*/
+ }
+}
+
+void _heater_acc(){
+ heat=0;
+ while(1){
+ if(rec1==1){
+ heat=1;
+ }else if(rec1==0){
+ heat=0;
+ }
+ if(rec2==1){
+ break;
+ }else if(rec2==0){
+ }
+ }
+}
+
+void _buzzer(){
+ myled3=!myled3;
+ if(rec2==1){
+ buzzer=0;
+ }else if(rec2==0){
+ buzzer=0;
+ }
+}
+
+float _getAlt(float press, float temp){
+ return (pow((p0/press), (1.0f/5.257f))-1.0f)*(temp+273.15f)/0.0065f;
+}
+
+float _median(float data[], int num){
+ float *data_cpy, ans;
+ data_cpy = new float[num];
+ memcpy(data_cpy,data,sizeof(float)*num);
+
+ for(int i=0; i<num; i++){
+ for(int j=0; j<num-i-1; j++){
+ if(data_cpy[j]>data_cpy[j+1]){
+ float buff = data_cpy[j+1];
+ data_cpy[j+1] = data_cpy[j];
+ data_cpy[j] = buff;
+ }
+ }
+ }
+
+ if(num%2!=0) ans = data_cpy[num/2];
+ else ans = (data_cpy[num/2-1]+data_cpy[num/2])/2.0;
+ delete[] data_cpy;
+ return ans;
+}
\ No newline at end of file
diff -r 000000000000 -r 31fa273aa56d mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Aug 03 01:09:43 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/a7c7b631e539 \ No newline at end of file