Issues using Arduino micro to control volume keys

I have been trying to use a remote to control my computer, using the mouse.h and the keyboard.h libraries. I can’t seem to find what the term for the volume up and down buttons are on a mac, if any could shed some light that would be great!

Aren’t they just F10, F11 and F12?

i.e.

KEY_F10 0xCB 203
KEY_F11 0xCC 204
KEY_F12 0xCD 205
1 Like

Please read:

Unfortunately, the Volume Up and Volume Down keys are outside the range that the Keyboard library can support.

const uint8_t Keyboard_Volume_Up_RAW = 0x80;
const uint8_t Keyboard_Volume_Down_RAW = 0x81;

You can add functions to the keyboard library to support raw key codes:

// pressRaw() adds the specified USB raw keycode to the persistent key 
// report and sends the report.
size_t Keyboard_::pressRaw(uint8_t k) 
{
	uint8_t i;
	
	// Add k to the key report only if it's not already present
	// and if there is an empty slot.
	if (_keyReport.keys[0] != k && _keyReport.keys[1] != k && 
		_keyReport.keys[2] != k && _keyReport.keys[3] != k &&
		_keyReport.keys[4] != k && _keyReport.keys[5] != k) {
		
		for (i=0; i<6; i++) {
			if (_keyReport.keys[i] == 0x00) {
				_keyReport.keys[i] = k;
				break;
			}
		}
		if (i == 6) {
			setWriteError();
			return 0;
		}	
	}
	sendReport(&_keyReport);
	return 1;
}


// releaseRaw() takes the specified key out of the persistent key report and
// sends the report.  This tells the OS the key is no longer pressed and that
// it shouldn't be repeated any more.
size_t Keyboard_::releaseRaw(uint8_t k) 
{
	uint8_t i;
	
	// Test the key report to see if k is present.  Clear it if it exists.
	// Check all positions in case the key is present more than once (which it shouldn't be)
	for (i=0; i<6; i++) {
		if (0 != k && _keyReport.keys[i] == k) {
			_keyReport.keys[i] = 0x00;
		}
	}

	sendReport(&_keyReport);
	return 1;
}


size_t Keyboard_::writeRaw(uint8_t c)
{
	uint8_t p = pressRaw(c);  // Keydown
	releaseRaw(c);            // Keyup
	return p;              // just return the result of press() since releaseRaw() almost always returns 1
}

You would add these functions to Keyboard.cpp and modify the Keyboard class in Keyboard.h to add:

  size_t writeRaw(uint8_t k);
  size_t pressRaw(uint8_t k);
  size_t releaseRaw(uint8_t k);
1 Like

Thanks so much for the help! Using f10, f11, f12 seems to work great! I am continually impressed by the willingness to help by everyone here!

Thanks again!

Haakon Olsen