-
-
Save danteoh/e2053f28da48829812a2ddc548427e51 to your computer and use it in GitHub Desktop.
Tass Sequence for Arduino MEga
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
#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