Application using FRDM-K64F board to emulate USB keyboard. When one of two buttons (present on the board) are pressed, predefined text is printed (as if it was input with a keyboard).

Dependencies:   USBDevice mbed

Fork of frdm_USB-HID-Mouse-Keyboard_auto by FRDM-K64F Code Share

Files at this revision

API Documentation at this revision

Comitter:
jaknaw
Date:
Mon Dec 18 17:33:47 2017 +0000
Parent:
0:92846b9895f1
Commit message:
Use FRDM-K64F board to simulate USB keyboard and print predefined text using interrupts when one of two buttons available on the board are pressed.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Dec 31 17:24:55 2015 +0000
+++ b/main.cpp	Mon Dec 18 17:33:47 2017 +0000
@@ -1,21 +1,83 @@
+/*
+ * SiSK-FRDM-K64F-USB-Keyboard
+ *
+ * Application written for "Standardy i Systemy Komunikacyjne" (SiSK) laboratory
+ * classes conducted at AGH UST, Faculty of Computer Science, Electronics and
+ * Telecommunications.
+ *
+ * This software presents interrupts handling and USB Keyboard emulation using
+ * FRDM-K64F board.
+ * 
+ * User is encouradged to change "print_txt_sw2" and "print_txt_sw3" functions,
+ * in order to define one's own strings that are going to be printed when SW2
+ * or SW3 buttons are pressed on FRDM-K64F board.
+ *
+ * Important! After programming the FRDM-K64F board, remember to connect it to
+ * the PC using "K64 USB" port and not "SDA USB" port. 
+ *
+ * Author: Jakub Nawała <jakub.tadeusz.nawala@gmail.com>
+ */
+
 #include "mbed.h"
 #include "USBMouseKeyboard.h"
 
-DigitalOut led(LED1);
-USBMouseKeyboard key_mouse;
+/* Create interrupts for handling buttons press events */
+InterruptIn button_sw2(SW2);
+InterruptIn button_sw3(SW3);
+
+/* Create green LED object */
+DigitalOut green_led(LED_GREEN);
+
+/* Create USB keyboard object */
+USBKeyboard frdm_keyboard;
+
+/* Define global flags for control of prints connected with button presses */
+bool sw2_pressed = false;
+bool sw3_pressed = false;
 
+/* Interrupt handlers for buttons press events */
+void sw2_int_handler() {
+    sw2_pressed = true;
+    green_led = !green_led;
+}
+
+void sw3_int_handler() {
+    sw3_pressed = true;
+    green_led = !green_led;
+}
+
+/* Functions for printing a text bonded with each button */
+void print_txt_sw2() {
+    frdm_keyboard.printf("foo\n\r");
+}
+
+void print_txt_sw3() {
+    frdm_keyboard.printf("bar\n\r");
+}
+
+/* Main body of the application */
 int main(void) {
-    while (1) {
-        key_mouse.move(60, 0);
-        key_mouse.doubleClick();
-        key_mouse.keyCode(KEY_CAPS_LOCK);
-        key_mouse.printf("hello world from frdm-k64f. \n");
-        wait(2);
-        key_mouse.move(-60, 0);
-        key_mouse.doubleClick();
-        key_mouse.keyCode(KEY_CAPS_LOCK);
-        key_mouse.printf("hello world from frdm-k64f. \n");
-        led = ((key_mouse.lockStatus() & 0x2) >> 1); /* second bit is caps lock */
-        wait(2);
+    /* Initialize LED */
+    green_led = 0;
+    
+    /* Setup interrupts for falling edge detected on the buttons pins */
+    button_sw2.fall(&sw2_int_handler);
+    button_sw3.fall(&sw3_int_handler);
+    
+    /* Check what button was pressed and print appropriate text */
+    while (true) {
+        if(sw2_pressed) {
+            print_txt_sw2();
+            sw2_pressed = false;
+        }
+        if(sw3_pressed) {
+            print_txt_sw3();
+            sw3_pressed = false;
+        }
+        
+        /* Wait for interrupts */
+        wait(0.5f);
     }
+
+    /* This place shall never be reached! */
 }