5 #include "pincontrol.h"
7 #define SOLENOID_DEFAULT_DWELL 12
8 #define SOLENOID_MAX_DWELL 100
9 #define SOLENOID_MIN_DWELL 4
10 #ifndef SOLENOID_ACTIVE
11 #define SOLENOID_ACTIVE false
13 //#define SOLENOID_PIN F6
15 bool solenoid_enabled = SOLENOID_ACTIVE;
16 bool solenoid_on = false;
17 bool solenoid_buzz = false;
18 bool solenoid_buzzing = false;
19 uint16_t solenoid_start = 0;
20 uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
23 void solenoid_buzz_on(void) {
27 void solenoid_buzz_off(void) {
28 solenoid_buzz = false;
31 void solenoid_dwell_minus(void) {
32 if (solenoid_dwell > 0) solenoid_dwell--;
35 void solenoid_dwell_plus(void) {
36 if (solenoid_dwell < SOLENOID_MAX_DWELL) solenoid_dwell++;
39 void solenoid_toggle(void) {
40 solenoid_enabled = !solenoid_enabled;
43 void solenoid_stop(void) {
44 digitalWrite(SOLENOID_PIN, PinLevelLow);
46 solenoid_buzzing = false;
49 void solenoid_fire(void) {
50 if (!solenoid_enabled) return;
52 if (!solenoid_buzz && solenoid_on) return;
53 if (solenoid_buzz && solenoid_buzzing) return;
56 solenoid_buzzing = true;
57 solenoid_start = timer_read();
58 digitalWrite(SOLENOID_PIN, PinLevelHigh);
61 void solenoid_check(void) {
64 if (!solenoid_on) return;
66 elapsed = timer_elapsed(solenoid_start);
68 //Check if it's time to finish this solenoid click cycle
69 if (elapsed > solenoid_dwell) {
74 //Check whether to buzz the solenoid on and off
76 if (elapsed / SOLENOID_MIN_DWELL % 2 == 0){
77 if (!solenoid_buzzing) {
78 solenoid_buzzing = true;
79 digitalWrite(SOLENOID_PIN, PinLevelHigh);
83 if (solenoid_buzzing) {
84 solenoid_buzzing = false;
85 digitalWrite(SOLENOID_PIN, PinLevelLow);
91 void solenoid_setup(void) {
92 pinMode(SOLENOID_PIN, PinDirectionOutput);
95 void matrix_init_user(void) {
99 void matrix_scan_user(void) {