
analog module solar on foils project
Dependencies: mbed
Fork of CAN_module_analog by
sensor.cpp@0:38f51c4f7655, 2015-08-11 (annotated)
- Committer:
- Dannis_mbed
- Date:
- Tue Aug 11 08:41:49 2015 +0000
- Revision:
- 0:38f51c4f7655
presentation version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Dannis_mbed | 0:38f51c4f7655 | 1 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 2 | // // |
Dannis_mbed | 0:38f51c4f7655 | 3 | // File : ExtUI.cpp // |
Dannis_mbed | 0:38f51c4f7655 | 4 | // Version : 0.1 // |
Dannis_mbed | 0:38f51c4f7655 | 5 | // Initial : 24 June 2015 // |
Dannis_mbed | 0:38f51c4f7655 | 6 | // Author : Dany Brugman // |
Dannis_mbed | 0:38f51c4f7655 | 7 | // Comment : sensor class // |
Dannis_mbed | 0:38f51c4f7655 | 8 | // // |
Dannis_mbed | 0:38f51c4f7655 | 9 | // // |
Dannis_mbed | 0:38f51c4f7655 | 10 | // Changelog : // |
Dannis_mbed | 0:38f51c4f7655 | 11 | // Date: Name: Comment: // |
Dannis_mbed | 0:38f51c4f7655 | 12 | // 24/06/2015 DNB First version // |
Dannis_mbed | 0:38f51c4f7655 | 13 | // // |
Dannis_mbed | 0:38f51c4f7655 | 14 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 15 | |
Dannis_mbed | 0:38f51c4f7655 | 16 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 17 | // includes // |
Dannis_mbed | 0:38f51c4f7655 | 18 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 19 | #include "sensor.h" |
Dannis_mbed | 0:38f51c4f7655 | 20 | |
Dannis_mbed | 0:38f51c4f7655 | 21 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 22 | // defines // |
Dannis_mbed | 0:38f51c4f7655 | 23 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 24 | #define NEW_HEIGHT 203 |
Dannis_mbed | 0:38f51c4f7655 | 25 | |
Dannis_mbed | 0:38f51c4f7655 | 26 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 27 | // constructor // |
Dannis_mbed | 0:38f51c4f7655 | 28 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 29 | Sensor::Sensor() : |
Dannis_mbed | 0:38f51c4f7655 | 30 | uiCounter(0), |
Dannis_mbed | 0:38f51c4f7655 | 31 | bClearToSend(0) |
Dannis_mbed | 0:38f51c4f7655 | 32 | { |
Dannis_mbed | 0:38f51c4f7655 | 33 | init(); |
Dannis_mbed | 0:38f51c4f7655 | 34 | }; |
Dannis_mbed | 0:38f51c4f7655 | 35 | |
Dannis_mbed | 0:38f51c4f7655 | 36 | Sensor::~Sensor() |
Dannis_mbed | 0:38f51c4f7655 | 37 | { |
Dannis_mbed | 0:38f51c4f7655 | 38 | }; |
Dannis_mbed | 0:38f51c4f7655 | 39 | |
Dannis_mbed | 0:38f51c4f7655 | 40 | extern Serial debug; |
Dannis_mbed | 0:38f51c4f7655 | 41 | extern CAN CANBus; |
Dannis_mbed | 0:38f51c4f7655 | 42 | extern AnalogIn sensorPort; |
Dannis_mbed | 0:38f51c4f7655 | 43 | |
Dannis_mbed | 0:38f51c4f7655 | 44 | circular_buffer<float> cbHeightBuffer(10); |
Dannis_mbed | 0:38f51c4f7655 | 45 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 46 | // initialisation // |
Dannis_mbed | 0:38f51c4f7655 | 47 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 48 | void Sensor::init(void) |
Dannis_mbed | 0:38f51c4f7655 | 49 | { |
Dannis_mbed | 0:38f51c4f7655 | 50 | |
Dannis_mbed | 0:38f51c4f7655 | 51 | } |
Dannis_mbed | 0:38f51c4f7655 | 52 | |
Dannis_mbed | 0:38f51c4f7655 | 53 | void Sensor::vMeasureHeight(void) |
Dannis_mbed | 0:38f51c4f7655 | 54 | { |
Dannis_mbed | 0:38f51c4f7655 | 55 | fValue = sensorPort.read(); |
Dannis_mbed | 0:38f51c4f7655 | 56 | fDistance = (((fValue- 0.18f)* 122.22f) + 12); |
Dannis_mbed | 0:38f51c4f7655 | 57 | cbHeightBuffer.push_back(fDistance); |
Dannis_mbed | 0:38f51c4f7655 | 58 | uiHeight = (uint32_t) fDistance; |
Dannis_mbed | 0:38f51c4f7655 | 59 | itoa(fDistance, cValue); |
Dannis_mbed | 0:38f51c4f7655 | 60 | //cMessage = getValue(); |
Dannis_mbed | 0:38f51c4f7655 | 61 | if (bClearToSend) |
Dannis_mbed | 0:38f51c4f7655 | 62 | { |
Dannis_mbed | 0:38f51c4f7655 | 63 | CANBus.write(CANMessage(NEW_HEIGHT, getValue(), 1)); |
Dannis_mbed | 0:38f51c4f7655 | 64 | debug.printf("Clear to send\t"); |
Dannis_mbed | 0:38f51c4f7655 | 65 | } |
Dannis_mbed | 0:38f51c4f7655 | 66 | debug.printf("Sensor value int: %i\t", uiHeight); |
Dannis_mbed | 0:38f51c4f7655 | 67 | debug.printf("send data: %c\r\n", getValue()); |
Dannis_mbed | 0:38f51c4f7655 | 68 | } |
Dannis_mbed | 0:38f51c4f7655 | 69 | |
Dannis_mbed | 0:38f51c4f7655 | 70 | float Sensor::vAverageValue(void) |
Dannis_mbed | 0:38f51c4f7655 | 71 | { |
Dannis_mbed | 0:38f51c4f7655 | 72 | int i; |
Dannis_mbed | 0:38f51c4f7655 | 73 | int size = cbHeightBuffer.get_size(); |
Dannis_mbed | 0:38f51c4f7655 | 74 | for(i=0; i < size; i++) |
Dannis_mbed | 0:38f51c4f7655 | 75 | { |
Dannis_mbed | 0:38f51c4f7655 | 76 | fAverageDistance += cbHeightBuffer.front(); |
Dannis_mbed | 0:38f51c4f7655 | 77 | } |
Dannis_mbed | 0:38f51c4f7655 | 78 | fAverageDistance = fAverageDistance/size; |
Dannis_mbed | 0:38f51c4f7655 | 79 | return fAverageDistance; |
Dannis_mbed | 0:38f51c4f7655 | 80 | } |
Dannis_mbed | 0:38f51c4f7655 | 81 | |
Dannis_mbed | 0:38f51c4f7655 | 82 | void Sensor::setClearToSend(bool Status) |
Dannis_mbed | 0:38f51c4f7655 | 83 | { |
Dannis_mbed | 0:38f51c4f7655 | 84 | bClearToSend = Status; |
Dannis_mbed | 0:38f51c4f7655 | 85 | } |
Dannis_mbed | 0:38f51c4f7655 | 86 | |
Dannis_mbed | 0:38f51c4f7655 | 87 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 88 | // prep value // |
Dannis_mbed | 0:38f51c4f7655 | 89 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 90 | void Sensor::itoa( uint32_t value, char *str) |
Dannis_mbed | 0:38f51c4f7655 | 91 | { |
Dannis_mbed | 0:38f51c4f7655 | 92 | int i,j; |
Dannis_mbed | 0:38f51c4f7655 | 93 | char temp[4]; |
Dannis_mbed | 0:38f51c4f7655 | 94 | for(i=0; value > 0; i++){ |
Dannis_mbed | 0:38f51c4f7655 | 95 | str[i] = value%10+'0'; |
Dannis_mbed | 0:38f51c4f7655 | 96 | value=value/10; |
Dannis_mbed | 0:38f51c4f7655 | 97 | } |
Dannis_mbed | 0:38f51c4f7655 | 98 | for(j=0;i>=0;j++,i--){ |
Dannis_mbed | 0:38f51c4f7655 | 99 | temp[j]=str[i-1]; |
Dannis_mbed | 0:38f51c4f7655 | 100 | } |
Dannis_mbed | 0:38f51c4f7655 | 101 | for(i=0;i<j;i++){ |
Dannis_mbed | 0:38f51c4f7655 | 102 | str[i]=temp[i]; |
Dannis_mbed | 0:38f51c4f7655 | 103 | } |
Dannis_mbed | 0:38f51c4f7655 | 104 | if(strcmp(str,"")== 0) str[0] = '0'; |
Dannis_mbed | 0:38f51c4f7655 | 105 | } |
Dannis_mbed | 0:38f51c4f7655 | 106 | |
Dannis_mbed | 0:38f51c4f7655 | 107 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 108 | // get value // |
Dannis_mbed | 0:38f51c4f7655 | 109 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 110 | char* Sensor::getValue(void) |
Dannis_mbed | 0:38f51c4f7655 | 111 | { |
Dannis_mbed | 0:38f51c4f7655 | 112 | static char* pValue; |
Dannis_mbed | 0:38f51c4f7655 | 113 | pValue = cValue; |
Dannis_mbed | 0:38f51c4f7655 | 114 | return pValue; |
Dannis_mbed | 0:38f51c4f7655 | 115 | } |