
analog module solar on foils project
Dependencies: mbed
Fork of CAN_module_analog by
main.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 : main.cpp // |
Dannis_mbed | 0:38f51c4f7655 | 4 | // Version : 0.1 // |
Dannis_mbed | 0:38f51c4f7655 | 5 | // Initial : 17 June 2015 // |
Dannis_mbed | 0:38f51c4f7655 | 6 | // Author : Dany Brugman // |
Dannis_mbed | 0:38f51c4f7655 | 7 | // Comment : CANbus module analog sensor // |
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 | // 19/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 "mbed.h" |
Dannis_mbed | 0:38f51c4f7655 | 20 | #include "PinDetect.h" |
Dannis_mbed | 0:38f51c4f7655 | 21 | #include "sensor.h" |
Dannis_mbed | 0:38f51c4f7655 | 22 | |
Dannis_mbed | 0:38f51c4f7655 | 23 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 24 | // device ID // |
Dannis_mbed | 0:38f51c4f7655 | 25 | // CAN module ultrasonic heightsensor port side define HEIGHT_PORT // |
Dannis_mbed | 0:38f51c4f7655 | 26 | // CAN module ultrasonic heightsensor starboard side define HEIGHT_STARB // |
Dannis_mbed | 0:38f51c4f7655 | 27 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 28 | #define HEIGHT_PORT |
Dannis_mbed | 0:38f51c4f7655 | 29 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 30 | // defines // |
Dannis_mbed | 0:38f51c4f7655 | 31 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 32 | #ifdef HEIGHT_PORT |
Dannis_mbed | 0:38f51c4f7655 | 33 | #define DEVICE_ID 201 |
Dannis_mbed | 0:38f51c4f7655 | 34 | #define REQ_STATUS 2003 |
Dannis_mbed | 0:38f51c4f7655 | 35 | #endif |
Dannis_mbed | 0:38f51c4f7655 | 36 | #ifdef HEIGHT_STARB |
Dannis_mbed | 0:38f51c4f7655 | 37 | #define DEVICE_ID 202 |
Dannis_mbed | 0:38f51c4f7655 | 38 | #define REQ_STATUS 2004 |
Dannis_mbed | 0:38f51c4f7655 | 39 | #endif |
Dannis_mbed | 0:38f51c4f7655 | 40 | |
Dannis_mbed | 0:38f51c4f7655 | 41 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 42 | // // |
Dannis_mbed | 0:38f51c4f7655 | 43 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 44 | |
Dannis_mbed | 0:38f51c4f7655 | 45 | |
Dannis_mbed | 0:38f51c4f7655 | 46 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 47 | // interrupts // |
Dannis_mbed | 0:38f51c4f7655 | 48 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 49 | Ticker ticker; |
Dannis_mbed | 0:38f51c4f7655 | 50 | Ticker tActiveLedOn; |
Dannis_mbed | 0:38f51c4f7655 | 51 | Ticker tled2on; |
Dannis_mbed | 0:38f51c4f7655 | 52 | Ticker tReadSensor; |
Dannis_mbed | 0:38f51c4f7655 | 53 | |
Dannis_mbed | 0:38f51c4f7655 | 54 | Timeout tActiveLedOff; |
Dannis_mbed | 0:38f51c4f7655 | 55 | Timeout tled2off; |
Dannis_mbed | 0:38f51c4f7655 | 56 | |
Dannis_mbed | 0:38f51c4f7655 | 57 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 58 | // port declaration // |
Dannis_mbed | 0:38f51c4f7655 | 59 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 60 | DigitalOut Led1(LED1); |
Dannis_mbed | 0:38f51c4f7655 | 61 | DigitalOut Led2(LED2); |
Dannis_mbed | 0:38f51c4f7655 | 62 | DigitalOut Led4(LED4); |
Dannis_mbed | 0:38f51c4f7655 | 63 | |
Dannis_mbed | 0:38f51c4f7655 | 64 | AnalogIn sensorPort(p19); |
Dannis_mbed | 0:38f51c4f7655 | 65 | Sensor sHeightSensor; |
Dannis_mbed | 0:38f51c4f7655 | 66 | CAN CANBus(p30, p29); |
Dannis_mbed | 0:38f51c4f7655 | 67 | |
Dannis_mbed | 0:38f51c4f7655 | 68 | Serial debug(USBTX, USBRX); |
Dannis_mbed | 0:38f51c4f7655 | 69 | |
Dannis_mbed | 0:38f51c4f7655 | 70 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 71 | // global variables // |
Dannis_mbed | 0:38f51c4f7655 | 72 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 73 | char counter = 0; |
Dannis_mbed | 0:38f51c4f7655 | 74 | char cMessage, cStatus; |
Dannis_mbed | 0:38f51c4f7655 | 75 | |
Dannis_mbed | 0:38f51c4f7655 | 76 | int i; |
Dannis_mbed | 0:38f51c4f7655 | 77 | |
Dannis_mbed | 0:38f51c4f7655 | 78 | float fValue, fDistance; |
Dannis_mbed | 0:38f51c4f7655 | 79 | |
Dannis_mbed | 0:38f51c4f7655 | 80 | |
Dannis_mbed | 0:38f51c4f7655 | 81 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 82 | // functions declarations // |
Dannis_mbed | 0:38f51c4f7655 | 83 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 84 | |
Dannis_mbed | 0:38f51c4f7655 | 85 | |
Dannis_mbed | 0:38f51c4f7655 | 86 | |
Dannis_mbed | 0:38f51c4f7655 | 87 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 88 | // functions // |
Dannis_mbed | 0:38f51c4f7655 | 89 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 90 | |
Dannis_mbed | 0:38f51c4f7655 | 91 | |
Dannis_mbed | 0:38f51c4f7655 | 92 | |
Dannis_mbed | 0:38f51c4f7655 | 93 | void send() |
Dannis_mbed | 0:38f51c4f7655 | 94 | { |
Dannis_mbed | 0:38f51c4f7655 | 95 | if(CANBus.write(CANMessage(1226, &counter, 1))) |
Dannis_mbed | 0:38f51c4f7655 | 96 | { |
Dannis_mbed | 0:38f51c4f7655 | 97 | counter++; |
Dannis_mbed | 0:38f51c4f7655 | 98 | } |
Dannis_mbed | 0:38f51c4f7655 | 99 | } |
Dannis_mbed | 0:38f51c4f7655 | 100 | |
Dannis_mbed | 0:38f51c4f7655 | 101 | |
Dannis_mbed | 0:38f51c4f7655 | 102 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 103 | // Blink functions // |
Dannis_mbed | 0:38f51c4f7655 | 104 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 105 | void tActiveLedOff_cb(void) |
Dannis_mbed | 0:38f51c4f7655 | 106 | { |
Dannis_mbed | 0:38f51c4f7655 | 107 | Led1 = 0; |
Dannis_mbed | 0:38f51c4f7655 | 108 | } |
Dannis_mbed | 0:38f51c4f7655 | 109 | |
Dannis_mbed | 0:38f51c4f7655 | 110 | void tActiveLedOn_cb(void) |
Dannis_mbed | 0:38f51c4f7655 | 111 | { |
Dannis_mbed | 0:38f51c4f7655 | 112 | Led1 = 1; |
Dannis_mbed | 0:38f51c4f7655 | 113 | tActiveLedOff.detach(); |
Dannis_mbed | 0:38f51c4f7655 | 114 | tActiveLedOff.attach(&tActiveLedOff_cb, 0.05); |
Dannis_mbed | 0:38f51c4f7655 | 115 | } |
Dannis_mbed | 0:38f51c4f7655 | 116 | |
Dannis_mbed | 0:38f51c4f7655 | 117 | void tled2off_cb(void) |
Dannis_mbed | 0:38f51c4f7655 | 118 | { |
Dannis_mbed | 0:38f51c4f7655 | 119 | Led2 = 0; |
Dannis_mbed | 0:38f51c4f7655 | 120 | } |
Dannis_mbed | 0:38f51c4f7655 | 121 | |
Dannis_mbed | 0:38f51c4f7655 | 122 | void tled2on_cb(void) |
Dannis_mbed | 0:38f51c4f7655 | 123 | { |
Dannis_mbed | 0:38f51c4f7655 | 124 | Led2 = 1; |
Dannis_mbed | 0:38f51c4f7655 | 125 | tled2off.detach(); |
Dannis_mbed | 0:38f51c4f7655 | 126 | tled2off.attach(&tled2off_cb, 0.05); |
Dannis_mbed | 0:38f51c4f7655 | 127 | } |
Dannis_mbed | 0:38f51c4f7655 | 128 | |
Dannis_mbed | 0:38f51c4f7655 | 129 | void tReadSensor_cb(void) |
Dannis_mbed | 0:38f51c4f7655 | 130 | { |
Dannis_mbed | 0:38f51c4f7655 | 131 | sHeightSensor.vMeasureHeight(); |
Dannis_mbed | 0:38f51c4f7655 | 132 | Led4 = !Led4; |
Dannis_mbed | 0:38f51c4f7655 | 133 | } |
Dannis_mbed | 0:38f51c4f7655 | 134 | |
Dannis_mbed | 0:38f51c4f7655 | 135 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 136 | // main loop // |
Dannis_mbed | 0:38f51c4f7655 | 137 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 138 | int main() { |
Dannis_mbed | 0:38f51c4f7655 | 139 | debug.baud(115200); |
Dannis_mbed | 0:38f51c4f7655 | 140 | debug.printf("\033[2J"); |
Dannis_mbed | 0:38f51c4f7655 | 141 | debug.printf("\033[9;10fDevice ID:%i\r\n", DEVICE_ID); |
Dannis_mbed | 0:38f51c4f7655 | 142 | |
Dannis_mbed | 0:38f51c4f7655 | 143 | Led1 = 1; |
Dannis_mbed | 0:38f51c4f7655 | 144 | Led2 = 1; |
Dannis_mbed | 0:38f51c4f7655 | 145 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 146 | // schedule led events // |
Dannis_mbed | 0:38f51c4f7655 | 147 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 148 | tActiveLedOff.attach(&tActiveLedOn_cb, 0.05); |
Dannis_mbed | 0:38f51c4f7655 | 149 | tActiveLedOn.attach(&tActiveLedOn_cb, 2); |
Dannis_mbed | 0:38f51c4f7655 | 150 | tled2off.attach(&tled2on_cb, 0.05); |
Dannis_mbed | 0:38f51c4f7655 | 151 | tled2on.attach(&tled2on_cb, 1); |
Dannis_mbed | 0:38f51c4f7655 | 152 | tReadSensor.attach(&tReadSensor_cb, 0.09); // call sensor read approx. 11 times/sec. |
Dannis_mbed | 0:38f51c4f7655 | 153 | |
Dannis_mbed | 0:38f51c4f7655 | 154 | |
Dannis_mbed | 0:38f51c4f7655 | 155 | CANBus.frequency(250000); |
Dannis_mbed | 0:38f51c4f7655 | 156 | CANMessage msg; |
Dannis_mbed | 0:38f51c4f7655 | 157 | |
Dannis_mbed | 0:38f51c4f7655 | 158 | while(1) |
Dannis_mbed | 0:38f51c4f7655 | 159 | { |
Dannis_mbed | 0:38f51c4f7655 | 160 | if(CANBus.read(msg)) |
Dannis_mbed | 0:38f51c4f7655 | 161 | { |
Dannis_mbed | 0:38f51c4f7655 | 162 | switch(msg.id) |
Dannis_mbed | 0:38f51c4f7655 | 163 | { // Send system status if MainModule requests |
Dannis_mbed | 0:38f51c4f7655 | 164 | case REQ_STATUS: |
Dannis_mbed | 0:38f51c4f7655 | 165 | cStatus = 0xFF; // OK |
Dannis_mbed | 0:38f51c4f7655 | 166 | if(msg.data[0] == 00) CANBus.write(CANMessage(DEVICE_ID, &cStatus, 1)); |
Dannis_mbed | 0:38f51c4f7655 | 167 | wait_us(100); |
Dannis_mbed | 0:38f51c4f7655 | 168 | break; |
Dannis_mbed | 0:38f51c4f7655 | 169 | // process stepper data direction/steps |
Dannis_mbed | 0:38f51c4f7655 | 170 | case DEVICE_ID: |
Dannis_mbed | 0:38f51c4f7655 | 171 | if(msg.data[0] == 0xff) |
Dannis_mbed | 0:38f51c4f7655 | 172 | { |
Dannis_mbed | 0:38f51c4f7655 | 173 | sHeightSensor.setClearToSend(true); |
Dannis_mbed | 0:38f51c4f7655 | 174 | debug.printf("sensor clear"); |
Dannis_mbed | 0:38f51c4f7655 | 175 | //tActiveLedOn.attach(&tActiveLedOn_cb, 0.5); |
Dannis_mbed | 0:38f51c4f7655 | 176 | } |
Dannis_mbed | 0:38f51c4f7655 | 177 | else |
Dannis_mbed | 0:38f51c4f7655 | 178 | { |
Dannis_mbed | 0:38f51c4f7655 | 179 | sHeightSensor.setClearToSend(false); |
Dannis_mbed | 0:38f51c4f7655 | 180 | debug.printf("sensor stop send"); |
Dannis_mbed | 0:38f51c4f7655 | 181 | } |
Dannis_mbed | 0:38f51c4f7655 | 182 | //cStatus = 0xFF; |
Dannis_mbed | 0:38f51c4f7655 | 183 | //CANBus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // reply message received and executed |
Dannis_mbed | 0:38f51c4f7655 | 184 | //tActiveLedOn.attach(&tActiveLedOn_cb, 2); // indicate active |
Dannis_mbed | 0:38f51c4f7655 | 185 | break; |
Dannis_mbed | 0:38f51c4f7655 | 186 | |
Dannis_mbed | 0:38f51c4f7655 | 187 | // just dump received message (debug) |
Dannis_mbed | 0:38f51c4f7655 | 188 | default: |
Dannis_mbed | 0:38f51c4f7655 | 189 | debug.printf("Message id: %d\r\n", msg.id); |
Dannis_mbed | 0:38f51c4f7655 | 190 | debug.printf("Message length: %d\r\n", msg.len); |
Dannis_mbed | 0:38f51c4f7655 | 191 | for (i=0; i < msg.len; i++) |
Dannis_mbed | 0:38f51c4f7655 | 192 | { |
Dannis_mbed | 0:38f51c4f7655 | 193 | debug.printf("Message %d received: %d\r\n", i, msg.data[i]); |
Dannis_mbed | 0:38f51c4f7655 | 194 | } |
Dannis_mbed | 0:38f51c4f7655 | 195 | break; |
Dannis_mbed | 0:38f51c4f7655 | 196 | }//end switch |
Dannis_mbed | 0:38f51c4f7655 | 197 | }// end if |
Dannis_mbed | 0:38f51c4f7655 | 198 | |
Dannis_mbed | 0:38f51c4f7655 | 199 | wait(0.09); |
Dannis_mbed | 0:38f51c4f7655 | 200 | } |
Dannis_mbed | 0:38f51c4f7655 | 201 | } |
Dannis_mbed | 0:38f51c4f7655 | 202 | |
Dannis_mbed | 0:38f51c4f7655 | 203 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 204 | // EOF // |
Dannis_mbed | 0:38f51c4f7655 | 205 | ////////////////////////////////////////////////////////////////////////////////////// |
Dannis_mbed | 0:38f51c4f7655 | 206 |