Skip to content

Instantly share code, notes, and snippets.

@anna328p
Created April 27, 2020 13:55
Show Gist options
  • Save anna328p/cab60fddba335710e241e7da02934c42 to your computer and use it in GitHub Desktop.
Save anna328p/cab60fddba335710e241e7da02934c42 to your computer and use it in GitHub Desktop.
Fan PuppetMaster
// 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