Skip to content

Instantly share code, notes, and snippets.

@toxicantidote
Created August 7, 2024 11:10
Show Gist options
  • Save toxicantidote/d2fa40e66c4b1e4a217445db93b152ac to your computer and use it in GitHub Desktop.
Save toxicantidote/d2fa40e66c4b1e4a217445db93b152ac to your computer and use it in GitHub Desktop.
Media key macro pad
#include "HID-Project.h"
#define PIN_BTN_PREV 11
#define PIN_BTN_PAUSE A1
#define PIN_BTN_NEXT A0
#define PIN_BTN_VOL_DOWN A2
#define PIN_BTN_VOL_MUTE 10
#define PIN_BTN_VOL_UP 9
#define LED_BOARD 13
bool pressed_btn_prev = false;
bool pressed_btn_pause = false;
bool pressed_btn_next = false;
bool pressed_btn_vol_down = false;
bool pressed_btn_vol_mute = false;
bool pressed_btn_vol_up = false;
void setup() {
// Sends a clean report to the host. This is important on any Arduino type.
Consumer.begin();
Mouse.begin();
pinMode(PIN_BTN_PREV, INPUT_PULLUP);
pinMode(PIN_BTN_PAUSE, INPUT_PULLUP);
pinMode(PIN_BTN_NEXT, INPUT_PULLUP);
pinMode(PIN_BTN_VOL_DOWN, INPUT_PULLUP);
pinMode(PIN_BTN_VOL_MUTE, INPUT_PULLUP);
pinMode(PIN_BTN_VOL_UP, INPUT_PULLUP);
pinMode(LED_BOARD, OUTPUT);
Serial.begin(9600);
Serial.println("Ready for input");
}
void jiggle() {
// jiggle mouse to disable screensaver. otherwise media keys may be ignored
Mouse.move(5, 5, 0);
delay(100);
}
void loop() {
if (digitalRead(PIN_BTN_PREV) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_prev == false) {
pressed_btn_prev = true;
Serial.println("Previous");
jiggle();
Consumer.write(MEDIA_PREVIOUS);
}
} else {
pressed_btn_prev = false;
}
if (digitalRead(PIN_BTN_PAUSE) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_pause == false) {
pressed_btn_pause = true;
Serial.println("Play/Pause");
jiggle();
Consumer.write(MEDIA_PLAY_PAUSE);
}
} else {
pressed_btn_pause = false;
}
if (digitalRead(PIN_BTN_NEXT) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_next == false) {
pressed_btn_next = true;
Serial.println("Next");
jiggle();
Consumer.write(MEDIA_NEXT);
}
} else {
pressed_btn_next = false;
}
if (digitalRead(PIN_BTN_VOL_DOWN) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_vol_down == false) {
pressed_btn_vol_down = true;
Serial.println("Volume down");
jiggle();
Consumer.write(MEDIA_VOLUME_DOWN);
}
} else {
pressed_btn_vol_down = false;
}
if (digitalRead(PIN_BTN_VOL_MUTE) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_vol_mute == false) {
pressed_btn_vol_mute = true;
Serial.println("Mute");
jiggle();
Consumer.write(MEDIA_VOLUME_MUTE);
}
} else {
pressed_btn_vol_mute = false;
}
if (digitalRead(PIN_BTN_VOL_UP) == LOW) {
digitalWrite(LED_BOARD, HIGH);
if (pressed_btn_vol_up == false) {
pressed_btn_vol_up = true;
Serial.println("Volume up");
jiggle();
Consumer.write(MEDIA_VOLUME_UP);
}
} else {
pressed_btn_vol_up = false;
}
//delay(25);
digitalWrite(LED_BOARD, LOW);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment