kinshiko
/
mbed_kigosat
scp1000,LM65,+
Diff: main.cpp
- Revision:
- 0:8b8d6b9f95bd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 13 02:21:47 2021 +0000 @@ -0,0 +1,137 @@ +///kigo-sat +///processingによるデータのVisual化 +///Xbeeでのリアルタイム通信→XbeeWiFiを今後導入してもいいのでは +///Xbee3による最小パッケージの採用も今後やってみたい + +#include "mbed.h" +#include "SCP1000.h" + +Serial xbee(p9,p10,9600); + +float map(float x, float in_min, float in_max, float out_min, float out_max); +DigitalOut LED_1(LED1); +DigitalOut LED_2(LED2); +DigitalOut LED_3(LED3); +DigitalOut LED_4(LED4); + +FILE* fp; +LocalFileSystem local("local"); + +SCP1000 scp1000(p5,p6,p7,p8); + +DigitalIn fall(p16); + +AnalogIn ainZ(p17); +AnalogIn ainY(p18); +AnalogIn ainX(p19); +AnalogIn ain(p20); + +char str[20];//unixtime用 +int d;//unixtimeを数値に変換する用 +int e=3200;//電圧センサのマッピング用 +int f;//自由落下の判定用0=Falls,1=True +int offset_JAPAN = 32400; //JSTのためのオフセット +char c='a'; +unsigned int pattern=0; + +int SValue = 0; //測定値 +int SumV = 0; //測定値累計 +float mV = 0; //センサー電圧 +float Temp = 0; //温度測定値 + +//int t=5; +//int s=6; +int j=0; +int main() { + fall.mode( PullDown ); + while(1) { + switch( pattern ){ + case 0: + LED_1=LED_2=LED_3=LED_4=1; + xbee.scanf("%s", str); + if(c=='a'){ + d=atoi(str); + set_time(d+offset_JAPAN); + pattern=1; + } + break; + + case 1: + fp = fopen("/local/kigo.csv", "w"); + fprintf(fp,"time,temp,temp_2,press,x,y,z\r\n"); + pattern=2; + break; + + case 2: + LED_1=1; + LED_2=LED_3=LED_4=0; + if(fall==1) + f=1; + else + f=0; + time_t seconds = time(NULL); + char day[16]; + strftime(day, 16, "%Y/%m/%d %a\n", localtime(&seconds)); + char time[16]; + strftime(time, 16, "%H:%M:%S\n", localtime(&seconds)); + SumV=0; + for(int i=0;i<100;i++){ + SumV=SumV+ain.read_u16(); + } + SValue=SumV*0.01; + mV=map(SValue,0,65535,0,e); + Temp=map(mV,174,1205,-40,125); + if(j>55){ + fprintf(fp,"%d,%.1f,%.1f,%d,%1.3f,%1.3f,%1.3f,%d\r\n",seconds,Temp,scp1000.readTemperature(),scp1000.readPressure(),ainX.read(),ainY.read(),ainZ.read(),f); + j=0; + } + j++; + xbee.scanf("%c",&c); + switch(c){ + case 't': + xbee.printf("%.1f\n",Temp); + break; + case 'p': + xbee.printf("%d\n",scp1000.readPressure()/100); + break; + + case 'x': + xbee.printf("%1.3f\n",ainX.read()); + break; + case 'y': + xbee.printf("%1.3f\n",ainY.read()); + break; + case 'z': + xbee.printf("%1.3f\n",ainZ.read()); + break; + case 'f': + xbee.printf("%d\n",f); + break; + + case 'b': + pattern =3; + c='a'; + str[0]='\0'; + break; + } + break; + + case 3: + LED_1=LED_2=1; + LED_3=LED_4=0; + fclose(fp); + wait(5); + pattern =0; + break; + + default: + pattern=0; + break; + } + + } +} + +float map(float x, float in_min, float in_max, float out_min, float out_max) { +return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} \ No newline at end of file