Skip to content

Instantly share code, notes, and snippets.

@candale
Created June 19, 2016 18:15
Show Gist options
  • Save candale/c27bac9c609745df830d7824136f73a9 to your computer and use it in GitHub Desktop.
Save candale/c27bac9c609745df830d7824136f73a9 to your computer and use it in GitHub Desktop.
// #define GENERAL_SWITCH_PIN 13 // 8
// #define DIRECTION_PIN 12 // 9
// #define UP_SWITCH_PIN 11 // 10
// #define DOWN_SWITCH_PIN 10 // 11
// #define BUTTON_UP_PIN 9 // 12
// #define BUTTON_DOWN_PIN 8 // 13
#define GENERAL_SWITCH_PIN 6 // 8
#define DIRECTION_PIN 5 // 9
#define UP_SWITCH_PIN 3 // 10
#define DOWN_SWITCH_PIN 2 // 11
#define BUTTON_UP_PIN 1 // 12
#define BUTTON_DOWN_PIN 0 // 13
#define TEST_PIN 6
#define TEST_PIN 6
int up_switch = 0;
int down_switch = 0;
int button_up_stat = 0;
int button_down_stat = 0;
int move_to_down = 0;
int move_to_up = 0;
int state = 0;
void reset_state()
{
// Serial.println("Reseting state...");
move_to_down = 0;
move_to_up = 0;
button_down_stat = 0;
button_up_stat = 0;
up_switch = 0;
down_switch = 0;
delay(1000);
}
void setup() {
pinMode(GENERAL_SWITCH_PIN, OUTPUT);
pinMode(DIRECTION_PIN, OUTPUT);
pinMode(UP_SWITCH_PIN, INPUT);
pinMode(DOWN_SWITCH_PIN, INPUT);
pinMode(BUTTON_DOWN_PIN, INPUT);
pinMode(BUTTON_UP_PIN, INPUT);
// Serial.begin(9600);
reset_state();
}
void disable_outputs()
{
// Serial.println("Disabling outputs...");
digitalWrite(GENERAL_SWITCH_PIN, LOW);
delay(100);
digitalWrite(DIRECTION_PIN, LOW);
state = 0;
}
void drive_up()
{
state = 1;
// Serial.println("Drive up...");
digitalWrite(GENERAL_SWITCH_PIN, HIGH);
}
void drive_down()
{
state = 2;
// Serial.println("Drive down...");
digitalWrite(DIRECTION_PIN, HIGH);
digitalWrite(GENERAL_SWITCH_PIN, HIGH);
}
void print_state()
{
// Serial.print("UP_SWITCH: ");
// Serial.print(up_switch);
// Serial.print(" | DOWN_SWITCH: ");
// Serial.print(down_switch);
// Serial.print(" | BUS: ");
// Serial.print(button_up_stat);
// Serial.print(" | BDS: ");
// Serial.print(button_down_stat);
// Serial.print(" | MTU: ");
// Serial.print(move_to_up);
// Serial.print(" | MTD: ");
// Serial.print(move_to_down);
// Serial.print(" | BUT_UP: ");
// Serial.print(digitalRead(BUTTON_UP_PIN));
// Serial.print(" | BUT_DOWN: ");
// Serial.println(digitalRead(BUTTON_DOWN_PIN));
}
void loop() {
// Get switches status
up_switch = digitalRead(UP_SWITCH_PIN);
down_switch = digitalRead(DOWN_SWITCH_PIN);
// Get the read from the buttons
// If the button was pressed once, it records that value and for the
// subsequent loops, the vars will keep their values until
// one of the switches are activated
button_up_stat = digitalRead(BUTTON_UP_PIN) || button_up_stat;
button_down_stat = digitalRead(BUTTON_DOWN_PIN) || button_down_stat;
// Determine if we should move to the down or to the up
move_to_up = button_up_stat == HIGH && up_switch == LOW;
move_to_down = button_down_stat == HIGH && down_switch == LOW;
// If both are pressed, do nothing
if(move_to_down == move_to_up && state != 0)
{
print_state();
disable_outputs();
if(move_to_down == HIGH)
{
delay(1000);
}
reset_state();
return;
} else if(move_to_up == HIGH && state != 1)
{
print_state();
drive_up();
} else if(move_to_down == HIGH && state != 2)
{
print_state();
drive_down();
} else if(move_to_up == move_to_down && state == 0)
{
button_up_stat = 0;
button_down_stat = 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment