keyboard

Dependencies:   mbed

Committer:
bruce_0205
Date:
Fri Dec 15 12:44:52 2017 +0000
Revision:
0:6e42a1ce0351
h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bruce_0205 0:6e42a1ce0351 1 #include "mbed.h"
bruce_0205 0:6e42a1ce0351 2 #include "USBKeyboard.h"
bruce_0205 0:6e42a1ce0351 3
bruce_0205 0:6e42a1ce0351 4 //LED1: NUM_LOCK, LED2: CAPS_LOCK, LED3: SCROLL_LOCK
bruce_0205 0:6e42a1ce0351 5 BusOut leds(LED1, LED2, LED3); //keyboard on/off set
bruce_0205 0:6e42a1ce0351 6 DigitalIn start(PTC1); // Configure SW2 pin as input function is start
bruce_0205 0:6e42a1ce0351 7 DigitalIn stop(PTB17); // Configure SW3 pin as input function is stop
bruce_0205 0:6e42a1ce0351 8 USBKeyboard keyboard;
bruce_0205 0:6e42a1ce0351 9 Serial pc(USBTX, USBRX);
bruce_0205 0:6e42a1ce0351 10
bruce_0205 0:6e42a1ce0351 11 #define amount 5
bruce_0205 0:6e42a1ce0351 12 #define delay_MAX_bit 3
bruce_0205 0:6e42a1ce0351 13
bruce_0205 0:6e42a1ce0351 14 void user_button_send(char [],int []); //send keyboard key
bruce_0205 0:6e42a1ce0351 15 void user_button_input(char [],int []); //client software inupt keyboard key and delay
bruce_0205 0:6e42a1ce0351 16
bruce_0205 0:6e42a1ce0351 17 long int timer = 0;
bruce_0205 0:6e42a1ce0351 18
bruce_0205 0:6e42a1ce0351 19 int main() {
bruce_0205 0:6e42a1ce0351 20 char user_button_key[amount]; //user input key
bruce_0205 0:6e42a1ce0351 21 int user_button_delay[amount]; //user input key delay time
bruce_0205 0:6e42a1ce0351 22
bruce_0205 0:6e42a1ce0351 23 while (!keyboard.configured()) { // wait until keyboard is configured
bruce_0205 0:6e42a1ce0351 24 }
bruce_0205 0:6e42a1ce0351 25
bruce_0205 0:6e42a1ce0351 26 while (1) {
bruce_0205 0:6e42a1ce0351 27 leds = keyboard.lockStatus(); //open keyboard
bruce_0205 0:6e42a1ce0351 28
bruce_0205 0:6e42a1ce0351 29 if(pc.readable()){
bruce_0205 0:6e42a1ce0351 30 user_button_input(user_button_key,user_button_delay);
bruce_0205 0:6e42a1ce0351 31 }
bruce_0205 0:6e42a1ce0351 32
bruce_0205 0:6e42a1ce0351 33 if(start.read() == 0){ //wait SW2 button press
bruce_0205 0:6e42a1ce0351 34 while(stop.read() != 0){ //wait SW3 button press
bruce_0205 0:6e42a1ce0351 35 user_button_send(user_button_key,user_button_delay);
bruce_0205 0:6e42a1ce0351 36 timer++;
bruce_0205 0:6e42a1ce0351 37 for(double i=0;i<1;i=i+0.1){ //count 1 second time and wait SW3 button press
bruce_0205 0:6e42a1ce0351 38 if(stop.read() == 0) break;
bruce_0205 0:6e42a1ce0351 39 wait(0.1);
bruce_0205 0:6e42a1ce0351 40 }
bruce_0205 0:6e42a1ce0351 41 }
bruce_0205 0:6e42a1ce0351 42 timer = 0;
bruce_0205 0:6e42a1ce0351 43 }
bruce_0205 0:6e42a1ce0351 44 }
bruce_0205 0:6e42a1ce0351 45 }
bruce_0205 0:6e42a1ce0351 46
bruce_0205 0:6e42a1ce0351 47 void user_button_send(char key[],int delay[]){
bruce_0205 0:6e42a1ce0351 48 for(int i=0;i<amount;i++){
bruce_0205 0:6e42a1ce0351 49 if((timer%delay[i]) == 0)
bruce_0205 0:6e42a1ce0351 50 keyboard._putc(key[i]);
bruce_0205 0:6e42a1ce0351 51 }
bruce_0205 0:6e42a1ce0351 52 }
bruce_0205 0:6e42a1ce0351 53
bruce_0205 0:6e42a1ce0351 54 void user_button_input(char input_key[],int input_delay[]){
bruce_0205 0:6e42a1ce0351 55 char client_input_char[delay_MAX_bit];
bruce_0205 0:6e42a1ce0351 56 int client_input_char_count = 0 , bit_count = 1 , bit_set;
bruce_0205 0:6e42a1ce0351 57
bruce_0205 0:6e42a1ce0351 58 for(int i =0;i<delay_MAX_bit;i++){
bruce_0205 0:6e42a1ce0351 59 if(i > 0)
bruce_0205 0:6e42a1ce0351 60 bit_count = bit_count * 10;
bruce_0205 0:6e42a1ce0351 61 }
bruce_0205 0:6e42a1ce0351 62
bruce_0205 0:6e42a1ce0351 63 bit_set = bit_count;
bruce_0205 0:6e42a1ce0351 64
bruce_0205 0:6e42a1ce0351 65 for(int i=0;i<amount;i++){ //receive key value
bruce_0205 0:6e42a1ce0351 66 input_key[i] = pc.getc();
bruce_0205 0:6e42a1ce0351 67 if(input_key[i] == '0')
bruce_0205 0:6e42a1ce0351 68 input_key[i] = NULL;
bruce_0205 0:6e42a1ce0351 69 }
bruce_0205 0:6e42a1ce0351 70
bruce_0205 0:6e42a1ce0351 71 for(int i=0;i<amount;i++){ //receive delay value
bruce_0205 0:6e42a1ce0351 72 for(int j=0;j<delay_MAX_bit;j++){
bruce_0205 0:6e42a1ce0351 73 client_input_char[j] = pc.getc();
bruce_0205 0:6e42a1ce0351 74 client_input_char_count = client_input_char_count + (client_input_char[j] - '0') * bit_count;
bruce_0205 0:6e42a1ce0351 75 bit_count = bit_count / 10;
bruce_0205 0:6e42a1ce0351 76 }
bruce_0205 0:6e42a1ce0351 77
bruce_0205 0:6e42a1ce0351 78 input_delay[i] = client_input_char_count;
bruce_0205 0:6e42a1ce0351 79 client_input_char_count = 0;
bruce_0205 0:6e42a1ce0351 80 bit_count = bit_set;
bruce_0205 0:6e42a1ce0351 81 }
bruce_0205 0:6e42a1ce0351 82 }