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.
main.cpp
- Committer:
- fbd38
- Date:
- 2018-12-06
- Revision:
- 25:3d3ebfd0a73f
- Parent:
- 24:59caeaa9f82d
- Child:
- 26:bf432a28d0c6
File content as of revision 25:3d3ebfd0a73f:
/* * Rotator program * * Version 1.0, December 2, 2018 * for Nucleo32: L432 * */ #define DEBUG_MODE 3 // 0= no Debug, 1 = BT only, 2 = PC only, 3 = BT + PC #include "Crealab.h" Serial bt_uart(PA_9, PA_10); Serial pc_uart(USBTX, USBRX); // ---------------- Local global variables -------------- int UICommad=0; // New Command from the UI int32_t CSpeed=0; // Current Speed int32_t CMod=0; // Current Mode: 0: Stop; 1: Run; -1: Zero int BTControl=0; // Control taken by Bluetooth char ExecCommand; // Command to be execute // ---------------- PIN DEFINITIONS --------------------- DigitalOut myled(LED1); // Blinking LED //InterruptIn buttonBox(PB_1); // --- Define the Four PINs & Time of movement used for Motor drive ----- Motor motorRotator(PA_8, PA_11, PB_5, PB_4, 1000); // --- Define the LEDS int NoLED; // No LED DigitalOut LedRouge(PB_7); DigitalOut LedJaune(PB_0); DigitalOut LedVerte(PA_12); // --- Define the Speed Potentiometer AnalogIn SpeedPlus(PA_7); AnalogIn SpeedMoins(PA_6); // --- Define the three mode switch DigitalIn ControlZero(PA_0, PullUp); DigitalIn ControlStop(PA_1, PullUp); DigitalIn ControlRun(PA_3, PullUp); // ------------ Process ---------------------------------- Ticker HWUI; void help() // Display list of Commands { DEBUG("List of commands:\n\r"); DEBUG(" h --> Help, display list of cammands\n\r"); } /* Stop all processes */ void stop_all() { motorRotator.Stop(); } int32_t LireSpeed() { double inp; double inm; int32_t TargetSpeed; inp=(double) SpeedPlus.read(); inm=(double) SpeedMoins.read(); TargetSpeed=int((inp-inm)*15.0); if (TargetSpeed > 9) TargetSpeed = 9; if (TargetSpeed < -9) TargetSpeed = -9; return(TargetSpeed); } int32_t LireControl() { if (ControlStop==0) return(0); if (ControlRun==0) return(1); if (ControlZero==0) return(-1); return(0); } void TestHW() { LedRouge=1; wait(0.5); LedJaune=1; wait(0.5); LedVerte=1; wait(0.5); LedRouge=0; wait(0.5); LedJaune=0; wait(0.5); LedVerte=0; wait(0.5); } void HardwareUI() { // Display Motor status with Green and Yellow LEDs if (!NoLED) { if (motorRotator.GetState() == Motor_RUN) LedVerte=1; else if (motorRotator.GetState() == Motor_ZERO) LedVerte = !LedVerte; else LedVerte=0; if (motorRotator.direction==CLOCKWISE) LedJaune=1; else LedJaune=0; LedRouge=BTControl; } } char ComposeCommandFromUI() { char NewUICommand='-'; // Null command if (!BTControl) { int32_t TSp; int32_t TMod; int32_t TSpeed; int32_t TDir; TSp=LireSpeed(); if (TSp>0) TDir=CLOCKWISE; if (TSp<0) TDir=COUNTERCLOCKWISE; TSpeed=abs(TSp); TMod=LireControl(); if (CMod!=TMod) { if (TMod==0) NewUICommand = 'S'; if (TMod==1) { if (TDir == CLOCKWISE) NewUICommand='R'; else NewUICommand='L'; } if (TMod==-1) NewUICommand = 'Z'; CMod=TMod; } else { if (TSpeed!=CSpeed) { if (TSpeed==0)NewUICommand = 'S'; else NewUICommand = char('0'+TSpeed); CSpeed=TSpeed; } } } return (NewUICommand); } /* Message */ void message() { DEBUG("-------------------------------------------------------\n\r"); DEBUG("-------------------------------------------------------\n\r"); } /* Main Routine */ int main() { myled = 1; // To see something is alive bool flaghelp; // -- Uncomment to program the HC-06 Module // DEBUG("AT+NAMECreaRoll_x"); // wait(10); if (ControlZero==0) NoLED=1; else { NoLED=0; TestHW(); } DEBUG("-------------------------------------------------------\n\r"); DEBUG("----- CreaRoll version 1.0 -----\n\r"); DEBUG("----- faite par fbd38 le 2 Dec 2018 -----\n\r"); DEBUG("-------------------------------------------------------\n\r"); // DEBUG("SystemCoreClock = %d Hz =\n\r", SystemCoreClock); // DEBUG("Wait 2s\n\r"); myled = 0; // Real stuff starts here motorRotator.setSpeed(20.0); /* Default */ // Install UI HWUI.attach(&HardwareUI, 0.3); while(1) { ExecCommand='-'; // Clear The Command List /* Wait Until some command is in the pipe * eitheir from BT module or HWUI */ if (bt_uart.readable()) { char BTlc; // BT Character to execute BTlc = bt_uart.getc(); if (BTlc=='!') { BTControl = 1; } else { if (BTlc=='.') { BTControl=0; } else if (BTControl) ExecCommand=BTlc; } } // In cas of not controlled by BT, get command from the HW UI if (!BTControl) { ExecCommand=ComposeCommandFromUI(); } // ------ Test according with the receved command if (ExecCommand!='-') { DEBUG("Commande Recue: [%c]", ExecCommand); flaghelp = false; switch (ExecCommand) { case 'h': help(); flaghelp=true; CASE('R', "Infinite Clockwise", motorRotator.RunInfinite(CLOCKWISE); ) CASE('L', "Infinite Counterclockwise", motorRotator.RunInfinite(COUNTERCLOCKWISE); ) CASE('Z', "Go Back to Zero", motorRotator.SetZero(); ) CASE('z', "Define the Zero", motorRotator.DefineZero(); ) CASE('r', "15deg Clockwise", motorRotator.RunDegrees(CLOCKWISE, (float)15.0); ) CASE('l', "15deg Counterclockwise", motorRotator.RunDegrees(COUNTERCLOCKWISE, (float)15.0); ) CASE('1', "Speed 10m/t", motorRotator.setSpeed(600.0); ) CASE('2', "Speed 2m/t", motorRotator.setSpeed(120.0); ) CASE('3', "Speed 1m/t", motorRotator.setSpeed(60.0); ) CASE('4', "Speed 30s/t", motorRotator.setSpeed(30.0); ) CASE('5', "Speed 20s/t", motorRotator.setSpeed(20.0); ) CASE('6', "Speed 15s/t", motorRotator.setSpeed(15.0); ) CASE('7', "Speed 10s/t",motorRotator.setSpeed(10.0); ) CASE('8', "Speed 7s/t",motorRotator.setSpeed(7.0); ) CASE('9', "Speed 5s/t",motorRotator.setSpeed(5.0); ) CASE('0', "STOP ", stop_all(); ) CASE('S', "STOP ", stop_all(); ) CASE('?', "Mistery", message(); ) default : DEBUG("invalid command; use: 'h' for help()"); } } } }