analog module solar on foils project

Dependencies:   mbed

Fork of CAN_module_analog by Dannis Brugman

Committer:
Dannis_mbed
Date:
Tue Aug 11 08:41:49 2015 +0000
Revision:
0:38f51c4f7655
presentation version

Who changed what in which revision?

UserRevisionLine numberNew 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