Browse Source

Cleanup code to prep for PR

Clean up code for PR

Initial support for STL/STEP files

Added crude wiring diagram

Update readme.md

Revert "Initial support for STL/STEP files"

This reverts commit 87f5929e5b.

Update readme.md

Update keymap.c

Update info.json
pull/14313/head
bryan065 2 years ago
parent
commit
2e03b27cf4
10 changed files with 93 additions and 87 deletions
  1. +15
    -13
      keyboards/handwired/ghero20/MPU9250/MPU9250.c
  2. +16
    -5
      keyboards/handwired/ghero20/MPU9250/MPU9250.h
  3. +18
    -4
      keyboards/handwired/ghero20/MPU9250/MPU9250RegisterMap.h
  4. +1
    -17
      keyboards/handwired/ghero20/config.h
  5. +0
    -9
      keyboards/handwired/ghero20/ghero20.c
  6. +21
    -7
      keyboards/handwired/ghero20/info.json
  7. +2
    -16
      keyboards/handwired/ghero20/keymaps/default/keymap.c
  8. +0
    -1
      keyboards/handwired/ghero20/keymaps/default/readme.md
  9. +19
    -13
      keyboards/handwired/ghero20/readme.md
  10. +1
    -2
      keyboards/handwired/ghero20/rules.mk

+ 15
- 13
keyboards/handwired/ghero20/MPU9250/MPU9250.c View File

