110 lines
3.3 KiB
C++
110 lines
3.3 KiB
C++
/**
|
|
* Dennis Gunia (c) 2023
|
|
*
|
|
* USB Keyboard for Worship song-switching
|
|
*
|
|
*
|
|
* Designed for Arduino Pro Micro
|
|
*
|
|
* Use pin 0 and 2 as inputs. Connect Switches to Ground.
|
|
*
|
|
* You may not use this file except in compliance with the License.
|
|
* A copy of the License is located at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* or in the "license" file accompanying this file. This file is distributed
|
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
|
* express or implied. See the License for the specific language governing
|
|
* permissions and limitations under the License.
|
|
*/
|
|
|
|
#include "DigiKeyboard.h"
|
|
|
|
#define SW_1_PIN 0
|
|
#define SW_2_PIN 2
|
|
#define debounceTimeConst 200 //debounce time in ms
|
|
|
|
unsigned long sw1_debounce = 0; //debounce var (last time button was pressed)
|
|
unsigned long sw2_debounce = 0; //debounce var (last time button was pressed)
|
|
void setup() {
|
|
// don't need to set anything up to use DigiKeyboard
|
|
pinMode(SW_1_PIN, INPUT_PULLUP);
|
|
pinMode(SW_2_PIN, INPUT_PULLUP);
|
|
DigiKeyboard.sendKeyStroke(0);
|
|
DigiKeyboard.delay(100);
|
|
}
|
|
|
|
int ledState = LOW; // ledState used to set the LED
|
|
unsigned long previousMillis = 0; // will store last time LED was updated
|
|
|
|
|
|
void loop() {
|
|
unsigned long now = millis(); //timestamp of start of loop
|
|
// debounce button 1
|
|
if(digitalRead(SW_1_PIN) == false){
|
|
if(sw1_debounce + debounceTimeConst < now){
|
|
unsigned long pressed = millis(); //store time when button is pressed
|
|
delay(150); //initial delay to compensate bounce
|
|
while( digitalRead(SW_1_PIN) == false ){
|
|
// wait for button release
|
|
}
|
|
if (pressed + 1000 > millis() ) {
|
|
// pressed shorter than 1s
|
|
pdf_up();
|
|
}else{
|
|
// pressed longer than 1s
|
|
pdf_top();
|
|
}
|
|
}
|
|
sw1_debounce = now;
|
|
}
|
|
|
|
// debounce button 2
|
|
if(digitalRead(SW_2_PIN) == false){
|
|
if(sw2_debounce + debounceTimeConst < now){ pdf_down(); }
|
|
sw2_debounce = now;
|
|
}
|
|
//Serial.println(sw1_debounce);
|
|
|
|
unsigned long currentMillis = millis();
|
|
if (currentMillis - previousMillis >= 500) {
|
|
previousMillis = currentMillis;
|
|
if (ledState == LOW) {
|
|
ledState = HIGH;
|
|
} else {
|
|
ledState = LOW;
|
|
}
|
|
digitalWrite(1, ledState);
|
|
}
|
|
}
|
|
|
|
#define KEY_RIGHT_ARROW 0x4F // Keyboard RightArrow -> Alternative arrow keys names
|
|
#define KEY_LEFT_ARROW 0x50 // Keyboard LeftArrow
|
|
#define KEY_DOWN_ARROW 0x51 // Keyboard DownArrow
|
|
#define KEY_UP_ARROW 0x52 // Keyboard UpArrow
|
|
#define KEY_PAGE_UP 0x4B // Keyboard PageUp
|
|
#define KEY_DELETE 0x4C // Keyboard Delete Forward
|
|
#define KEY_END 0x4D // Keyboard End
|
|
#define KEY_PAGE_DOWN 0x4E // Keyboard PageDown
|
|
#define KEY_HOME 0x4A // Keyboard Home
|
|
//Keyborad Event definitions
|
|
|
|
void pdf_up() {
|
|
DigiKeyboard.sendKeyStroke(KEY_PAGE_UP);
|
|
//Keyboard.press(KEY_LEFT_ARROW);
|
|
DigiKeyboard.delay(100);
|
|
}
|
|
|
|
void pdf_down() {
|
|
DigiKeyboard.sendKeyStroke(KEY_PAGE_DOWN);
|
|
//Keyboard.press(KEY_RIGHT_ARROW);
|
|
DigiKeyboard.delay(100);
|
|
}
|
|
|
|
void pdf_top() {
|
|
DigiKeyboard.sendKeyStroke(KEY_HOME);
|
|
//Keyboard.press(KEY_RIGHT_ARROW);
|
|
DigiKeyboard.delay(100);
|
|
}
|