analog module solar on foils project
Dependencies: mbed
Fork of CAN_module_analog by
Diff: main.cpp
- Revision:
- 0:38f51c4f7655
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Aug 11 08:41:49 2015 +0000 @@ -0,0 +1,206 @@ +////////////////////////////////////////////////////////////////////////////////////// +// // +// File : main.cpp // +// Version : 0.1 // +// Initial : 17 June 2015 // +// Author : Dany Brugman // +// Comment : CANbus module analog sensor // +// // +// // +// Changelog : // +// Date: Name: Comment: // +// 19/06/2015 DNB First version // +// // +////////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////// +// includes // +////////////////////////////////////////////////////////////////////////////////////// +#include "mbed.h" +#include "PinDetect.h" +#include "sensor.h" + +////////////////////////////////////////////////////////////////////////////////////// +// device ID // +// CAN module ultrasonic heightsensor port side define HEIGHT_PORT // +// CAN module ultrasonic heightsensor starboard side define HEIGHT_STARB // +////////////////////////////////////////////////////////////////////////////////////// +#define HEIGHT_PORT +////////////////////////////////////////////////////////////////////////////////////// +// defines // +////////////////////////////////////////////////////////////////////////////////////// +#ifdef HEIGHT_PORT + #define DEVICE_ID 201 + #define REQ_STATUS 2003 +#endif +#ifdef HEIGHT_STARB + #define DEVICE_ID 202 + #define REQ_STATUS 2004 +#endif + +////////////////////////////////////////////////////////////////////////////////////// +// // +////////////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////////////// +// interrupts // +////////////////////////////////////////////////////////////////////////////////////// +Ticker ticker; +Ticker tActiveLedOn; +Ticker tled2on; +Ticker tReadSensor; + +Timeout tActiveLedOff; +Timeout tled2off; + +////////////////////////////////////////////////////////////////////////////////////// +// port declaration // +////////////////////////////////////////////////////////////////////////////////////// +DigitalOut Led1(LED1); +DigitalOut Led2(LED2); +DigitalOut Led4(LED4); + +AnalogIn sensorPort(p19); +Sensor sHeightSensor; +CAN CANBus(p30, p29); + +Serial debug(USBTX, USBRX); + +////////////////////////////////////////////////////////////////////////////////////// +// global variables // +////////////////////////////////////////////////////////////////////////////////////// +char counter = 0; +char cMessage, cStatus; + +int i; + +float fValue, fDistance; + + +////////////////////////////////////////////////////////////////////////////////////// +// functions declarations // +////////////////////////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////////////////////////// +// functions // +////////////////////////////////////////////////////////////////////////////////////// + + + +void send() +{ + if(CANBus.write(CANMessage(1226, &counter, 1))) + { + counter++; + } +} + + +////////////////////////////////////////////////////////////////////////////////////// +// Blink functions // +////////////////////////////////////////////////////////////////////////////////////// +void tActiveLedOff_cb(void) +{ + Led1 = 0; +} + +void tActiveLedOn_cb(void) +{ + Led1 = 1; + tActiveLedOff.detach(); + tActiveLedOff.attach(&tActiveLedOff_cb, 0.05); +} + +void tled2off_cb(void) +{ + Led2 = 0; +} + +void tled2on_cb(void) +{ + Led2 = 1; + tled2off.detach(); + tled2off.attach(&tled2off_cb, 0.05); +} + +void tReadSensor_cb(void) +{ + sHeightSensor.vMeasureHeight(); + Led4 = !Led4; +} + +////////////////////////////////////////////////////////////////////////////////////// +// main loop // +////////////////////////////////////////////////////////////////////////////////////// +int main() { + debug.baud(115200); + debug.printf("\033[2J"); + debug.printf("\033[9;10fDevice ID:%i\r\n", DEVICE_ID); + + Led1 = 1; + Led2 = 1; +////////////////////////////////////////////////////////////////////////////////////// +// schedule led events // +////////////////////////////////////////////////////////////////////////////////////// + tActiveLedOff.attach(&tActiveLedOn_cb, 0.05); + tActiveLedOn.attach(&tActiveLedOn_cb, 2); + tled2off.attach(&tled2on_cb, 0.05); + tled2on.attach(&tled2on_cb, 1); + tReadSensor.attach(&tReadSensor_cb, 0.09); // call sensor read approx. 11 times/sec. + + + CANBus.frequency(250000); + CANMessage msg; + + while(1) + { + if(CANBus.read(msg)) + { + switch(msg.id) + { // Send system status if MainModule requests + case REQ_STATUS: + cStatus = 0xFF; // OK + if(msg.data[0] == 00) CANBus.write(CANMessage(DEVICE_ID, &cStatus, 1)); + wait_us(100); + break; + // process stepper data direction/steps + case DEVICE_ID: + if(msg.data[0] == 0xff) + { + sHeightSensor.setClearToSend(true); + debug.printf("sensor clear"); + //tActiveLedOn.attach(&tActiveLedOn_cb, 0.5); + } + else + { + sHeightSensor.setClearToSend(false); + debug.printf("sensor stop send"); + } + //cStatus = 0xFF; + //CANBus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // reply message received and executed + //tActiveLedOn.attach(&tActiveLedOn_cb, 2); // indicate active + break; + + // just dump received message (debug) + default: + debug.printf("Message id: %d\r\n", msg.id); + debug.printf("Message length: %d\r\n", msg.len); + for (i=0; i < msg.len; i++) + { + debug.printf("Message %d received: %d\r\n", i, msg.data[i]); + } + break; + }//end switch + }// end if + + wait(0.09); + } +} + +////////////////////////////////////////////////////////////////////////////////////// +// EOF // +////////////////////////////////////////////////////////////////////////////////////// +