@ -1,4 +1,6 @@
/* Copyright 2021 bryan065
/* Copyright 2021 bryan065 / hideakitai
*
* https://github.com/hideakitai/MPU9250
*
* 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
@ -42,7 +44,7 @@ i2c_status_t update_accel_gyro(void) {
};
return status;
};
}
i2c_status_t mpu_readAccel(int16_t* read) {
uint8_t data[6];
@ -55,7 +57,7 @@ i2c_status_t mpu_readAccel(int16_t* read) {
};
return status;
};
}
i2c_status_t mpu_readGyro(int16_t* read) {
uint8_t data[6];
@ -68,7 +70,7 @@ i2c_status_t mpu_readGyro(int16_t* read) {
};
return status;
};
}
i2c_status_t mpu_readAccelGyro(int16_t* read) {
uint8_t data[14];
@ -85,13 +87,13 @@ i2c_status_t mpu_readAccelGyro(int16_t* read) {
};
return status;
};
}
int16_t mpu_readTemp(void) {
uint8_t data[2];
i2c_readReg(MPU9250_ADDR,TEMP_OUT_H,data,sizeof(data),I2C_TIMEOUT);
return (data[0]<<8|data[1])/334+21;;
};
}
void initMPU9250(void) {
acc_resolution = 16.0 / 32768.0;
@ -159,17 +161,17 @@ void initMPU9250(void) {
send_data = 0x01;
i2c_writeReg(MPU9250_ADDR, INT_ENABLE, &send_data, 1, I2C_TIMEOUT);
_delay_ms(100);
};
}
// get accel and gyro data as float
float getAcc(const uint8_t i) {
return (i < 3) ? Acc[i] : 0.f;
};
}
float getGyro(const uint8_t i) {
return (i < 3) ? Gyro[i] : 0.f;
};
}
// Get scaled raw data as int16 instead of float
int16_t getAccScaled(const uint8_t i, const uint8_t o) {
@ -181,7 +183,7 @@ int16_t getAccScaled(const uint8_t i, const uint8_t o) {
data = (int16_t)scale;
return data;
};
}
int16_t getGyroScaled(const uint8_t i, const uint8_t o) {
if (i >= 3) {return 0;};
@ -192,7 +194,7 @@ int16_t getGyroScaled(const uint8_t i, const uint8_t o) {
data = (int16_t)scale;
return data;
};
}
// Get Raw accel and gyro data
mpu_data_t getAccRaw(const uint8_t i) {
@ -204,7 +206,7 @@ mpu_data_t getAccRaw(const uint8_t i) {
else {
return 0;
};
};
}
mpu_data_t getGyroRaw(const uint8_t i) {
@ -216,4 +218,4 @@ mpu_data_t getGyroRaw(const uint8_t i) {
else {
return 0;
};
};
}

+ 16
- 5
keyboards/handwired/ghero20/MPU9250/MPU9250.h View File

@ -1,13 +1,24 @@
#pragma once
/* Copyright 2021 bryan065
*
* 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/>.
*/
#ifndef MPU9250_H
#define MPU9250_H
#pragma once
#include "MPU9250RegisterMap.h"
#include "i2c_master.h"
#endif
enum Axis {
x,
y,


+ 18
- 4
keyboards/handwired/ghero20/MPU9250/MPU9250RegisterMap.h View File

@ -1,6 +1,22 @@
/* Copyright 2021 bryan065 / hideakitai
*
* https://github.com/hideakitai/MPU9250
*
* 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
#ifndef MPU9250REGISTERMAP_H
#define MPU9250REGISTERMAP_H
//Magnetometer Registers
// #define AK8963_ADDRESS 0x0C
@ -147,5 +163,3 @@
#define YA_OFFSET_L 0x7B
#define ZA_OFFSET_H 0x7D
#define ZA_OFFSET_L 0x7E
#endif // MPU9250REGISTERMAP_H

+ 1
- 17
keyboards/handwired/ghero20/config.h View File

@ -35,6 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* Valid parameters: -40, -20, -16, -12, -8, -4, 0, 4
* (https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel)
*
* Used with my customized version of adafruit_ble
*/
#define POWER_LEVEL 4
@ -87,24 +88,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
#define RGBLIGHT_DEFAULT_VAL 255
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
//# define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
//# define RGBLIGHT_EFFECT_BREATHING
//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
//# define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */


+ 0
- 9
keyboards/handwired/ghero20/ghero20.c View File

@ -24,10 +24,6 @@ bool star_power = false;
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {1, 1, 1};
void keyboard_pre_init_kb(void) {
// Call the keyboard pre init code.
}
void keyboard_post_init_kb(void) {
// Init i2c
i2c_init();
@ -42,11 +38,6 @@ void keyboard_post_init_kb(void) {
init_GH_color();
}
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)


+ 21
- 7
keyboards/handwired/ghero20/info.json View File

@ -2,17 +2,31 @@
"keyboard_name": "GHero20",
"url": "",
"maintainer": "bryan065",
"width": 3,
"height": 2,
"width": 5,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [
{"label": "k00", "x": 0, "y": 0},
{"label": "k01", "x": 1, "y": 0},
{"label": "k02", "x": 2, "y": 0},
{"label": "1", "x": 0, "y": 0},
{"label": "2", "x": 1, "y": 0},
{"label": "3", "x": 2, "y": 0},
{"label": "4", "x": 3, "y": 0},
{"label": "5", "x": 4, "y": 0},
{"label": "k10", "x": 0, "y": 1, "w": 1.5},
{"label": "k12", "x": 1.5, "y": 1, "w": 1.5}
{"label": "q", "x": 0, "y": 1},
{"label": "w", "x": 1, "y": 1},
{"label": "e", "x": 2, "y": 1},
{"label": "r", "x": 3, "y": 1},
{"label": "t", "x": 4, "y": 1},
{"label": "Down", "x": 0, "y": 2},
{"label": "Up", "x": 1, "y": 2},
{"label": "Mute", "x": 2, "y": 2},
{"label": "Space", "x": 0, "y": 3},
{"label": "RGB", "x": 1, "y": 3},
{"label": "Mute", "x": 2, "y": 3},
{"label": "Enter", "x": 3, "y": 3}
]
}
}


+ 2
- 16
keyboards/handwired/ghero20/keymaps/default/keymap.c View File

@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_1, KC_2, KC_3, KC_4, KC_5,
KC_Q, KC_W, KC_E, KC_R, KC_T,
KC_DOWN, KC_UP, KC_MUTE,
KC_M, RGB_TOG, KC_N, KC_G
KC_SPC, RGB_TOG, KC_MUTE, KC_ENT
),
[_GUITAR] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@ -35,18 +35,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
//debug_enable=true;
//debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
}
};

+ 0
- 1
keyboards/handwired/ghero20/keymaps/default/readme.md View File

@ -1 +0,0 @@
# The default keymap for ghero20

+ 19
- 13
keyboards/handwired/ghero20/readme.md View File

@ -32,26 +32,32 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
### Modular Design
- The design is seperated into several modules which can each be printed on a standard Ender 3 (230mm x 230mm print bed).
- Upper Neck Module (in development).
- Upper Neck Module.
- Houses the main frets and 5 mechanical switches.
- Hotswap socket not available.
- Fret buttons are mounted directly to swtiches like a regular keycap.
- Lower Neck Module (on hold).
- Houses the seconday frets meant to be spaced closer together and lower actuation distance.
- Optional stabilizers.
- Lower Neck Module.
- Customizable faceplate for your own needs.
- Currently houses the accelerometer.
- Strum Module.
- Houses the strum bar.
- Controller Module.
- Houses the 4 macro keys, controller, and wireless Qi/Magsafe receiver.
- Cosmetic Modules.
- Different guitar styles can be customized or designed.
### Fret buttons
- Can be customized with any set of mechanical switches.
- *Customizable with various switches, travel, and bottom out distances"
### Strum Bar
- Can be customized with any pair of mechanical keyboard switches.
- *The design expects an actuation distance of 2 to 3mm and bottom out of 4mm*
- *Using "Fast" switches like Cherry MX Speed is not recommended!*
- *Using "fast" switches like Cherry MX Speed is not tested (1 to 1.5mm actuation distance)*
- Features a flexible mounting system to accommodate for various tolerances in 3D printer models.
- *The same mounting can be used to adjust the bar to the user's liking.*
- Features a magnetic centering system.
- *No springs involved so you don't get the annoying pinging.*
- *Silent strumming unless you choose clicky mechanical switches.*
@ -63,7 +69,7 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
- 4 standard mechanical switch + keycap sockets.
- *Can be customized with any mechanical switch.*
- *Regular OEM/Cherry keycaps may be too tall for some users, in those cases, XDA/DSA profile is recommended.*
- *Regular OEM/Cherry keycaps may be too tall for some users (gets in the way of strumming), in those cases, XDA/DSA profile is recommended.*
- Hotswap socket compatible.
- *You can solder to the switches directly or use the optional hotswap socket holder*
@ -89,9 +95,9 @@ Enter the bootloader in 3 ways:
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
## Wiring
## Build instructions / Wiring / STL's
![Alt text](/keyboards/handwired/GHero20/Layout-Wiring.png?raw=true "")
Assembly instruction and STL/STEP files to be available soon.
## To-do
@ -102,9 +108,9 @@ Enter the bootloader in 3 ways:
- [ ] ~~OLED Display~~
- Used for info display such as battery life
- [x] BLE Battery Service
- Will report battery level to Windows 10 1809 or newer.
- OLED Display no longer needed.
- [x] Additional ground breakouts for WS2812 and MPU-9250.
- Will report battery level to Windows 10 1809 or newer
- OLED Display no longer needed
- [x] Additional ground breakouts for WS2812 and MPU-9250
- [x] Update strum part to enable tuning
- [x] Tension
- [x] Actuation distance/angle
@ -114,7 +120,7 @@ Enter the bootloader in 3 ways:
- [x] Strum switches
- [x] Macro switches
- [x] ~~Fret switches~~ *(Not enough clearance in neck for sockets)*
- *Upper neck would have to be redesigned to have a removable PCB part like the lower neck to accommodate something like Kailh low profile switches to make room for hotswap sockets.*
- *Something like Kailh low profile switches are needed to accommodate hotswap design*
- [ ] Upload STL's for guitar components
- [x] WS2812 RGB's
- Per key lighting & dynamic lightin
- Per key lighting & dynamic lighting

+ 1
- 2
keyboards/handwired/ghero20/rules.mk View File

@ -24,7 +24,7 @@ F_CPU = 8000000
# ATmega328P USBasp
BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60)
# Interrupt driven control endpoint task
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Build Options
@ -44,7 +44,6 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
BLUETOOTH = AdafruitBLE
LTO_ENABLE = yes
QUANTUM_LIB_SRC += i2c_master.c
SRC += MPU9250/MPU9250.c

Loading…
Cancel
Save