Skip to content

Instantly share code, notes, and snippets.

@danteoh
Created January 9, 2023 20:55
Show Gist options
  • Save danteoh/e2053f28da48829812a2ddc548427e51 to your computer and use it in GitHub Desktop.
Save danteoh/e2053f28da48829812a2ddc548427e51 to your computer and use it in GitHub Desktop.
Tass Sequence for Arduino MEga
#define ARRAY_SIZE(array) ((sizeof(array))/(sizeof(array[0])))
int ledPin1 = 50; // LED connected to digital pin 50
int ledPin2 = 51; // LED connected to digital pin 51
int ledPin3 = 52; // LED connected to digital pin 52
int ledPin4 = 53; // LED connected to digital pin 53
int ledPinStatus = 31; // LED connected to digital pin 50
#define SW 8
int standardON = 100;
int standardOFF = 66;
int lastSequence = 0;
int lastRandom = 0;
int mode = 0;
int sequence[32] = { 3, 2, 4, 1, 1, 2, 4, 3, 2, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 1, 2, 1, 3, 4, 1, 3, 4, 2 };
int pinReferences[5] = { 0, ledPin1, ledPin2, ledPin3, ledPin4 };
int getRandomWithinRange() {
return random(1,ARRAY_SIZE(pinReferences));
}
int getDifferentRandom() {
int nextRandom = 0;
do {
nextRandom = getRandomWithinRange();
} while (nextRandom == lastRandom);
lastRandom = nextRandom;
return nextRandom;
}
// pin clearer
void clearPins() {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
}
// pin setter
void setPin(int pinReference) {
if (pinReference > 0) {
digitalWrite(pinReferences[pinReference], HIGH);
}
delay(standardON);
if (pinReference > 0) {
digitalWrite(pinReferences[pinReference], LOW);
}
delay(standardOFF);
}
// last known sequence in array
int getNextSequencePin() {
if (lastSequence == ARRAY_SIZE(sequence) - 2) {
lastSequence = 0;
} else {
lastSequence++;
}
// random mode
if (mode == 1) {
if (lastSequence > 24) {
return 0;
}
return getDifferentRandom();
} else {
// return 1;
return sequence[lastSequence];
}
}
void readMode() {
int reading = digitalRead(SW);
mode = reading ? 0 : 1;
}
void setup() {
analogWrite(11,100); // Generate PWM signal at pin D11, value of 100 (out of 255)
readMode();
pinMode(SW,INPUT_PULLUP);
pinMode(ledPin1, OUTPUT); // sets the digital pin as output
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
pinMode(ledPin3, OUTPUT); // sets the digital pin as output
pinMode(ledPin4, OUTPUT); // sets the digital pin as output
pinMode(ledPinStatus, OUTPUT); // sets the digital pin as output
digitalWrite(ledPinStatus, HIGH);
delay(1000);
digitalWrite(ledPinStatus, LOW);
delay(500);
digitalWrite(ledPinStatus, HIGH);
delay(1000);
digitalWrite(ledPinStatus, LOW);
delay(500);
digitalWrite(ledPinStatus, HIGH);
delay(1000);
clearPins();
}
void loop() {
clearPins();
int nextSequence = getNextSequencePin();
setPin(nextSequence);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment