あああ

Dependencies:   HEPTA_SENSOR mbed HEPTA_EPS HEPTA_COM HEPTA_CDH

Committer:
Yanagihara
Date:
Tue Aug 30 02:38:16 2022 +0000
Revision:
34:57c79f4b3997
Parent:
32:c22cbcfb4635

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:bdbd3d6fc5d5 1 #include "mbed.h"
HeptaSatTraining2019 25:ccc5ff675e0c 2 #include "HEPTA_CDH.h"
HeptaSatTraining2019 25:ccc5ff675e0c 3 #include "HEPTA_EPS.h"
MEXT1 27:b4689aa48bf5 4 #include "HEPTA_SENSOR.h"
MEXT1 27:b4689aa48bf5 5 #include "HEPTA_COM.h"
Yanagihara 34:57c79f4b3997 6
Yanagihara 34:57c79f4b3997 7 //SWUART
Yanagihara 34:57c79f4b3997 8 #define SW_BAUD_RATE 9600.0//19200.0
Yanagihara 34:57c79f4b3997 9 #define IN_BUF_SIZE 256
Yanagihara 34:57c79f4b3997 10 #define TRUE 1
Yanagihara 34:57c79f4b3997 11 #define FALSE 0
Yanagihara 34:57c79f4b3997 12
HeptaSatTraining2019 26:220e5f95168a 13 HEPTA_CDH cdh(p5, p6, p7, p8, "sd");
HeptaSatTraining2019 26:220e5f95168a 14 HEPTA_EPS eps(p16,p26);
MEXT1 27:b4689aa48bf5 15 HEPTA_SENSOR sensor(p17,
csmk18112 32:c22cbcfb4635 16 p28,p27,0x19,0x69,0x13,
csmk18112 32:c22cbcfb4635 17 p13, p14,p25,p24);
heptasat2021 29:eb84063fe5c9 18 HEPTA_COM com(p9,p10);
heptasat2021 29:eb84063fe5c9 19 DigitalOut condition(LED1);
Yanagihara 34:57c79f4b3997 20 DigitalOut LandLED1(p29);
Yanagihara 34:57c79f4b3997 21 DigitalOut LandLED2(p30);
Yanagihara 34:57c79f4b3997 22 DigitalOut LandLED3(p11);
Yanagihara 34:57c79f4b3997 23 DigitalOut LandLED4(p12);
Yanagihara 34:57c79f4b3997 24
heptasat2021 29:eb84063fe5c9 25 Serial sat(USBTX,USBRX,9600);
heptasat2021 29:eb84063fe5c9 26 Timer sattime;
MEXT1 27:b4689aa48bf5 27 int rcmd = 0,cmdflag = 0; //command variable
heptasat2021 29:eb84063fe5c9 28
Yanagihara 34:57c79f4b3997 29 //SWUART
Yanagihara 34:57c79f4b3997 30 //Digital pins for SW-UART
Yanagihara 34:57c79f4b3997 31 DigitalOut swTX(p23);
Yanagihara 34:57c79f4b3997 32 DigitalIn swRX(p22);
Yanagihara 34:57c79f4b3997 33
Yanagihara 34:57c79f4b3997 34 DigitalOut debug2(LED2);
Yanagihara 34:57c79f4b3997 35 DigitalOut debug3(LED3);
Yanagihara 34:57c79f4b3997 36 DigitalOut debug4(LED4);
Yanagihara 34:57c79f4b3997 37
Yanagihara 34:57c79f4b3997 38 //Ticker for baudrate
Yanagihara 34:57c79f4b3997 39 Ticker br_tick;
Yanagihara 34:57c79f4b3997 40
Yanagihara 34:57c79f4b3997 41 static unsigned char inbuf[IN_BUF_SIZE];
Yanagihara 34:57c79f4b3997 42 static unsigned char qin = 0;
Yanagihara 34:57c79f4b3997 43 static unsigned char qout = 0;
Yanagihara 34:57c79f4b3997 44
Yanagihara 34:57c79f4b3997 45 static char flag_rx_waiting_for_stop_bit;
Yanagihara 34:57c79f4b3997 46 static char flag_rx_off;
Yanagihara 34:57c79f4b3997 47 static char rx_mask;
Yanagihara 34:57c79f4b3997 48 static char flag_rx_ready;
Yanagihara 34:57c79f4b3997 49 static char flag_tx_ready;
Yanagihara 34:57c79f4b3997 50 static char timer_rx_ctr;
Yanagihara 34:57c79f4b3997 51 static char timer_tx_ctr;
Yanagihara 34:57c79f4b3997 52 static char bits_left_in_rx;
Yanagihara 34:57c79f4b3997 53 static char bits_left_in_tx;
Yanagihara 34:57c79f4b3997 54 static char rx_num_of_bits;
Yanagihara 34:57c79f4b3997 55 static char tx_num_of_bits;
Yanagihara 34:57c79f4b3997 56 static int internal_rx_buffer;
Yanagihara 34:57c79f4b3997 57 static int internal_tx_buffer;
Yanagihara 34:57c79f4b3997 58 static int user_tx_buffer;
Yanagihara 34:57c79f4b3997 59
Yanagihara 34:57c79f4b3997 60 float b_rate = 0.0;
Yanagihara 34:57c79f4b3997 61 int co2ppm = 0;
Yanagihara 34:57c79f4b3997 62 char co2_str[9] = {0};
Yanagihara 34:57c79f4b3997 63 char mybit = 0;
Yanagihara 34:57c79f4b3997 64
Yanagihara 34:57c79f4b3997 65 //Interface routines by AB
Yanagihara 34:57c79f4b3997 66 // Returns 0 or 1 dependent on whether the receive pin is high or low.
Yanagihara 34:57c79f4b3997 67 int get_rx_pin_status(void){
Yanagihara 34:57c79f4b3997 68 if(swRX == 1)
Yanagihara 34:57c79f4b3997 69 return 1;
Yanagihara 34:57c79f4b3997 70 else
Yanagihara 34:57c79f4b3997 71 return 0;
Yanagihara 34:57c79f4b3997 72 }
Yanagihara 34:57c79f4b3997 73
Yanagihara 34:57c79f4b3997 74 // Background functions to execute while waiting for input.
Yanagihara 34:57c79f4b3997 75 void idle(void){
Yanagihara 34:57c79f4b3997 76 ;
Yanagihara 34:57c79f4b3997 77 }
Yanagihara 34:57c79f4b3997 78
Yanagihara 34:57c79f4b3997 79 // Sets the timer to 3 times the baud rate.
Yanagihara 34:57c79f4b3997 80 void timer_set( float the_rate ){
Yanagihara 34:57c79f4b3997 81 //b_rate = 1/(3*the_rate);
Yanagihara 34:57c79f4b3997 82 b_rate = 1/the_rate;
Yanagihara 34:57c79f4b3997 83 }
Yanagihara 34:57c79f4b3997 84
Yanagihara 34:57c79f4b3997 85 // Enables the timer interrupt.
Yanagihara 34:57c79f4b3997 86 /*
Yanagihara 34:57c79f4b3997 87 void set_timer_interrupt( int the_isr )
Yanagihara 34:57c79f4b3997 88 {
Yanagihara 34:57c79f4b3997 89 br_tick.attach(&the_isr, b_rate);
Yanagihara 34:57c79f4b3997 90 }
Yanagihara 34:57c79f4b3997 91 */
Yanagihara 34:57c79f4b3997 92
Yanagihara 34:57c79f4b3997 93
Yanagihara 34:57c79f4b3997 94
Yanagihara 34:57c79f4b3997 95 void swuart_isr(void)
Yanagihara 34:57c79f4b3997 96 {
Yanagihara 34:57c79f4b3997 97
Yanagihara 34:57c79f4b3997 98 // AB transmit
Yanagihara 34:57c79f4b3997 99 if ( flag_tx_ready ){
Yanagihara 34:57c79f4b3997 100 if (mybit == 0)
Yanagihara 34:57c79f4b3997 101 swTX = 0;
Yanagihara 34:57c79f4b3997 102 else
Yanagihara 34:57c79f4b3997 103 swTX = 1;
Yanagihara 34:57c79f4b3997 104 flag_tx_ready = FALSE;
Yanagihara 34:57c79f4b3997 105 }
Yanagihara 34:57c79f4b3997 106 /* char mask, start_bit, flag_in;
Yanagihara 34:57c79f4b3997 107 //debug4 != debug4;
Yanagihara 34:57c79f4b3997 108 // Transmitter Section
Yanagihara 34:57c79f4b3997 109 if ( flag_tx_ready )
Yanagihara 34:57c79f4b3997 110 {
Yanagihara 34:57c79f4b3997 111 if ( --timer_tx_ctr<=0 )
Yanagihara 34:57c79f4b3997 112 {
Yanagihara 34:57c79f4b3997 113 //debug4 = 1;
Yanagihara 34:57c79f4b3997 114 mask = internal_tx_buffer&0x1;
Yanagihara 34:57c79f4b3997 115 //sat.printf("%d,%d",mask,bits_left_in_tx);
Yanagihara 34:57c79f4b3997 116 internal_tx_buffer >>= 1;
Yanagihara 34:57c79f4b3997 117 if ( mask == 1 )
Yanagihara 34:57c79f4b3997 118 {
Yanagihara 34:57c79f4b3997 119 swTX = 1;
Yanagihara 34:57c79f4b3997 120 }
Yanagihara 34:57c79f4b3997 121 else
Yanagihara 34:57c79f4b3997 122 {
Yanagihara 34:57c79f4b3997 123 swTX = 0;
Yanagihara 34:57c79f4b3997 124 }
Yanagihara 34:57c79f4b3997 125 timer_tx_ctr = 3;
Yanagihara 34:57c79f4b3997 126 if ( --bits_left_in_tx<=0 )
Yanagihara 34:57c79f4b3997 127 {
Yanagihara 34:57c79f4b3997 128 flag_tx_ready = FALSE;
Yanagihara 34:57c79f4b3997 129 }
Yanagihara 34:57c79f4b3997 130 }
Yanagihara 34:57c79f4b3997 131 }
Yanagihara 34:57c79f4b3997 132 // Receiver Section
Yanagihara 34:57c79f4b3997 133 /*
Yanagihara 34:57c79f4b3997 134 if ( flag_rx_off==FALSE )
Yanagihara 34:57c79f4b3997 135 {
Yanagihara 34:57c79f4b3997 136 if ( flag_rx_waiting_for_stop_bit )
Yanagihara 34:57c79f4b3997 137 {
Yanagihara 34:57c79f4b3997 138 if ( --timer_rx_ctr<=0 )
Yanagihara 34:57c79f4b3997 139 {
Yanagihara 34:57c79f4b3997 140 flag_rx_waiting_for_stop_bit = FALSE;
Yanagihara 34:57c79f4b3997 141 flag_rx_ready = FALSE;
Yanagihara 34:57c79f4b3997 142 internal_rx_buffer &= 0xFF;
Yanagihara 34:57c79f4b3997 143 if ( internal_rx_buffer!=0xC2 )
Yanagihara 34:57c79f4b3997 144 {
Yanagihara 34:57c79f4b3997 145 inbuf[qin] = internal_rx_buffer;
Yanagihara 34:57c79f4b3997 146 if ( ++qin>=IN_BUF_SIZE )
Yanagihara 34:57c79f4b3997 147 {
Yanagihara 34:57c79f4b3997 148 qin = 0;
Yanagihara 34:57c79f4b3997 149 }
Yanagihara 34:57c79f4b3997 150 }
Yanagihara 34:57c79f4b3997 151 }
Yanagihara 34:57c79f4b3997 152 }
Yanagihara 34:57c79f4b3997 153 else // rx_test_busy
Yanagihara 34:57c79f4b3997 154 {
Yanagihara 34:57c79f4b3997 155 if ( flag_rx_ready==FALSE )
Yanagihara 34:57c79f4b3997 156 {
Yanagihara 34:57c79f4b3997 157 start_bit = get_rx_pin_status();
Yanagihara 34:57c79f4b3997 158 // Test for Start Bit
Yanagihara 34:57c79f4b3997 159 if ( start_bit==0 )
Yanagihara 34:57c79f4b3997 160 {
Yanagihara 34:57c79f4b3997 161 flag_rx_ready = TRUE;
Yanagihara 34:57c79f4b3997 162 internal_rx_buffer = 0;
Yanagihara 34:57c79f4b3997 163 timer_rx_ctr = 4;
Yanagihara 34:57c79f4b3997 164 bits_left_in_rx = rx_num_of_bits;
Yanagihara 34:57c79f4b3997 165 rx_mask = 1;
Yanagihara 34:57c79f4b3997 166 }
Yanagihara 34:57c79f4b3997 167 }
Yanagihara 34:57c79f4b3997 168 else // rx_busy
Yanagihara 34:57c79f4b3997 169 {
Yanagihara 34:57c79f4b3997 170 if ( --timer_rx_ctr<=0 )
Yanagihara 34:57c79f4b3997 171 { // rcv
Yanagihara 34:57c79f4b3997 172 timer_rx_ctr = 3;
Yanagihara 34:57c79f4b3997 173 flag_in = get_rx_pin_status();
Yanagihara 34:57c79f4b3997 174 if ( flag_in )
Yanagihara 34:57c79f4b3997 175 {
Yanagihara 34:57c79f4b3997 176 internal_rx_buffer |= rx_mask;
Yanagihara 34:57c79f4b3997 177 }
Yanagihara 34:57c79f4b3997 178 rx_mask <<= 1;
Yanagihara 34:57c79f4b3997 179 if ( --bits_left_in_rx<=0 )
Yanagihara 34:57c79f4b3997 180 {
Yanagihara 34:57c79f4b3997 181 flag_rx_waiting_for_stop_bit = TRUE;
Yanagihara 34:57c79f4b3997 182 }
Yanagihara 34:57c79f4b3997 183 }
Yanagihara 34:57c79f4b3997 184 }
Yanagihara 34:57c79f4b3997 185 }
Yanagihara 34:57c79f4b3997 186 }
Yanagihara 34:57c79f4b3997 187 */
Yanagihara 34:57c79f4b3997 188 }
Yanagihara 34:57c79f4b3997 189
Yanagihara 34:57c79f4b3997 190 void init_swuart( void )
Yanagihara 34:57c79f4b3997 191 {
Yanagihara 34:57c79f4b3997 192 flag_tx_ready = FALSE;
Yanagihara 34:57c79f4b3997 193 flag_rx_ready = FALSE;
Yanagihara 34:57c79f4b3997 194 flag_rx_waiting_for_stop_bit = FALSE;
Yanagihara 34:57c79f4b3997 195 flag_rx_off = TRUE; // Start with receiver off FALSE;
Yanagihara 34:57c79f4b3997 196 rx_num_of_bits = 10;
Yanagihara 34:57c79f4b3997 197 tx_num_of_bits = 10;
Yanagihara 34:57c79f4b3997 198
Yanagihara 34:57c79f4b3997 199 swTX = 1; // start with TX line high
Yanagihara 34:57c79f4b3997 200 timer_set( SW_BAUD_RATE );
Yanagihara 34:57c79f4b3997 201 br_tick.attach(&swuart_isr, b_rate);
Yanagihara 34:57c79f4b3997 202 }
Yanagihara 34:57c79f4b3997 203
Yanagihara 34:57c79f4b3997 204 char _swgetchar( void )
Yanagihara 34:57c79f4b3997 205 {
Yanagihara 34:57c79f4b3997 206 char ch;
Yanagihara 34:57c79f4b3997 207
Yanagihara 34:57c79f4b3997 208 do
Yanagihara 34:57c79f4b3997 209 {
Yanagihara 34:57c79f4b3997 210 while ( qout==qin )
Yanagihara 34:57c79f4b3997 211 {
Yanagihara 34:57c79f4b3997 212 idle();
Yanagihara 34:57c79f4b3997 213 }
Yanagihara 34:57c79f4b3997 214 ch = inbuf[qout] & 0xFF;
Yanagihara 34:57c79f4b3997 215 if ( ++qout>=IN_BUF_SIZE )
Yanagihara 34:57c79f4b3997 216 {
Yanagihara 34:57c79f4b3997 217 qout = 0;
Yanagihara 34:57c79f4b3997 218 }
Yanagihara 34:57c79f4b3997 219 }
Yanagihara 34:57c79f4b3997 220 while ( ch==0x0A || ch==0xC2 );
Yanagihara 34:57c79f4b3997 221 return( ch );
Yanagihara 34:57c79f4b3997 222 }
Yanagihara 34:57c79f4b3997 223
Yanagihara 34:57c79f4b3997 224 void _swputchar( char ch )
Yanagihara 34:57c79f4b3997 225 {
Yanagihara 34:57c79f4b3997 226 ch = (ch<<1)|0x200;
Yanagihara 34:57c79f4b3997 227 sat.printf("ch=%x",ch);
Yanagihara 34:57c79f4b3997 228 for(int i = 0; i < 10; i++){
Yanagihara 34:57c79f4b3997 229 while ( flag_tx_ready == 1);
Yanagihara 34:57c79f4b3997 230 ch = ch >> 1;
Yanagihara 34:57c79f4b3997 231 mybit = ch & 0x1;
Yanagihara 34:57c79f4b3997 232 flag_tx_ready = TRUE;
Yanagihara 34:57c79f4b3997 233 }
Yanagihara 34:57c79f4b3997 234 sat.printf("putchar done");
Yanagihara 34:57c79f4b3997 235 //debug2 = 1;
Yanagihara 34:57c79f4b3997 236 /* while ( flag_tx_ready ){
Yanagihara 34:57c79f4b3997 237 sat.printf("waiting for TX to complete ...\r\n");
Yanagihara 34:57c79f4b3997 238 }
Yanagihara 34:57c79f4b3997 239 user_tx_buffer = ch;
Yanagihara 34:57c79f4b3997 240
Yanagihara 34:57c79f4b3997 241 // invoke_UART_transmit
Yanagihara 34:57c79f4b3997 242 bits_left_in_tx = tx_num_of_bits;
Yanagihara 34:57c79f4b3997 243 internal_tx_buffer = (user_tx_buffer<<1) | 0x200;
Yanagihara 34:57c79f4b3997 244 timer_tx_ctr = 3;
Yanagihara 34:57c79f4b3997 245 flag_tx_ready = TRUE;
Yanagihara 34:57c79f4b3997 246 //debug2 = 0;
Yanagihara 34:57c79f4b3997 247 */
Yanagihara 34:57c79f4b3997 248 }
Yanagihara 34:57c79f4b3997 249
Yanagihara 34:57c79f4b3997 250 void flush_input_buffer( void )
Yanagihara 34:57c79f4b3997 251 {
Yanagihara 34:57c79f4b3997 252 qin = 0;
Yanagihara 34:57c79f4b3997 253 qout = 0;
Yanagihara 34:57c79f4b3997 254 }
Yanagihara 34:57c79f4b3997 255
Yanagihara 34:57c79f4b3997 256 char kbhit( void )
Yanagihara 34:57c79f4b3997 257 {
Yanagihara 34:57c79f4b3997 258 return( qin!=qout );
Yanagihara 34:57c79f4b3997 259 }
Yanagihara 34:57c79f4b3997 260
Yanagihara 34:57c79f4b3997 261 void turn_rx_on( void )
Yanagihara 34:57c79f4b3997 262 {
Yanagihara 34:57c79f4b3997 263 flag_rx_off = FALSE;
Yanagihara 34:57c79f4b3997 264 }
Yanagihara 34:57c79f4b3997 265
Yanagihara 34:57c79f4b3997 266 void turn_rx_off( void )
Yanagihara 34:57c79f4b3997 267 {
Yanagihara 34:57c79f4b3997 268 flag_rx_off = TRUE;
Yanagihara 34:57c79f4b3997 269 }
Yanagihara 34:57c79f4b3997 270
Yanagihara 34:57c79f4b3997 271 void read_co2( void ){
Yanagihara 34:57c79f4b3997 272 // write to MH-Z19C
Yanagihara 34:57c79f4b3997 273
Yanagihara 34:57c79f4b3997 274 _swputchar( 0xa5 );
Yanagihara 34:57c79f4b3997 275 _swputchar( 0x33 );
Yanagihara 34:57c79f4b3997 276
Yanagihara 34:57c79f4b3997 277 //sat.printf("ch1");
Yanagihara 34:57c79f4b3997 278 _swputchar( 0xff );
Yanagihara 34:57c79f4b3997 279 //sat.printf("ch2");
Yanagihara 34:57c79f4b3997 280 _swputchar( 0x01 );
Yanagihara 34:57c79f4b3997 281 _swputchar( 0x86 );
Yanagihara 34:57c79f4b3997 282 _swputchar( 0x00 );
Yanagihara 34:57c79f4b3997 283 _swputchar( 0x00 );
Yanagihara 34:57c79f4b3997 284 _swputchar( 0x00 );
Yanagihara 34:57c79f4b3997 285 _swputchar( 0x00 );
Yanagihara 34:57c79f4b3997 286 _swputchar( 0x00 );
Yanagihara 34:57c79f4b3997 287 _swputchar( 0x79 );
Yanagihara 34:57c79f4b3997 288 wait_ms(100);
Yanagihara 34:57c79f4b3997 289 sat.printf("TX done");
Yanagihara 34:57c79f4b3997 290 for(int i=0; i<9;i++){
Yanagihara 34:57c79f4b3997 291 co2_str[i] = _swgetchar();
Yanagihara 34:57c79f4b3997 292 }
Yanagihara 34:57c79f4b3997 293
Yanagihara 34:57c79f4b3997 294 turn_rx_on();
Yanagihara 34:57c79f4b3997 295
Yanagihara 34:57c79f4b3997 296 for(int i=0; i<9;i++){
Yanagihara 34:57c79f4b3997 297 sat.printf("%02x",co2_str[i]);
Yanagihara 34:57c79f4b3997 298 }
Yanagihara 34:57c79f4b3997 299 }
Yanagihara 34:57c79f4b3997 300
Yanagihara 34:57c79f4b3997 301
Yanagihara 34:57c79f4b3997 302
MEXT1 27:b4689aa48bf5 303 int main() {
Yanagihara 34:57c79f4b3997 304
Yanagihara 34:57c79f4b3997 305 debug2 = 1;
Yanagihara 34:57c79f4b3997 306 debug3 = 1;
Yanagihara 34:57c79f4b3997 307 debug4 = 1;
Yanagihara 34:57c79f4b3997 308 wait_ms(500);
Yanagihara 34:57c79f4b3997 309 debug2 = 0;
Yanagihara 34:57c79f4b3997 310 debug3 = 0;
Yanagihara 34:57c79f4b3997 311 debug4 = 0;
Yanagihara 34:57c79f4b3997 312 wait_ms(500);
Yanagihara 34:57c79f4b3997 313 debug2 = 1;
Yanagihara 34:57c79f4b3997 314 debug3 = 1;
Yanagihara 34:57c79f4b3997 315 debug4 = 1;
Yanagihara 34:57c79f4b3997 316 wait_ms(500);
Yanagihara 34:57c79f4b3997 317 debug2 = 0;
Yanagihara 34:57c79f4b3997 318 debug3 = 0;
Yanagihara 34:57c79f4b3997 319 debug4 = 0;
Yanagihara 34:57c79f4b3997 320 wait_ms(500);
Yanagihara 34:57c79f4b3997 321 debug2 = 1;
Yanagihara 34:57c79f4b3997 322 debug3 = 1;
Yanagihara 34:57c79f4b3997 323 debug4 = 1;
Yanagihara 34:57c79f4b3997 324 wait_ms(500);
Yanagihara 34:57c79f4b3997 325 debug2 = 0;
Yanagihara 34:57c79f4b3997 326 debug3 = 0;
Yanagihara 34:57c79f4b3997 327 debug4 = 0;
Yanagihara 34:57c79f4b3997 328 wait_ms(500);
Yanagihara 34:57c79f4b3997 329
Yanagihara 34:57c79f4b3997 330 turn_rx_off();
Yanagihara 34:57c79f4b3997 331 init_swuart();
Yanagihara 34:57c79f4b3997 332
Yanagihara 34:57c79f4b3997 333 LandLED1 = 1;
Yanagihara 34:57c79f4b3997 334 LandLED2 = 1;
Yanagihara 34:57c79f4b3997 335 LandLED3 = 1;
Yanagihara 34:57c79f4b3997 336 LandLED4 = 1;
heptasat2021 29:eb84063fe5c9 337 sat.printf("From Sat : Nominal Operation\r\n");
heptasat2021 29:eb84063fe5c9 338 com.printf("From Sat : Nominal Operation\r\n");
heptasat2021 29:eb84063fe5c9 339 com.baud(9600);
heptasat2021 29:eb84063fe5c9 340 int flag = 0; //condition flag
heptasat2021 29:eb84063fe5c9 341 float batvol, temp; //voltage, temperature
heptasat2021 29:eb84063fe5c9 342 int rcmd=0,cmdflag=0; //command variable
Yanagihara 34:57c79f4b3997 343 float ax,ay,az;
Yanagihara 34:57c79f4b3997 344 float gx,gy,gz;
Yanagihara 34:57c79f4b3997 345
heptasat2021 29:eb84063fe5c9 346 sattime.start();
heptasat2021 29:eb84063fe5c9 347 eps.turn_on_regulator();//turn on 3.3V conveter
Yanagihara 34:57c79f4b3997 348 while(1) {
heptasat2021 30:f300d1e88f4c 349 com.xbee_receive(&rcmd,&cmdflag);//interupting by ground station command
heptasat2021 30:f300d1e88f4c 350
heptasat2021 29:eb84063fe5c9 351 //satellite condition led
heptasat2021 29:eb84063fe5c9 352 condition = !condition;
heptasat2021 29:eb84063fe5c9 353
heptasat2021 29:eb84063fe5c9 354 //senssing HK data(dummy data)
heptasat2021 29:eb84063fe5c9 355 eps.vol(&batvol);
MEXT1 27:b4689aa48bf5 356 sensor.temp_sense(&temp);
heptasat2021 29:eb84063fe5c9 357
heptasat2021 29:eb84063fe5c9 358 //Transmitting HK data to Ground Station(GS)
heptasat2021 29:eb84063fe5c9 359 com.printf("HEPTASAT::Condition = %d, Time = %f [s], batVol = %.2f [V],Temp = %.2f [C]\r\n",flag,sattime.read(),batvol,temp);
heptasat2021 29:eb84063fe5c9 360 wait_ms(1000);
Yanagihara 34:57c79f4b3997 361 LandLED1 = ! LandLED1;
Yanagihara 34:57c79f4b3997 362 LandLED2 = ! LandLED2;
Yanagihara 34:57c79f4b3997 363 LandLED3 = ! LandLED3;
Yanagihara 34:57c79f4b3997 364 LandLED4 = ! LandLED4;
heptasat2021 29:eb84063fe5c9 365 //Power Saving Mode
heptasat2021 29:eb84063fe5c9 366 if((batvol <= 3.5) | (temp > 35.0)){
heptasat2021 29:eb84063fe5c9 367 eps.shut_down_regulator();
heptasat2021 29:eb84063fe5c9 368 com.printf("Power saving mode ON\r\n");
heptasat2021 29:eb84063fe5c9 369 flag = 1;
heptasat2021 29:eb84063fe5c9 370 } else if((flag == 1) & (batvol > 3.7) & (temp <= 25.0)) {
heptasat2021 29:eb84063fe5c9 371 eps.turn_on_regulator();
heptasat2021 29:eb84063fe5c9 372 com.printf("Power saving mode OFF\r\n");
heptasat2021 29:eb84063fe5c9 373 flag = 0;
HeptaSatTraining2019 26:220e5f95168a 374 }
MEXT1 27:b4689aa48bf5 375 //Contents of command
HeptaSatTraining2019 26:220e5f95168a 376 if (cmdflag == 1) {
HeptaSatTraining2019 26:220e5f95168a 377 if (rcmd == 'a') {
heptasat2021 29:eb84063fe5c9 378 sat.printf("rcmd=%c,cmdflag=%d\r\n",rcmd,cmdflag);
Yanagihara 34:57c79f4b3997 379 com.printf("Hepta-Sat Uplink Ok\r\n");
heptasat2021 29:eb84063fe5c9 380 for(int j=0;j<5;j++){
heptasat2021 29:eb84063fe5c9 381 com.printf("Hello World!\r\n");
heptasat2021 29:eb84063fe5c9 382 condition = 1;
heptasat2021 29:eb84063fe5c9 383 wait_ms(1000);
heptasat2021 29:eb84063fe5c9 384 }
heptasat2021 29:eb84063fe5c9 385 }else if (rcmd == 'b') {
heptasat2021 29:eb84063fe5c9 386 sat.printf("rcmd=%c,cmdflag=%d\r\n",rcmd,cmdflag);
Yanagihara 34:57c79f4b3997 387 com.printf("Hepta-Sat Uplink Ok\r\n");
MEXT1 27:b4689aa48bf5 388 char str[100];
MEXT1 27:b4689aa48bf5 389 mkdir("/sd/mydir", 0777);
heptasat2021 29:eb84063fe5c9 390 FILE *fp = fopen("/sd/mydir/satdata.txt","w");
MEXT1 27:b4689aa48bf5 391 if(fp == NULL) {
MEXT1 27:b4689aa48bf5 392 error("Could not open file for write\r\n");
MEXT1 27:b4689aa48bf5 393 }
heptasat2021 29:eb84063fe5c9 394 for(int i = 0; i < 10; i++) {
heptasat2021 29:eb84063fe5c9 395 eps.vol(&batvol);
heptasat2021 29:eb84063fe5c9 396 fprintf(fp,"%f\r\n",batvol);
heptasat2021 29:eb84063fe5c9 397 condition = 1;
heptasat2021 29:eb84063fe5c9 398 wait_ms(1000);
MEXT1 27:b4689aa48bf5 399 }
heptasat2021 29:eb84063fe5c9 400 fclose(fp);
heptasat2021 29:eb84063fe5c9 401 fp = fopen("/sd/mydir/satdata.txt","r");
heptasat2021 29:eb84063fe5c9 402 for(int i = 0; i < 10; i++) {
heptasat2021 29:eb84063fe5c9 403 fgets(str,100,fp);
heptasat2021 29:eb84063fe5c9 404 com.puts(str);
heptasat2021 29:eb84063fe5c9 405 }
heptasat2021 29:eb84063fe5c9 406 fclose(fp);
heptasat2021 29:eb84063fe5c9 407 }else if (rcmd == 'c') {
heptasat2021 29:eb84063fe5c9 408 //Please insert your answer
Yanagihara 34:57c79f4b3997 409 sat.printf("Command Get %d\r\n",rcmd);
Yanagihara 34:57c79f4b3997 410 com.printf("HEPTA Uplink OK\r\n");
Yanagihara 34:57c79f4b3997 411 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 412 sat.printf("Accel sensing Mode\r\n");
Yanagihara 34:57c79f4b3997 413 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 414 for(int ii = 0; ii < 10; ii++) {
Yanagihara 34:57c79f4b3997 415 sensor.sen_acc(&ax,&ay,&az);
Yanagihara 34:57c79f4b3997 416 com.printf("AX = %f\r\n",ax);
Yanagihara 34:57c79f4b3997 417 com.printf("AY = %f\r\n",ay);
Yanagihara 34:57c79f4b3997 418 com.printf("AZ = %f\r\n",az);
Yanagihara 34:57c79f4b3997 419 wait(0.5);
Yanagihara 34:57c79f4b3997 420 }
heptasat2021 29:eb84063fe5c9 421 }else if (rcmd == 'd') {
Yanagihara 34:57c79f4b3997 422 sat.printf("Command Get %d\r\n",rcmd);
Yanagihara 34:57c79f4b3997 423 com.printf("HEPTA Uplink OK\r\n");
Yanagihara 34:57c79f4b3997 424 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 425 sat.printf("Gyro sensing Mode\r\n");
Yanagihara 34:57c79f4b3997 426 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 427 for(int ii = 0; ii < 10; ii++) {
Yanagihara 34:57c79f4b3997 428 sensor.sen_gyro(&gx,&gy,&gz);
Yanagihara 34:57c79f4b3997 429 com.printf("GX = %f\r\n",gx);
Yanagihara 34:57c79f4b3997 430 com.printf("GY = %f\r\n",gy);
Yanagihara 34:57c79f4b3997 431 com.printf("GZ = %f\r\n",gz);
Yanagihara 34:57c79f4b3997 432 wait(0.5);
Yanagihara 34:57c79f4b3997 433 }
heptasat2021 29:eb84063fe5c9 434
heptasat2021 29:eb84063fe5c9 435 }else if (rcmd == 'e') {
Yanagihara 34:57c79f4b3997 436 sat.printf("Command Get %d\r\n",rcmd);
Yanagihara 34:57c79f4b3997 437 com.printf("HEPTA Uplink OK\r\n");
Yanagihara 34:57c79f4b3997 438 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 439 sat.printf("CO2 sensing Mode\r\n");
Yanagihara 34:57c79f4b3997 440 sat.printf("===================\r\n");
Yanagihara 34:57c79f4b3997 441
Yanagihara 34:57c79f4b3997 442 co2ppm = 42;
Yanagihara 34:57c79f4b3997 443 for(int ii = 0; ii < 10; ii++) {
Yanagihara 34:57c79f4b3997 444 read_co2();
Yanagihara 34:57c79f4b3997 445 co2ppm = co2_str[2]*256 + co2_str[3];
Yanagihara 34:57c79f4b3997 446 com.printf("CO2 = %d [ppm]\r\n",co2ppm);
Yanagihara 34:57c79f4b3997 447 wait(0.5);
Yanagihara 34:57c79f4b3997 448 }
HeptaSatTraining2019 26:220e5f95168a 449 }
heptasat2021 30:f300d1e88f4c 450 com.initialize();
HeptaSatTraining2019 26:220e5f95168a 451 }
HeptaSatTraining2019 24:3659e0c223c8 452 }
heptasat2021 29:eb84063fe5c9 453 sattime.stop();
heptasat2021 29:eb84063fe5c9 454 sat.printf("From Sat : End of operation\r\n");
heptasat2021 29:eb84063fe5c9 455 com.printf("From Sat : End of operation\r\n");
MEXT1 27:b4689aa48bf5 456 }
Yanagihara 34:57c79f4b3997 457