scp1000,LM65,+

Dependencies:   mbed SCP1000

Committer:
takusei25
Date:
Sun Jun 13 02:21:47 2021 +0000
Revision:
0:8b8d6b9f95bd
2020 can-sat

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takusei25 0:8b8d6b9f95bd 1 ///kigo-sat
takusei25 0:8b8d6b9f95bd 2 ///processingによるデータのVisual化
takusei25 0:8b8d6b9f95bd 3 ///Xbeeでのリアルタイム通信→XbeeWiFiを今後導入してもいいのでは
takusei25 0:8b8d6b9f95bd 4 ///Xbee3による最小パッケージの採用も今後やってみたい
takusei25 0:8b8d6b9f95bd 5
takusei25 0:8b8d6b9f95bd 6 #include "mbed.h"
takusei25 0:8b8d6b9f95bd 7 #include "SCP1000.h"
takusei25 0:8b8d6b9f95bd 8
takusei25 0:8b8d6b9f95bd 9 Serial xbee(p9,p10,9600);
takusei25 0:8b8d6b9f95bd 10
takusei25 0:8b8d6b9f95bd 11 float map(float x, float in_min, float in_max, float out_min, float out_max);
takusei25 0:8b8d6b9f95bd 12 DigitalOut LED_1(LED1);
takusei25 0:8b8d6b9f95bd 13 DigitalOut LED_2(LED2);
takusei25 0:8b8d6b9f95bd 14 DigitalOut LED_3(LED3);
takusei25 0:8b8d6b9f95bd 15 DigitalOut LED_4(LED4);
takusei25 0:8b8d6b9f95bd 16
takusei25 0:8b8d6b9f95bd 17 FILE* fp;
takusei25 0:8b8d6b9f95bd 18 LocalFileSystem local("local");
takusei25 0:8b8d6b9f95bd 19
takusei25 0:8b8d6b9f95bd 20 SCP1000 scp1000(p5,p6,p7,p8);
takusei25 0:8b8d6b9f95bd 21
takusei25 0:8b8d6b9f95bd 22 DigitalIn fall(p16);
takusei25 0:8b8d6b9f95bd 23
takusei25 0:8b8d6b9f95bd 24 AnalogIn ainZ(p17);
takusei25 0:8b8d6b9f95bd 25 AnalogIn ainY(p18);
takusei25 0:8b8d6b9f95bd 26 AnalogIn ainX(p19);
takusei25 0:8b8d6b9f95bd 27 AnalogIn ain(p20);
takusei25 0:8b8d6b9f95bd 28
takusei25 0:8b8d6b9f95bd 29 char str[20];//unixtime用
takusei25 0:8b8d6b9f95bd 30 int d;//unixtimeを数値に変換する用
takusei25 0:8b8d6b9f95bd 31 int e=3200;//電圧センサのマッピング用
takusei25 0:8b8d6b9f95bd 32 int f;//自由落下の判定用0=Falls,1=True
takusei25 0:8b8d6b9f95bd 33 int offset_JAPAN = 32400; //JSTのためのオフセット
takusei25 0:8b8d6b9f95bd 34 char c='a';
takusei25 0:8b8d6b9f95bd 35 unsigned int pattern=0;
takusei25 0:8b8d6b9f95bd 36
takusei25 0:8b8d6b9f95bd 37 int SValue = 0; //測定値
takusei25 0:8b8d6b9f95bd 38 int SumV = 0; //測定値累計
takusei25 0:8b8d6b9f95bd 39 float mV = 0; //センサー電圧
takusei25 0:8b8d6b9f95bd 40 float Temp = 0; //温度測定値
takusei25 0:8b8d6b9f95bd 41
takusei25 0:8b8d6b9f95bd 42 //int t=5;
takusei25 0:8b8d6b9f95bd 43 //int s=6;
takusei25 0:8b8d6b9f95bd 44 int j=0;
takusei25 0:8b8d6b9f95bd 45 int main() {
takusei25 0:8b8d6b9f95bd 46 fall.mode( PullDown );
takusei25 0:8b8d6b9f95bd 47 while(1) {
takusei25 0:8b8d6b9f95bd 48 switch( pattern ){
takusei25 0:8b8d6b9f95bd 49 case 0:
takusei25 0:8b8d6b9f95bd 50 LED_1=LED_2=LED_3=LED_4=1;
takusei25 0:8b8d6b9f95bd 51 xbee.scanf("%s", str);
takusei25 0:8b8d6b9f95bd 52 if(c=='a'){
takusei25 0:8b8d6b9f95bd 53 d=atoi(str);
takusei25 0:8b8d6b9f95bd 54 set_time(d+offset_JAPAN);
takusei25 0:8b8d6b9f95bd 55 pattern=1;
takusei25 0:8b8d6b9f95bd 56 }
takusei25 0:8b8d6b9f95bd 57 break;
takusei25 0:8b8d6b9f95bd 58
takusei25 0:8b8d6b9f95bd 59 case 1:
takusei25 0:8b8d6b9f95bd 60 fp = fopen("/local/kigo.csv", "w");
takusei25 0:8b8d6b9f95bd 61 fprintf(fp,"time,temp,temp_2,press,x,y,z\r\n");
takusei25 0:8b8d6b9f95bd 62 pattern=2;
takusei25 0:8b8d6b9f95bd 63 break;
takusei25 0:8b8d6b9f95bd 64
takusei25 0:8b8d6b9f95bd 65 case 2:
takusei25 0:8b8d6b9f95bd 66 LED_1=1;
takusei25 0:8b8d6b9f95bd 67 LED_2=LED_3=LED_4=0;
takusei25 0:8b8d6b9f95bd 68 if(fall==1)
takusei25 0:8b8d6b9f95bd 69 f=1;
takusei25 0:8b8d6b9f95bd 70 else
takusei25 0:8b8d6b9f95bd 71 f=0;
takusei25 0:8b8d6b9f95bd 72 time_t seconds = time(NULL);
takusei25 0:8b8d6b9f95bd 73 char day[16];
takusei25 0:8b8d6b9f95bd 74 strftime(day, 16, "%Y/%m/%d %a\n", localtime(&seconds));
takusei25 0:8b8d6b9f95bd 75 char time[16];
takusei25 0:8b8d6b9f95bd 76 strftime(time, 16, "%H:%M:%S\n", localtime(&seconds));
takusei25 0:8b8d6b9f95bd 77 SumV=0;
takusei25 0:8b8d6b9f95bd 78 for(int i=0;i<100;i++){
takusei25 0:8b8d6b9f95bd 79 SumV=SumV+ain.read_u16();
takusei25 0:8b8d6b9f95bd 80 }
takusei25 0:8b8d6b9f95bd 81 SValue=SumV*0.01;
takusei25 0:8b8d6b9f95bd 82 mV=map(SValue,0,65535,0,e);
takusei25 0:8b8d6b9f95bd 83 Temp=map(mV,174,1205,-40,125);
takusei25 0:8b8d6b9f95bd 84 if(j>55){
takusei25 0:8b8d6b9f95bd 85 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);
takusei25 0:8b8d6b9f95bd 86 j=0;
takusei25 0:8b8d6b9f95bd 87 }
takusei25 0:8b8d6b9f95bd 88 j++;
takusei25 0:8b8d6b9f95bd 89 xbee.scanf("%c",&c);
takusei25 0:8b8d6b9f95bd 90 switch(c){
takusei25 0:8b8d6b9f95bd 91 case 't':
takusei25 0:8b8d6b9f95bd 92 xbee.printf("%.1f\n",Temp);
takusei25 0:8b8d6b9f95bd 93 break;
takusei25 0:8b8d6b9f95bd 94 case 'p':
takusei25 0:8b8d6b9f95bd 95 xbee.printf("%d\n",scp1000.readPressure()/100);
takusei25 0:8b8d6b9f95bd 96 break;
takusei25 0:8b8d6b9f95bd 97
takusei25 0:8b8d6b9f95bd 98 case 'x':
takusei25 0:8b8d6b9f95bd 99 xbee.printf("%1.3f\n",ainX.read());
takusei25 0:8b8d6b9f95bd 100 break;
takusei25 0:8b8d6b9f95bd 101 case 'y':
takusei25 0:8b8d6b9f95bd 102 xbee.printf("%1.3f\n",ainY.read());
takusei25 0:8b8d6b9f95bd 103 break;
takusei25 0:8b8d6b9f95bd 104 case 'z':
takusei25 0:8b8d6b9f95bd 105 xbee.printf("%1.3f\n",ainZ.read());
takusei25 0:8b8d6b9f95bd 106 break;
takusei25 0:8b8d6b9f95bd 107 case 'f':
takusei25 0:8b8d6b9f95bd 108 xbee.printf("%d\n",f);
takusei25 0:8b8d6b9f95bd 109 break;
takusei25 0:8b8d6b9f95bd 110
takusei25 0:8b8d6b9f95bd 111 case 'b':
takusei25 0:8b8d6b9f95bd 112 pattern =3;
takusei25 0:8b8d6b9f95bd 113 c='a';
takusei25 0:8b8d6b9f95bd 114 str[0]='\0';
takusei25 0:8b8d6b9f95bd 115 break;
takusei25 0:8b8d6b9f95bd 116 }
takusei25 0:8b8d6b9f95bd 117 break;
takusei25 0:8b8d6b9f95bd 118
takusei25 0:8b8d6b9f95bd 119 case 3:
takusei25 0:8b8d6b9f95bd 120 LED_1=LED_2=1;
takusei25 0:8b8d6b9f95bd 121 LED_3=LED_4=0;
takusei25 0:8b8d6b9f95bd 122 fclose(fp);
takusei25 0:8b8d6b9f95bd 123 wait(5);
takusei25 0:8b8d6b9f95bd 124 pattern =0;
takusei25 0:8b8d6b9f95bd 125 break;
takusei25 0:8b8d6b9f95bd 126
takusei25 0:8b8d6b9f95bd 127 default:
takusei25 0:8b8d6b9f95bd 128 pattern=0;
takusei25 0:8b8d6b9f95bd 129 break;
takusei25 0:8b8d6b9f95bd 130 }
takusei25 0:8b8d6b9f95bd 131
takusei25 0:8b8d6b9f95bd 132 }
takusei25 0:8b8d6b9f95bd 133 }
takusei25 0:8b8d6b9f95bd 134
takusei25 0:8b8d6b9f95bd 135 float map(float x, float in_min, float in_max, float out_min, float out_max) {
takusei25 0:8b8d6b9f95bd 136 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
takusei25 0:8b8d6b9f95bd 137 }