SMART CLEO Uart VR

Committer:
SMART_CLEO
Date:
Thu Sep 28 03:43:13 2017 +0000
Revision:
0:9fdcbdbe10a5
SMART_CLEO

Who changed what in which revision?

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