Created
April 27, 2020 13:55
-
-
Save anna328p/cab60fddba335710e241e7da02934c42 to your computer and use it in GitHub Desktop.
Fan PuppetMaster
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
// int const pin_led_low = 27; | |
// int const pin_led_med = 26; | |
// int const pin_led_high = 25; | |
// int const pin_led_in = 33; | |
// int const pin_led_out = 32; | |
// int const pin_led_exch = 35; | |
// int const pin_led_am = 34; | |
// | |
// int const pin_btn_pwr = 12; | |
// int const pin_btn_airflow = 14; | |
// int const pin_btn_mode = 2; | |
int const pin_led_low = 2; | |
int const pin_led_med = 3; | |
int const pin_led_high = 4; | |
int const pin_led_in = 8; | |
int const pin_led_out = 7; | |
int const pin_led_exch = 6; | |
int const pin_led_am = 5; | |
int const pin_btn_pwr = 11; | |
int const pin_btn_mode = 12; | |
int const pin_btn_airflow = 13; | |
void blip(int pin) { | |
pinMode(pin, OUTPUT); | |
digitalWrite(pin, LOW); | |
delay(10); | |
pinMode(pin, INPUT); | |
delay(10); | |
} | |
int detect(int pin) { | |
// Serial.printf("Testing pin %d: ", pin); | |
Serial.print("Testing pin "); Serial.print(pin); Serial.print(": "); | |
int a = 0; | |
int tmp = 0; | |
for (int i = 0; i < 16; i++) { | |
tmp = digitalRead(pin) == HIGH ? 1 : 0; | |
// Serial.printf("%d", tmp); | |
Serial.print(tmp); | |
a += tmp; | |
delay(5); | |
} | |
// Serial.printf("(result: %d)\n", a); | |
Serial.print(" (result: "); Serial.print(a); Serial.println(")"); | |
if (pin == pin_led_high || pin == pin_led_out) { | |
return a > 14; | |
} else { | |
return a > 9; | |
} | |
} | |
enum PowerState { PW_OFF, PW_LOW, PW_MED, PW_HIGH }; | |
enum Airflow { AF_IN, AF_OUT, AF_EXCH }; | |
struct State { | |
enum PowerState power_state; | |
enum Airflow airflow; | |
bool am_state; | |
}; | |
void update_state(struct State &state) { | |
bool low = detect(pin_led_low); | |
bool med = detect(pin_led_med); | |
bool high = detect(pin_led_high); | |
state.power_state = low ? PW_LOW : | |
med ? PW_MED : | |
high ? PW_HIGH : | |
PW_OFF; | |
bool af_in = detect(pin_led_in); | |
bool af_out = detect(pin_led_out); | |
bool af_exch = detect(pin_led_exch); | |
state.airflow = af_in ? AF_IN : | |
af_out ? AF_OUT : | |
af_exch ? AF_EXCH : | |
state.airflow; | |
state.am_state = detect(pin_led_am); | |
} | |
struct State curr_state; | |
void setup() { | |
// put your setup code here, to run once: | |
Serial.begin(115200); | |
pinMode(pin_led_low, INPUT); | |
pinMode(pin_led_med, INPUT); | |
pinMode(pin_led_high, INPUT); | |
pinMode(pin_led_in, INPUT); | |
pinMode(pin_led_out, INPUT); | |
pinMode(pin_led_exch, INPUT); | |
pinMode(pin_led_am, INPUT); | |
pinMode(pin_btn_pwr, INPUT); | |
pinMode(pin_btn_airflow, INPUT); | |
pinMode(pin_btn_mode, INPUT); | |
curr_state.power_state = PW_OFF; | |
curr_state.am_state = true; | |
curr_state.airflow = AF_IN; | |
delay(2000); | |
blip(pin_btn_pwr); | |
delay(1000); | |
} | |
void loop() { | |
// put your main code here, to run repeatedly: | |
static int loops = 0; | |
int in_pin = 27; | |
int out_pin = 12; | |
//Serial.printf("Loop %d\n", loops); | |
Serial.print("Loop "); Serial.print(loops); Serial.print('\n'); | |
// blip(pin_btn_airflow); | |
update_state(curr_state); | |
//Serial.printf("State: %d %d %d\n", curr_state.power_state, curr_state.airflow, curr_state.am_state); | |
Serial.print("State: "); Serial.print(curr_state.power_state); Serial.print(" "); | |
Serial.print(curr_state.airflow); Serial.print(" "); Serial.println(curr_state.am_state); | |
delay(1000); | |
loops += 1; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment