あああ
Dependencies: HEPTA_SENSOR mbed HEPTA_EPS HEPTA_COM HEPTA_CDH
main.cpp@34:57c79f4b3997, 2022-08-30 (annotated)
- Committer:
- Yanagihara
- Date:
- Tue Aug 30 02:38:16 2022 +0000
- Revision:
- 34:57c79f4b3997
- Parent:
- 32:c22cbcfb4635
Who changed what in which revision?
User | Revision | Line number | New 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 |