kinshiko
/
mbed_kigosat
scp1000,LM65,+
main.cpp@0:8b8d6b9f95bd, 2021-06-13 (annotated)
- Committer:
- takusei25
- Date:
- Sun Jun 13 02:21:47 2021 +0000
- Revision:
- 0:8b8d6b9f95bd
2020 can-sat
Who changed what in which revision?
User | Revision | Line number | New 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 | } |