Jogpad for the Mach3 CNC control software with Maple Mini board (STM32F103CBT6).

Dependencies:   mbed mbed-MapleMini USBDevice_STM32F103

Mach3 Jogpad

Jogpad for the Mach3 CNC control software with Maple Mini board (STM32F103CBT6). Have a look also at the MapleMini USBSerial. Communication with the PC and power supply is over a USB cable. Since the Jogpad is a USB HID (Human Interface Device) no USB driver has to be installed to the PC (as such is available on each MS Windows PC by default).

If you'd like to build a USBJoystick Device have a look at Wim's wonderful page.

Schematic

https://os.mbed.com/media/uploads/hudakz/jogpad_schematic_01.png

Board design

https://os.mbed.com/media/uploads/hudakz/jogpad_board_01.png

Because zip files cannot be uploaded to mbed wiki pages anymore, in order to download the zipped eagle project files right-click on the link and select Save link as.... Once saved to your local drive, change the extension from png to zip and then unzip.

Board assembled

https://os.mbed.com/media/uploads/hudakz/jogpad_device_01.jpg

Committer:
hudakz
Date:
Mon Mar 16 15:05:47 2020 +0000
Revision:
0:d106138b6f2b
Jogpad for Mach3 CNC software with STM32F103 (Maple Mini board).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:d106138b6f2b 1 #include "MapleMini.h"
hudakz 0:d106138b6f2b 2 #include "mbed.h"
hudakz 0:d106138b6f2b 3 #include "USBKeyboard.h"
hudakz 0:d106138b6f2b 4
hudakz 0:d106138b6f2b 5 #define POS_MIN 20000
hudakz 0:d106138b6f2b 6 #define POS_MAX 50000
hudakz 0:d106138b6f2b 7
hudakz 0:d106138b6f2b 8 DigitalOut led(PB_1); // LED
hudakz 0:d106138b6f2b 9 DigitalOut usbEn(PB_9); // Used for connecting/disconnecting the 1k5 resistor to/from the USB DP pin
hudakz 0:d106138b6f2b 10 AnalogIn vRx(PB_0); // Joystick Rx pin
hudakz 0:d106138b6f2b 11 AnalogIn vRy(PA_7); // Joystick Ry pin
hudakz 0:d106138b6f2b 12 DigitalIn btnCtrl(PB_12, PullDown); // Ctrl key
hudakz 0:d106138b6f2b 13 DigitalIn btnShift(PB_14 , PullDown); // Shift key
hudakz 0:d106138b6f2b 14 DigitalIn btnUp(PA_10, PullDown); // PageUp key (Z-up)
hudakz 0:d106138b6f2b 15 DigitalIn btnDown(PA_1, PullDown); // PageDown key (Z-down)
hudakz 0:d106138b6f2b 16 uint8_t modifier = 0;
hudakz 0:d106138b6f2b 17 USBKeyboard* keyboard;
hudakz 0:d106138b6f2b 18
hudakz 0:d106138b6f2b 19 /**
hudakz 0:d106138b6f2b 20 * @brief
hudakz 0:d106138b6f2b 21 * @note
hudakz 0:d106138b6f2b 22 * @param
hudakz 0:d106138b6f2b 23 * @retval
hudakz 0:d106138b6f2b 24 */
hudakz 0:d106138b6f2b 25 int main()
hudakz 0:d106138b6f2b 26 {
hudakz 0:d106138b6f2b 27 confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock)
hudakz 0:d106138b6f2b 28 led = 1;
hudakz 0:d106138b6f2b 29 keyboard = new USBKeyboard();
hudakz 0:d106138b6f2b 30 usbEn = 0; //Keep the on-board 1k5 resistor connected to USB DP pin
hudakz 0:d106138b6f2b 31 while (1) {
hudakz 0:d106138b6f2b 32 if (btnShift == 1) {
hudakz 0:d106138b6f2b 33 modifier = KEY_SHIFT;
hudakz 0:d106138b6f2b 34 }
hudakz 0:d106138b6f2b 35 else
hudakz 0:d106138b6f2b 36 if (btnCtrl == 1) {
hudakz 0:d106138b6f2b 37 modifier = KEY_CTRL;
hudakz 0:d106138b6f2b 38 }
hudakz 0:d106138b6f2b 39 else {
hudakz 0:d106138b6f2b 40 modifier = 0;
hudakz 0:d106138b6f2b 41 }
hudakz 0:d106138b6f2b 42
hudakz 0:d106138b6f2b 43 if (vRy.read_u16() < POS_MIN) {
hudakz 0:d106138b6f2b 44 keyboard->keyCode(LEFT_ARROW, modifier, false);
hudakz 0:d106138b6f2b 45 }
hudakz 0:d106138b6f2b 46 else
hudakz 0:d106138b6f2b 47 if (vRy.read_u16() > POS_MAX) {
hudakz 0:d106138b6f2b 48 keyboard->keyCode(RIGHT_ARROW, modifier, false);
hudakz 0:d106138b6f2b 49 }
hudakz 0:d106138b6f2b 50 else
hudakz 0:d106138b6f2b 51 if (vRx.read_u16() < POS_MIN) {
hudakz 0:d106138b6f2b 52 keyboard->keyCode(DOWN_ARROW, modifier, false);
hudakz 0:d106138b6f2b 53 }
hudakz 0:d106138b6f2b 54 else
hudakz 0:d106138b6f2b 55 if (vRx.read_u16() > POS_MAX) {
hudakz 0:d106138b6f2b 56 keyboard->keyCode(UP_ARROW, modifier, false);
hudakz 0:d106138b6f2b 57 }
hudakz 0:d106138b6f2b 58 else
hudakz 0:d106138b6f2b 59 if (btnUp == 1) {
hudakz 0:d106138b6f2b 60 keyboard->keyCode(KEY_PAGE_UP, modifier, false);
hudakz 0:d106138b6f2b 61 }
hudakz 0:d106138b6f2b 62 else
hudakz 0:d106138b6f2b 63 if (btnDown == 1) {
hudakz 0:d106138b6f2b 64 keyboard->keyCode(KEY_PAGE_DOWN, modifier, false);
hudakz 0:d106138b6f2b 65 }
hudakz 0:d106138b6f2b 66 else {
hudakz 0:d106138b6f2b 67 keyboard->keyCode(0, 0); // Release the key(s)
hudakz 0:d106138b6f2b 68 }
hudakz 0:d106138b6f2b 69 }
hudakz 0:d106138b6f2b 70 }