summaryrefslogtreecommitdiff
path: root/users/mtdjr/solenoid.h
diff options
context:
space:
mode:
authormtdjr <mtdjr@users.noreply.github.com>2018-05-31 11:30:05 -0400
committerDrashna Jaelre <drashna@live.com>2018-05-31 08:30:05 -0700
commitee9a7aba396160929604aca54a23ad5534d59940 (patch)
treef4fbbde03ed548a68fd56bec5c6baf8cf217f180 /users/mtdjr/solenoid.h
parent21ad968ac14b177a7c97d34106c4d6201912627f (diff)
add not-so-minidox handwire keyboard (#3061)
* add not-so-minidox handwire keyboard * corrected keymap * multiple adjustments to not_so_minidox keyboard * remove I2C master left define * update default layer set function * move solenoid code into userspace * minor adjustments to config.h * update keymaps to utilize userspace * move features and config to userspace, correct build issue * correct solenoid pin * adjust defaults for solenoid pin and enable * default solenoid to on for not_so_minidox * disable RGBLIGHT_SLEEP for xd75 * tweaking solenoid enable/disable in userspace and keymaps
Diffstat (limited to 'users/mtdjr/solenoid.h')
-rw-r--r--users/mtdjr/solenoid.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/users/mtdjr/solenoid.h b/users/mtdjr/solenoid.h
new file mode 100644
index 0000000000..38066f4c39
--- /dev/null
+++ b/users/mtdjr/solenoid.h
@@ -0,0 +1,103 @@
+#ifndef SOLENOID_H
+#define SOLENOID_H
+
+#include <timer.h>
+#include "pincontrol.h"
+
+#define SOLENOID_DEFAULT_DWELL 12
+#define SOLENOID_MAX_DWELL 100
+#define SOLENOID_MIN_DWELL 4
+#ifndef SOLENOID_ACTIVE
+ #define SOLENOID_ACTIVE false
+#endif
+//#define SOLENOID_PIN F6
+
+bool solenoid_enabled = SOLENOID_ACTIVE;
+bool solenoid_on = false;
+bool solenoid_buzz = false;
+bool solenoid_buzzing = false;
+uint16_t solenoid_start = 0;
+uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
+
+
+void solenoid_buzz_on(void) {
+ solenoid_buzz = true;
+}
+
+void solenoid_buzz_off(void) {
+ solenoid_buzz = false;
+}
+
+void solenoid_dwell_minus(void) {
+ if (solenoid_dwell > 0) solenoid_dwell--;
+}
+
+void solenoid_dwell_plus(void) {
+ if (solenoid_dwell < SOLENOID_MAX_DWELL) solenoid_dwell++;
+}
+
+void solenoid_toggle(void) {
+ solenoid_enabled = !solenoid_enabled;
+}
+
+void solenoid_stop(void) {
+ digitalWrite(SOLENOID_PIN, PinLevelLow);
+ solenoid_on = false;
+ solenoid_buzzing = false;
+}
+
+void solenoid_fire(void) {
+ if (!solenoid_enabled) return;
+
+ if (!solenoid_buzz && solenoid_on) return;
+ if (solenoid_buzz && solenoid_buzzing) return;
+
+ solenoid_on = true;
+ solenoid_buzzing = true;
+ solenoid_start = timer_read();
+ digitalWrite(SOLENOID_PIN, PinLevelHigh);
+}
+
+void solenoid_check(void) {
+ uint16_t elapsed = 0;
+
+ if (!solenoid_on) return;
+
+ elapsed = timer_elapsed(solenoid_start);
+
+ //Check if it's time to finish this solenoid click cycle
+ if (elapsed > solenoid_dwell) {
+ solenoid_stop();
+ return;
+ }
+
+ //Check whether to buzz the solenoid on and off
+ if (solenoid_buzz) {
+ if (elapsed / SOLENOID_MIN_DWELL % 2 == 0){
+ if (!solenoid_buzzing) {
+ solenoid_buzzing = true;
+ digitalWrite(SOLENOID_PIN, PinLevelHigh);
+ }
+ }
+ else {
+ if (solenoid_buzzing) {
+ solenoid_buzzing = false;
+ digitalWrite(SOLENOID_PIN, PinLevelLow);
+ }
+ }
+ }
+}
+
+void solenoid_setup(void) {
+ pinMode(SOLENOID_PIN, PinDirectionOutput);
+}
+
+void matrix_init_user(void) {
+ solenoid_setup();
+}
+
+void matrix_scan_user(void) {
+ solenoid_check();
+}
+
+#endif