han back / Mbed OS CLEO_UART_FLAME
Committer:
SMART_CLEO
Date:
Thu Sep 28 03:32:57 2017 +0000
Revision:
0:12a3d9e281a9
SMART_CLEO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SMART_CLEO 0:12a3d9e281a9 1 #include "mbed.h"
SMART_CLEO 0:12a3d9e281a9 2
SMART_CLEO 0:12a3d9e281a9 3 struct UART_buf
SMART_CLEO 0:12a3d9e281a9 4 {
SMART_CLEO 0:12a3d9e281a9 5 uint8_t STA;
SMART_CLEO 0:12a3d9e281a9 6 uint8_t MODE;
SMART_CLEO 0:12a3d9e281a9 7 uint8_t CMD;
SMART_CLEO 0:12a3d9e281a9 8 uint8_t LEN;
SMART_CLEO 0:12a3d9e281a9 9 uint8_t DATA[32];
SMART_CLEO 0:12a3d9e281a9 10 uint8_t END;
SMART_CLEO 0:12a3d9e281a9 11
SMART_CLEO 0:12a3d9e281a9 12 };
SMART_CLEO 0:12a3d9e281a9 13
SMART_CLEO 0:12a3d9e281a9 14 PinName pin_FLAME_A = PA_0;
SMART_CLEO 0:12a3d9e281a9 15
SMART_CLEO 0:12a3d9e281a9 16 AnalogIn adc_Flame(pin_FLAME_A);
SMART_CLEO 0:12a3d9e281a9 17
SMART_CLEO 0:12a3d9e281a9 18 Serial SerialUART(PA_2, PA_3);
SMART_CLEO 0:12a3d9e281a9 19
SMART_CLEO 0:12a3d9e281a9 20 uint8_t Buffer[37];
SMART_CLEO 0:12a3d9e281a9 21
SMART_CLEO 0:12a3d9e281a9 22 UART_buf RX_BUF;
SMART_CLEO 0:12a3d9e281a9 23
SMART_CLEO 0:12a3d9e281a9 24 Ticker Sensor_Timer;
SMART_CLEO 0:12a3d9e281a9 25 void SerialUARTRX_ISR(void);
SMART_CLEO 0:12a3d9e281a9 26 void Timer_setting(uint8_t cmd, uint8_t value);
SMART_CLEO 0:12a3d9e281a9 27 void Sensor_Read(void);
SMART_CLEO 0:12a3d9e281a9 28
SMART_CLEO 0:12a3d9e281a9 29 int main() {
SMART_CLEO 0:12a3d9e281a9 30
SMART_CLEO 0:12a3d9e281a9 31 SerialUART.baud(115200);
SMART_CLEO 0:12a3d9e281a9 32
SMART_CLEO 0:12a3d9e281a9 33 SerialUART.attach(&SerialUARTRX_ISR);
SMART_CLEO 0:12a3d9e281a9 34
SMART_CLEO 0:12a3d9e281a9 35 Timer_setting(0x06, 1);
SMART_CLEO 0:12a3d9e281a9 36
SMART_CLEO 0:12a3d9e281a9 37 while(1)
SMART_CLEO 0:12a3d9e281a9 38 {
SMART_CLEO 0:12a3d9e281a9 39 }
SMART_CLEO 0:12a3d9e281a9 40 }
SMART_CLEO 0:12a3d9e281a9 41
SMART_CLEO 0:12a3d9e281a9 42 void SerialUARTRX_ISR(void)
SMART_CLEO 0:12a3d9e281a9 43 {
SMART_CLEO 0:12a3d9e281a9 44 static uint8_t RX_count = 0, RX_Len = 32, RX_Status = 0;
SMART_CLEO 0:12a3d9e281a9 45 uint8_t rx_da = SerialUART.getc();
SMART_CLEO 0:12a3d9e281a9 46 switch(RX_Status)
SMART_CLEO 0:12a3d9e281a9 47 {
SMART_CLEO 0:12a3d9e281a9 48 case 0:
SMART_CLEO 0:12a3d9e281a9 49 if(rx_da == 0x76)
SMART_CLEO 0:12a3d9e281a9 50 {
SMART_CLEO 0:12a3d9e281a9 51 RX_BUF.STA = rx_da;
SMART_CLEO 0:12a3d9e281a9 52 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 53 }
SMART_CLEO 0:12a3d9e281a9 54 break;
SMART_CLEO 0:12a3d9e281a9 55 case 1:
SMART_CLEO 0:12a3d9e281a9 56 RX_BUF.MODE = rx_da;
SMART_CLEO 0:12a3d9e281a9 57 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 58 break;
SMART_CLEO 0:12a3d9e281a9 59 case 2:
SMART_CLEO 0:12a3d9e281a9 60 RX_BUF.CMD = rx_da;
SMART_CLEO 0:12a3d9e281a9 61 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 62 break;
SMART_CLEO 0:12a3d9e281a9 63 case 3:
SMART_CLEO 0:12a3d9e281a9 64 RX_BUF.LEN = rx_da;
SMART_CLEO 0:12a3d9e281a9 65 RX_Len = RX_BUF.LEN;
SMART_CLEO 0:12a3d9e281a9 66 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 67 if(RX_Len == 0)
SMART_CLEO 0:12a3d9e281a9 68 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 69 break;
SMART_CLEO 0:12a3d9e281a9 70 case 4:
SMART_CLEO 0:12a3d9e281a9 71 RX_BUF.DATA[RX_count] = rx_da;
SMART_CLEO 0:12a3d9e281a9 72 RX_count++;
SMART_CLEO 0:12a3d9e281a9 73 if(RX_count == RX_Len)
SMART_CLEO 0:12a3d9e281a9 74 {
SMART_CLEO 0:12a3d9e281a9 75 RX_Status++;
SMART_CLEO 0:12a3d9e281a9 76 RX_count = 0;
SMART_CLEO 0:12a3d9e281a9 77 RX_Len = 32;
SMART_CLEO 0:12a3d9e281a9 78 }
SMART_CLEO 0:12a3d9e281a9 79 break;
SMART_CLEO 0:12a3d9e281a9 80 case 5:
SMART_CLEO 0:12a3d9e281a9 81 if(rx_da == 0x3E)
SMART_CLEO 0:12a3d9e281a9 82 {
SMART_CLEO 0:12a3d9e281a9 83 RX_BUF.END = rx_da;
SMART_CLEO 0:12a3d9e281a9 84 RX_Status = 0;
SMART_CLEO 0:12a3d9e281a9 85 switch(RX_BUF.MODE)
SMART_CLEO 0:12a3d9e281a9 86 {
SMART_CLEO 0:12a3d9e281a9 87 case 0x04:
SMART_CLEO 0:12a3d9e281a9 88 Timer_setting(RX_BUF.CMD, RX_BUF.DATA[0]);
SMART_CLEO 0:12a3d9e281a9 89 break;
SMART_CLEO 0:12a3d9e281a9 90 }
SMART_CLEO 0:12a3d9e281a9 91 }
SMART_CLEO 0:12a3d9e281a9 92 break;
SMART_CLEO 0:12a3d9e281a9 93 }
SMART_CLEO 0:12a3d9e281a9 94 }
SMART_CLEO 0:12a3d9e281a9 95
SMART_CLEO 0:12a3d9e281a9 96 void Timer_setting(uint8_t cmd, uint8_t value)
SMART_CLEO 0:12a3d9e281a9 97 {
SMART_CLEO 0:12a3d9e281a9 98 double Time_value = 0;
SMART_CLEO 0:12a3d9e281a9 99 switch(cmd)
SMART_CLEO 0:12a3d9e281a9 100 {
SMART_CLEO 0:12a3d9e281a9 101 case 0x01:
SMART_CLEO 0:12a3d9e281a9 102 Time_value = 30;
SMART_CLEO 0:12a3d9e281a9 103 break;
SMART_CLEO 0:12a3d9e281a9 104 case 0x02:
SMART_CLEO 0:12a3d9e281a9 105 Time_value = 60;
SMART_CLEO 0:12a3d9e281a9 106 break;
SMART_CLEO 0:12a3d9e281a9 107 case 0x03:
SMART_CLEO 0:12a3d9e281a9 108 Time_value = 120;
SMART_CLEO 0:12a3d9e281a9 109 break;
SMART_CLEO 0:12a3d9e281a9 110 case 0x04:
SMART_CLEO 0:12a3d9e281a9 111 Time_value = 300;
SMART_CLEO 0:12a3d9e281a9 112 break;
SMART_CLEO 0:12a3d9e281a9 113 case 0x05:
SMART_CLEO 0:12a3d9e281a9 114 Time_value = 600;
SMART_CLEO 0:12a3d9e281a9 115 break;
SMART_CLEO 0:12a3d9e281a9 116 case 0x06:
SMART_CLEO 0:12a3d9e281a9 117 Time_value = value;
SMART_CLEO 0:12a3d9e281a9 118 Time_value = 1.0/Time_value;
SMART_CLEO 0:12a3d9e281a9 119 break;
SMART_CLEO 0:12a3d9e281a9 120 }
SMART_CLEO 0:12a3d9e281a9 121 Sensor_Timer.attach(&Sensor_Read, Time_value);
SMART_CLEO 0:12a3d9e281a9 122 }
SMART_CLEO 0:12a3d9e281a9 123
SMART_CLEO 0:12a3d9e281a9 124 void Sensor_Read(void)
SMART_CLEO 0:12a3d9e281a9 125 {
SMART_CLEO 0:12a3d9e281a9 126 uint16_t ADC_data = adc_Flame.read()*3300;
SMART_CLEO 0:12a3d9e281a9 127 Buffer[0] = 0x76;
SMART_CLEO 0:12a3d9e281a9 128 Buffer[1] = 0x01;
SMART_CLEO 0:12a3d9e281a9 129 Buffer[2] = 0x22;
SMART_CLEO 0:12a3d9e281a9 130 Buffer[3] = 0x02;
SMART_CLEO 0:12a3d9e281a9 131 Buffer[4] = ADC_data >> 8;
SMART_CLEO 0:12a3d9e281a9 132 Buffer[5] = ADC_data & 0xFF;
SMART_CLEO 0:12a3d9e281a9 133 Buffer[6] = 0x3E;
SMART_CLEO 0:12a3d9e281a9 134 for(int i=0; i<7; i++)
SMART_CLEO 0:12a3d9e281a9 135 SerialUART.putc(Buffer[i]);
SMART_CLEO 0:12a3d9e281a9 136 }