mirror of
				https://github.com/C0ntroller/keyboard.git
				synced 2025-10-31 05:41:06 +01:00 
			
		
		
		
	Refactor variable names and types
Neccessary because on ARM 'char' != int8_t but uint_8 Just declaring what know you want makes this far less confusing. see https://en.cppreference.com/w/cpp/language/types
This commit is contained in:
		
							
								
								
									
										64
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -4,15 +4,15 @@ | ||||
| #define MIDI_NAME {'P', 'i', 'n', 'g', 'b', 'o', 'a', 'r', 'd'} | ||||
| #define MIDI_NAME_LEN 9 | ||||
|  | ||||
| #define CHECK_PINS 9 | ||||
| #define KEY_GROUP_NUM 9 | ||||
| #define KEY_PINS 6 | ||||
| #define NUMBER_OF_KEYS 49 | ||||
| #define BOUNCE_TIME 5 | ||||
| #define POWER_SUPPLY_CHECK_PIN 13 | ||||
|  | ||||
| #define NUMBER_OF_KEYS 49 | ||||
| #define SELF_DRIVE_INTERVAL 100 | ||||
|  | ||||
| Bounce check_pins[CHECK_PINS] { | ||||
| Bounce group_pins[KEY_GROUP_NUM] { | ||||
|   {14, BOUNCE_TIME}, // not KEYS1..6 | ||||
|   {15, BOUNCE_TIME}, // not KEYS7..12 | ||||
|   {16, BOUNCE_TIME}, // not KEYS13..18 | ||||
| @@ -25,20 +25,20 @@ Bounce check_pins[CHECK_PINS] { | ||||
| }; | ||||
|  | ||||
| // not KEY0%6..not KEY5%6 | ||||
| const unsigned char key_pins[KEY_PINS] {2, 3, 4, 5, 6, 7}; | ||||
| const uint8_t key_pins[KEY_PINS] {2, 3, 4, 5, 6, 7}; | ||||
| // Array of pressed keys (initially all 0) | ||||
| bool keys_pressed[NUMBER_OF_KEYS]; | ||||
| // K1, K2, K3, K4, K5, K12, K13, K14, K15 | ||||
| const unsigned char self_drive_pins[CHECK_PINS] {8, 9, 10, 11, 12, 26, 23, 24, 25}; | ||||
| volatile unsigned char curr_self_drive_pin = 0; | ||||
| const uint8_t self_drive_pins[KEY_GROUP_NUM] {8, 9, 10, 11, 12, 26, 23, 24, 25}; | ||||
| volatile uint8_t current_self_drive_pin = 0; | ||||
| IntervalTimer self_drive_timer = IntervalTimer(); | ||||
|  | ||||
| // Map the current array and pressed key to a MIDI note | ||||
| unsigned char mapToMidi(char curr_arr, char key) { | ||||
|   unsigned char offset = (curr_arr >> 1) * 12; | ||||
| uint8_t mapToMidi(uint8_t active_key_group, uint8_t key) { | ||||
|   uint8_t offset = (active_key_group >> 1) * 12; | ||||
|   // TODO: maybe we have to switch the notes and array offsets | ||||
|   // Uneven offset are the upper octave, even the lower | ||||
|   if (curr_arr & 1) { | ||||
|   if (active_key_group & 1) { | ||||
|     switch (key) { | ||||
|       case 0: return offset + 42; // F#2 + offset | ||||
|       case 1: return offset + 43; // G2 + offset | ||||
| @@ -63,18 +63,18 @@ unsigned char mapToMidi(char curr_arr, char key) { | ||||
| } | ||||
|  | ||||
| // Check if any of the array pins fell since last time | ||||
| char findCurrentArrPin() { | ||||
|   for (unsigned char i = 0; i < CHECK_PINS; i++) { | ||||
| int8_t getActiveKeyGroup() { | ||||
|   for (uint8_t i = 0; i < KEY_GROUP_NUM; i++) { | ||||
|     // Update status | ||||
|     check_pins[i].update(); | ||||
|     group_pins[i].update(); | ||||
|     // Check if the pin fell or is low | ||||
|     // ! inverted | ||||
|     if (check_pins[i].fell()) return i; | ||||
|     if (group_pins[i].fell()) return i; | ||||
|   } | ||||
|  | ||||
|   // If none fell we should have enough time to see which one is low | ||||
|   for (unsigned char i = 0; i < CHECK_PINS; i++) { | ||||
|     if (check_pins[i].read() == LOW) return i; | ||||
|   for (uint8_t i = 0; i < KEY_GROUP_NUM; i++) { | ||||
|     if (group_pins[i].read() == LOW) return i; | ||||
|   } | ||||
|  | ||||
|   // Default return | ||||
| @@ -84,17 +84,17 @@ char findCurrentArrPin() { | ||||
| // Set the next self drive pin | ||||
| FASTRUN void nextSelfDrivePin() { | ||||
|   // Set the current pin to high | ||||
|   digitalWriteFast(self_drive_pins[curr_self_drive_pin], HIGH); | ||||
|   digitalWriteFast(self_drive_pins[current_self_drive_pin], HIGH); | ||||
|   // Set the next pin | ||||
|   curr_self_drive_pin = (curr_self_drive_pin + 1) % CHECK_PINS; | ||||
|   current_self_drive_pin = (current_self_drive_pin + 1) % KEY_GROUP_NUM; | ||||
| } | ||||
|  | ||||
| // Interrupt for power supply check | ||||
| FASTRUN void powerStateChanged() { | ||||
|   unsigned char state = digitalReadFast(POWER_SUPPLY_CHECK_PIN); | ||||
|   uint8_t state = digitalReadFast(POWER_SUPPLY_CHECK_PIN); | ||||
|   // ! inverted | ||||
|   if (state == LOW) { | ||||
|     curr_self_drive_pin = 0; | ||||
|     current_self_drive_pin = 0; | ||||
|     self_drive_timer.begin(nextSelfDrivePin, SELF_DRIVE_INTERVAL); | ||||
|   } else { | ||||
|     self_drive_timer.end(); | ||||
| @@ -104,11 +104,11 @@ FASTRUN void powerStateChanged() { | ||||
| // Initial start function | ||||
| void setup() { | ||||
|   // Set all in- and outputs | ||||
|   for (unsigned char i = 0; i < CHECK_PINS; i++) { | ||||
|     pinMode(check_pins[i].getPin(), INPUT); | ||||
|   for (uint8_t i = 0; i < KEY_GROUP_NUM; i++) { | ||||
|     pinMode(group_pins[i].getPin(), INPUT); | ||||
|     pinMode(self_drive_pins[i], INPUT); | ||||
|   } | ||||
|   for (unsigned char i = 0; i < KEY_PINS; i++) { | ||||
|   for (uint8_t i = 0; i < KEY_PINS; i++) { | ||||
|     pinMode(key_pins[i], INPUT); | ||||
|   } | ||||
|   pinMode(POWER_SUPPLY_CHECK_PIN, INPUT); | ||||
| @@ -121,32 +121,32 @@ void setup() { | ||||
| // Main loop | ||||
| void loop() { | ||||
|   // Find active arr pin | ||||
|   char curr_arr = findCurrentArrPin();   | ||||
|   int8_t active_key_group = getActiveKeyGroup();   | ||||
|  | ||||
|   // If none is active, we do nothing, else we check the keys | ||||
|   if (curr_arr >= 0) { | ||||
|   if (active_key_group >= 0) { | ||||
|     // Get all the key values ans send the MIDI message if needed | ||||
|     unsigned char value; | ||||
|     uint8_t value; | ||||
|      | ||||
|     for (unsigned char i = 0; i < KEY_PINS; i++) { | ||||
|     for (uint8_t i = 0; i < KEY_PINS; i++) { | ||||
|       value = digitalReadFast(key_pins[i]); | ||||
|       // If the key is pressed, we send a MIDI message and set the entry in the array | ||||
|       // ! inverted | ||||
|       if (value == LOW) {  | ||||
|         // Check if the key is not already pressed | ||||
|         if (keys_pressed[curr_arr * 6 + i] == 0) { | ||||
|         if (keys_pressed[active_key_group * 6 + i] == 0) { | ||||
|           // Send MIDI message | ||||
|           usbMIDI.sendNoteOn(mapToMidi(curr_arr, i), 127, 1); | ||||
|           usbMIDI.sendNoteOn(mapToMidi(active_key_group, i), 127, 1); | ||||
|           // Set the entry in the array | ||||
|           keys_pressed[curr_arr * 6 + i] = 1; | ||||
|           keys_pressed[active_key_group * 6 + i] = 1; | ||||
|         } | ||||
|       } else { | ||||
|         // Check if the key is not already released | ||||
|         if (keys_pressed[curr_arr * 6 + i] == 1) { | ||||
|         if (keys_pressed[active_key_group * 6 + i] == 1) { | ||||
|           // Send MIDI message | ||||
|           usbMIDI.sendNoteOff(mapToMidi(curr_arr, i), 0, 1); | ||||
|           usbMIDI.sendNoteOff(mapToMidi(active_key_group, i), 0, 1); | ||||
|           // Set the entry in the array | ||||
|           keys_pressed[curr_arr * 6 + i] = 0; | ||||
|           keys_pressed[active_key_group * 6 + i] = 0; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user