Skip to content

Instantly share code, notes, and snippets.

@JCharante
Created June 10, 2017 03:46
Show Gist options
  • Save JCharante/a347906d92ccf5d82e4589f067f78a2b to your computer and use it in GitHub Desktop.
Save JCharante/a347906d92ccf5d82e4589f067f78a2b to your computer and use it in GitHub Desktop.
const int ledPin = 13;
const int button1Pin = 2;
const int button2Pin = 3;
const int button3Pin = 4;
class Melody {
int pattern [7] = {1, 1, 2, 2, 3, 3, 2};
int inputs [7] = {0, 0, 0, 0, 0, 0, 0};
public:
int onInput (int buttonNum) {
inputs[sizeof(inputs)] = buttonNum;
bool mismatch;
for (int i = 0; i < sizeof(inputs); i++) {
if (inputs[i] != pattern[i]) {
mismatch = true;
}
}
if (mismatch) {
inputs[0] = 0;
inputs[1] = 0;
inputs[2] = 0;
inputs[3] = 0;
inputs[4] = 0;
inputs[5] = 0;
inputs[6] = 0;
return 1;
}
return 0;
}
};
Melody melody;
int button1State = 0;
int button2State = 0;
int button3State = 0;
int prevButton1State;
int prevButton2State;
int prevButton3State;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(button3Pin, INPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
button3State = digitalRead(button3Pin);
Serial.println("Start Loop");
Serial.println("");
if (button1State == HIGH && prevButton1State == 0){
Serial.print(1);
if (melody.onInput(1) == 0) {
digitalWrite(ledPin, HIGH);
Serial.println("LED On");
}
}
if (button2State == HIGH && prevButton2State == 0){
Serial.print(2);
if (melody.onInput(2) == 0) {
digitalWrite(ledPin, HIGH);
Serial.println("LED On");
}
}
if (button3State == HIGH && prevButton3State == 0){
Serial.print(3);
if (melody.onInput(3) == 0) {
digitalWrite(ledPin, HIGH);
Serial.println("LED On");
}
}
prevButton1State = button1State;
prevButton2State = button2State;
prevButton3State = button3State;
}
@JCharante
Copy link
Author

Working on abstracting the keyboard stuff

const int ledPin =  13;
const int button0Pin = 2;
const int button1Pin = 3;
const int button2Pin = 4;

class Melody {
  int pattern [7] = {0, 0, 1, 1, 2, 2, 1};
  int inputs [7] = {0, 0, 0, 0, 0, 0, 0};
  public:
    int onInput (int buttonNum) {
      inputs[sizeof(inputs)] = buttonNum;
      bool mismatch;
      for (int i = 0; i < sizeof(inputs); i++) {
        if (inputs[i] != pattern[i]) {
          mismatch = true;
        }
      }
      if (mismatch) {
       inputs[0] = 0;
       inputs[1] = 0;
       inputs[2] = 0;
       inputs[3] = 0;
       inputs[4] = 0;
       inputs[5] = 0;
       inputs[6] = 0;
       return 1; 
      }
      return 0;
    }
};

class VirtualKeyboard {
  Melody melody;
  int previousButtonStates [3] = {LOW, LOW, LOW};
  int buttonStates [3] = {LOW, LOW, LOW};
  public:
    void onKeydown(int buttonNum) {
      if (melody.onInput(buttonNum) == 0) {
        Serial.println("LED On");
        digitalWrite(ledPin, HIGH);
      }
    }
    void onKeyup(int buttonNum) {
      
    }
    void whileKeydown(int buttonNum) {
      
    }
    void setButtonState(int buttonNum, int state) {
      buttonStates[buttonNum] = state;
    }
    void tick() {
      Serial.println("tick");
      for (int i = 0; i < 3; i++) {
        if (buttonStates[i] == HIGH) {
          if (previousButtonStates[i] == LOW) {
            onKeydown(i);
          } else {
            whileKeydown(i);
          }
        } 
      }
      
      previousButtonStates[0] = buttonStates[0];
      previousButtonStates[1] = buttonStates[1];
      previousButtonStates[2] = buttonStates[2];
    }
};

VirtualKeyboard virtualKeyboard;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(button0Pin, INPUT);
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(9600);
  Serial.println("Running Test...");
  
  virtualKeyboard.setButtonState(0, HIGH);
  virtualKeyboard.tick(); // 0 down
  virtualKeyboard.setButtonState(0, LOW);
  virtualKeyboard.tick(); // 0 up
  
  virtualKeyboard.setButtonState(0, HIGH);
  virtualKeyboard.tick(); // 0 down
  virtualKeyboard.setButtonState(0, LOW);
  virtualKeyboard.tick(); // 0 up
  
  virtualKeyboard.setButtonState(1, HIGH);
  virtualKeyboard.tick(); // 1 down
  virtualKeyboard.setButtonState(1, LOW);
  virtualKeyboard.tick(); // 1 up
  
  virtualKeyboard.setButtonState(1, HIGH);
  virtualKeyboard.tick(); // 1 down
  virtualKeyboard.setButtonState(1, LOW);
  virtualKeyboard.tick(); // 1 up
  
  virtualKeyboard.setButtonState(2, HIGH);
  virtualKeyboard.tick(); // 2 down
  virtualKeyboard.setButtonState(2, LOW);
  virtualKeyboard.tick(); // 2 up
  
  virtualKeyboard.setButtonState(2, HIGH);
  virtualKeyboard.tick(); // 2 down
  virtualKeyboard.setButtonState(2, LOW);
  virtualKeyboard.tick(); // 2 up

  virtualKeyboard.setButtonState(1, HIGH);
  virtualKeyboard.tick(); // 1 down
  virtualKeyboard.setButtonState(1, LOW);
  virtualKeyboard.tick(); // 1 up
}

void loop() {
  Serial.println("Start Loop");
  virtualKeyboard.setButtonState(0, digitalRead(button0Pin));
  virtualKeyboard.setButtonState(1, digitalRead(button1Pin));
  virtualKeyboard.setButtonState(2, digitalRead(button2Pin));  
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment