Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 10:4b0101c6763c, committed 2020-04-02
- Comitter:
- alflind
- Date:
- Thu Apr 02 11:42:45 2020 +0000
- Parent:
- 9:3211e88e30a5
- Commit message:
- Hello;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Feb 08 13:16:55 2019 +0000 +++ b/main.cpp Thu Apr 02 11:42:45 2020 +0000 @@ -33,7 +33,9 @@ #if defined(BOARD1) const unsigned int RX_ID = 0x100; const unsigned int TX_ID = 0x101; + #else + const unsigned int RX_ID = 0x101; const unsigned int TX_ID = 0x100; #endif @@ -41,8 +43,11 @@ #include "mbed.h" #include "CANMsg.h" -Serial pc(USBTX, USBRX); +//Serial pc(USBTX, USBRX); +Serial pc(SERIAL_TX, SERIAL_RX); CAN can(PB_8, PB_9); // CAN Rx pin name, CAN Tx pin name +//CAN can(PA_11, PA_12); // Use for RC-car +DigitalIn button(PC_13); //CAN can(p30, p29); // CAN Rx pin name, CAN Tx pin name CANMsg rxMsg; CANMsg txMsg; @@ -51,6 +56,15 @@ uint8_t counter = 0; AnalogIn analogIn(A0); float voltage; +char message; +bool LED; +bool brake; +float a; +float b; +char c; +float mid = 0.5; +float p_DC = 0.05; +float p_Servo= 0.05; /** * @brief Prints CAN message to PC's serial terminal @@ -70,6 +84,126 @@ pc.printf("\r\n"); } +float decodeTurn(char c, float floatA){ + a=floatA; + switch (c){ + case 'l': + c = '\0'; + if (LED == false){ + pc.printf("LED ON\n"); + led = 1; + LED = true; + } + else { + pc.printf("LED OFF\n"); + led = 0; + LED = false; + } + break; + + case 'q': + c = '\0'; + led = 0; // OFF + a = 0; + pc.printf("Hard right %f \r\n",a); + //moveTurnServo(a); + break; + + case 'e': + c = '\0'; + led = 1; // ON + a = 1; + pc.printf("Hard right %f \r\n",a); + //moveTurnServo(a); + break; + + case 'r': + c = '\0'; + a=mid; + pc.printf("Straightening up %f \r\n",a); + //moveTurnServo(a); + break; + + case 'a': + c = '\0'; + if(a > 0){ + a = a - p_Servo; + pc.printf("Turning left %f \r\n",a); + //moveTurnServo(a); + } + else{ + pc.printf("Servo at max left"); + } + break; + + case 'd': + c = '\0'; + if(a < 1){ + a = a + p_Servo; + pc.printf("Turning right %f \r\n",a); + //moveTurnServo(a); + } + else{ + pc.printf("Servo at max right"); + } + break; + + + } + return a; +} + +float decodeDC(char c, float floatB){ + b=floatB; + switch (c){ + case 'w': + c = '\0'; + if(b < 1){ + b = b + p_DC; + pc.printf("Accelerating %f \r\n",b); + //speedDCMotor(b); + } + else{ + pc.printf("Motor at max power"); + } + break; + + case 's': + c = '\0'; + if(b > 0){ + b = b - p_DC; + pc.printf("Deaccelerating %f \r\n",b); + //speedDCMotor(b); + } + else{ + pc.printf("Motor at max power"); + } + break; + + case 'f': + c = '\0'; + b = mid; + pc.printf("Stopping DC Motor %f \r\n",b); + //speedDCMotor(b); + break; + + case 'b': + c = '\0'; + if (brake == false){ + pc.printf("Breaking\n"); + //moveBrakeServo(1); + brake = true; + } + else { + pc.printf("Releasing breaking\n"); + //moveBrakeServo(mid); + brake = false; + } + } + return b; +} + + /** * @brief Handles received CAN messages * @note Called on 'CAN message received' interrupt. @@ -87,11 +221,14 @@ // extract data from the received CAN message // in the same order as it was added on the transmitter side rxMsg >> counter; - rxMsg >> voltage; + rxMsg >> voltage; + txMsg << message; pc.printf(" counter = %d\r\n", counter); pc.printf(" voltage = %e V\r\n", voltage); + pc.printf(" message = %s \r\n", message); } timer.start(); // to transmit next message in main + pc.printf("-------------------------------------\r\n"); } @@ -102,31 +239,42 @@ * @retval */ int main(void) -{ +{ + a = mid; + b = mid; pc.baud(9600); // set serial speed can.frequency(1000000); // set CAN bit rate to 1Mbps can.filter(RX_ID, 0xFFF, CANStandard, 0); // set filter #0 to accept only standard messages with ID == RX_ID can.attach(onCanReceived); // attach ISR to handle received messages - -#if defined(BOARD1) led = ON; // turn the LED on timer.start(); // start timer pc.printf("CAN_Hello board #1\r\n"); -#else - led = OFF; // turn LED off - pc.printf("CAN_Hello board #2\r\n"); -#endif + while(1) { - if(timer.read_ms() >= 2000) { // check for timeout + c = pc.getc(); // Read hyperterminal1 + a = decodeTurn(c,a); + b = decodeDC(c,b); + pc.printf("a %f \r\n",a); + pc.printf("Pressed %c \r\n",c); + if(!button){ + led = 1; // ON + wait(0.05); + led = 0; // ON + wait(0.05); + } + + if(timer.read_ms() >= 200) { // check for timeout timer.stop(); // stop timer timer.reset(); // reset timer counter++; // increment counter voltage = analogIn * 3.3f; // read the small drift voltage from analog input + voltage = a; txMsg.clear(); // clear Tx message storage txMsg.id = TX_ID; // set ID // append data (total data length must not exceed 8 bytes!) txMsg << counter; // one byte txMsg << voltage; // four bytes + txMsg << message; // bytes if(can.write(txMsg)) { // transmit message led = OFF; // turn the LED off @@ -135,10 +283,13 @@ pc.printf("CAN message sent\r\n"); printMsg(txMsg); pc.printf(" counter = %d\r\n", counter); - pc.printf(" voltage = %e V\r\n", voltage); + pc.printf(" value = %e \r\n", voltage); + pc.printf(" message = %s \r\n", message); } else pc.printf("Transmission error\r\n"); + pc.printf("-------------------------------------\r\n"); } + //timer.start(); // start timer } }