forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Keymap] Adding encg keymap for 2% Milk keyboard (qmk#11041)
* adding my keymap * Updating coding convention and style for new keymap PR * Added GPL license header and to-do list to readme
- Loading branch information
Showing
4 changed files
with
243 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/* Copyright 2020 encg | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#pragma once | ||
|
||
#define UNICODE_SELECTED_MODES UC_MAC, UC_WINC | ||
#define UNICODE_CYCLE_PERSIST true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
/* Copyright 2020 encg | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#include QMK_KEYBOARD_H | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <time.h> | ||
|
||
enum my_keycodes { | ||
SPIN = SAFE_RANGE, | ||
RULES, | ||
}; | ||
|
||
enum unicode_names { | ||
COW, | ||
BTTR, | ||
CHIKN, | ||
FISH, | ||
SEED, | ||
RENV, | ||
MBAG, | ||
FACE, | ||
WING, | ||
SIGN, | ||
WAVE | ||
}; | ||
|
||
const uint32_t PROGMEM unicode_map[] = { | ||
[COW] = 0x1F404, // 🐄 | ||
[BTTR] = 0x1F9C8, // 🧈 | ||
[CHIKN] = 0x1F414, // 🐔 | ||
[FISH] = 0x1F3A3, // 🎣 | ||
[SEED] = 0x1F331, // 🌱 | ||
[RENV] = 0x1F9E7, // 🧧 | ||
[MBAG] = 0x1F4B0, // 💰 | ||
[FACE] = 0x1F911, // 🤑 | ||
[WING] = 0x1F4B8, // 💸 | ||
[SIGN] = 0x1F4B2, // 💲 | ||
[WAVE] = 0x1F44B, // 👋 | ||
}; | ||
|
||
/* Emojis stored in an array in order to be randomly accessed */ | ||
const char* emoji[5] = {"🐄", "🧈", "🐔", "🎣", "🌱"}; | ||
|
||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
switch (keycode) { | ||
case SPIN: | ||
if (record->event.pressed) { | ||
/* Seed RNG used by rand() with timer_read() https://beta.docs.qmk.fm/developing-qmk/qmk-reference/ref_functions#software-timers */ | ||
srand(timer_read()); | ||
int rng1 = rand() % 5; | ||
send_unicode_string(emoji[rng1]); | ||
wait_ms(200); | ||
int rng2 = rand() % 5; | ||
send_unicode_string(emoji[rng2]); | ||
wait_ms(200); | ||
int rng3 = rand() % 5; | ||
send_unicode_string(emoji[rng3]); | ||
wait_ms(200); | ||
if (rng1 == rng2 && rng1 == rng3) { | ||
if (rng1 == 0) { | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("🧧🧧🧧"); | ||
wait_ms(200); | ||
SEND_STRING("\n"); | ||
} else if (rng1 == 1) { | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("💰💰💰"); | ||
wait_ms(200); | ||
SEND_STRING("\n"); | ||
} else if (rng1 == 2) { | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("🤑🤑🤑"); | ||
wait_ms(200); | ||
SEND_STRING("\n"); | ||
} else if (rng1 == 3) { | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("💲💲💲"); | ||
wait_ms(200); | ||
SEND_STRING("\n"); | ||
} else if (rng1 == 4) { | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("📈📈📈"); | ||
wait_ms(200); | ||
SEND_STRING("\n"); | ||
} | ||
} else { | ||
SEND_STRING(" "); | ||
send_unicode_string("👋💸"); | ||
SEND_STRING("\n"); | ||
} | ||
} | ||
return false; | ||
break; | ||
case RULES: | ||
if (record->event.pressed) { | ||
send_unicode_string("🐄"); | ||
wait_ms(200); | ||
send_unicode_string("🐄"); | ||
wait_ms(200); | ||
send_unicode_string("🐄"); | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("🧧"); | ||
wait_ms(200); | ||
send_unicode_string("🧧"); | ||
wait_ms(200); | ||
send_unicode_string("🧧"); | ||
SEND_STRING("\n"); | ||
wait_ms(100); | ||
send_unicode_string("🧈"); | ||
wait_ms(200); | ||
send_unicode_string("🧈"); | ||
wait_ms(200); | ||
send_unicode_string("🧈"); | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("💰"); | ||
wait_ms(200); | ||
send_unicode_string("💰"); | ||
wait_ms(200); | ||
send_unicode_string("💰"); | ||
SEND_STRING("\n"); | ||
wait_ms(100); | ||
send_unicode_string("🐔"); | ||
wait_ms(200); | ||
send_unicode_string("🐔"); | ||
wait_ms(200); | ||
send_unicode_string("🐔"); | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("🤑"); | ||
wait_ms(200); | ||
send_unicode_string("🤑"); | ||
wait_ms(200); | ||
send_unicode_string("🤑"); | ||
SEND_STRING("\n"); | ||
wait_ms(100); | ||
send_unicode_string("🎣"); | ||
wait_ms(200); | ||
send_unicode_string("🎣"); | ||
wait_ms(200); | ||
send_unicode_string("🎣"); | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("💲"); | ||
wait_ms(200); | ||
send_unicode_string("💲"); | ||
wait_ms(200); | ||
send_unicode_string("💲"); | ||
SEND_STRING("\n"); | ||
wait_ms(100); | ||
send_unicode_string("🌱"); | ||
wait_ms(200); | ||
send_unicode_string("🌱"); | ||
wait_ms(200); | ||
send_unicode_string("🌱"); | ||
wait_ms(200); | ||
SEND_STRING(" "); | ||
send_unicode_string("📈"); | ||
wait_ms(200); | ||
send_unicode_string("📈"); | ||
wait_ms(200); | ||
send_unicode_string("📈"); | ||
SEND_STRING("\n\n"); | ||
} | ||
return false; | ||
break; | ||
} | ||
return false; | ||
}; | ||
|
||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = LAYOUT( | ||
SPIN, /* bottom button */ | ||
RULES /* top button */ | ||
) | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# encg's Keymap | ||
|
||
## What is this? | ||
|
||
A simple slot machine emulator for the [2% Milk Keyboard](https://github.com/Spaceman/SpaceboardsHardware/tree/master/Keyboards/2%25%20Milk). This idea is based on the [implementation by /u/ln8r on /r/mechanicalkeyboards](https://www.reddit.com/r/MechanicalKeyboards/comments/hcw21b/2_milk_slot_machine/). | ||
|
||
## How does it work? | ||
|
||
The top button outputs all possible winning emoji combinations followed by a corresponding "score." Emojis are output one-by-one with a short delay to simulate the "slots" feel. | ||
|
||
![IMG](https://i.imgur.com/rUc3IOn.gif) | ||
|
||
The bottom button outputs 3 random emojis one by one. The random function takes `timer_read()` as its seed value [(referenced here)](https://beta.docs.qmk.fm/developing-qmk/qmk-reference/ref_functions#software-timers). | ||
|
||
![IMG](https://i.imgur.com/4EREsIq.png) | ||
|
||
## Unicode Setup | ||
|
||
This keymap's default unicode input mode is `UC_WINC` which requires [WinCompose](https://github.com/samhocevar/wincompose). For other OSes, see [QMK documentation on unicode input modes](https://docs.qmk.fm/#/feature_unicode?id=input-modes). | ||
|
||
## Ideas for the future | ||
|
||
- [ ] Factor in emoji hierarchy into RNG algorithm | ||
- [ ] Random/Wildcard emoji | ||
- [ ] Keep a count for winng combinations | ||
- [ ] Implement tap dance for easily switching unicode input types |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
UNICODEMAP_ENABLE = yes |