Last active
January 18, 2017 16:46
-
-
Save vainamov/1ec1973e8ee6d0a2ae94d2b1adbb030f to your computer and use it in GitHub Desktop.
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
#include "Qub.h" | |
#include "numbers.h" | |
String matNumber = "70453310"; | |
Qub qub; | |
int mode = 0; | |
int ledState = LOW; | |
long previousMillis = 0; | |
long interval = 500; | |
int numberIndex = 0; | |
int directionIndex = -1; | |
int rndNumber = 0; | |
void setup () { | |
pinMode(A5, INPUT_PULLUP); | |
} | |
int numberLayer1 = -1; | |
int numberLayer2 = -1; | |
int numberLayer3 = -1; | |
int blinkIndex = 0; | |
void main_displayMatNr() { | |
if (numberIndex >= matNumber.length() + 3) { | |
if (blinkIndex < 3) { | |
qub.enableLEDs(); | |
delay(250); | |
qub.disableLEDs(); | |
delay(250); | |
blinkIndex++; | |
} else { | |
blinkIndex = 0; | |
numberIndex= 0; | |
} | |
} | |
unsigned long currentMillis = millis(); | |
if (currentMillis - previousMillis > 1) { | |
qub.disableLEDs(); | |
if (numberLayer3 > -1) { | |
qub.enableLayer(3); | |
for (int i = 0; i < 3; i++) { | |
for (int j = 0; j < 3; j++) { | |
digitalWrite((i * 3)+(j + 2), patterns[numberLayer3][i][j]); | |
} | |
} | |
delay(1); | |
} | |
qub.disableLEDs(); | |
if (numberLayer2 > -1) { | |
qub.enableLayer(2); | |
for (int i = 0; i < 3; i++) { | |
for (int j = 0; j < 3; j++) { | |
digitalWrite((i * 3) + (j + 2), patterns[numberLayer2][i][j]); | |
} | |
} | |
delay(1); | |
} | |
qub.disableLEDs(); | |
if (numberLayer1 > -1) { | |
qub.enableLayer(1); | |
for (int i = 0; i < 3; i++) { | |
for (int j = 0; j < 3; j++) { | |
digitalWrite((i * 3) + (j + 2), patterns[numberLayer1][i][j]); | |
} | |
} | |
delay(1); | |
} | |
} | |
currentMillis = millis(); | |
if (currentMillis - previousMillis > 1000) { | |
previousMillis = currentMillis; | |
numberLayer3 = numberLayer2; | |
numberLayer2 = numberLayer1; | |
int parsedNumber; | |
if (matNumber.substring(numberIndex, numberIndex+1) == "") { | |
parsedNumber = -1; | |
} else { | |
parsedNumber = matNumber.substring(numberIndex, numberIndex+1).toInt(); | |
} | |
numberLayer1 = parsedNumber; | |
numberIndex++; | |
} | |
} | |
void main_blink() { | |
unsigned long currentMillis = millis(); | |
if(currentMillis - previousMillis > interval) { | |
previousMillis = currentMillis; | |
if (ledState == LOW) { | |
ledState = HIGH; | |
qub.enableLED(1,1); | |
} else { | |
ledState = LOW; | |
qub.disableLEDs(); | |
} | |
} | |
} | |
void main_poti() { | |
float frequency = 100; | |
float cycleLength = 1000000 / frequency; | |
float dutyCycle; | |
int timeOn; | |
int timeOff; | |
float vOut; | |
int val = analogRead(A7); | |
vOut = map(val, 0, 1024, 0, 255); | |
dutyCycle = vOut/255; | |
timeOn = dutyCycle * cycleLength; | |
timeOff = cycleLength - timeOn; | |
if (timeOn > 0) { | |
qub.enableLEDs(); | |
delayMicroseconds(timeOn); | |
} | |
qub.disableLEDs(); | |
delayMicroseconds(timeOff); | |
} | |
void main_turn(int number) { | |
directionIndex++; | |
if (directionIndex >= 8) { | |
directionIndex = 0; | |
} | |
for (int i = 0; i < directionIndex; i++) { | |
int store = patterns[number][2][2]; | |
patterns[number][2][2] = patterns[number][1][2]; | |
patterns[number][1][2] = patterns[number][0][2]; | |
patterns[number][0][2] = patterns[number][0][1]; | |
patterns[number][0][1] = patterns[number][0][0]; | |
patterns[number][0][0] = patterns[number][1][0]; | |
patterns[number][1][0] = patterns[number][2][0]; | |
patterns[number][2][0] = patterns[number][2][1]; | |
patterns[number][2][1] = store; | |
} | |
unsigned long cMillis = millis(); | |
previousMillis = cMillis; | |
while(cMillis - previousMillis <= qub.getPotiData()) { | |
cMillis = millis(); | |
for (int i = 0; i < 3; i++) { | |
for (int j = 0; j < 3; j++) { | |
int Pin = (i * 3) + (j + 2); | |
switch (directionIndex) { | |
case 0: | |
if (Pin == 8 || Pin == 9 || Pin == 10) { | |
digitalWrite(13, 1); | |
} else if (Pin == 5 || Pin == 6 || Pin == 7) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(11, 1); | |
} | |
break; | |
case 1: | |
if (Pin == 9 || Pin == 10 || Pin == 7) { | |
digitalWrite(13, 1); | |
} else if (Pin == 8 || Pin == 6 || Pin == 4) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(11, 1); | |
} | |
break; | |
case 2: | |
if (Pin == 10 || Pin == 7 || Pin == 4) { | |
digitalWrite(11, 1); | |
} else if (Pin == 3 || Pin == 6 || Pin == 9) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(13, 1); | |
} | |
break; | |
case 3: | |
if (Pin == 7 || Pin == 4 || Pin == 3) { | |
digitalWrite(11, 1); | |
} else if (Pin == 2 || Pin == 6 || Pin == 10) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(13, 1); | |
} | |
break; | |
case 4: | |
if (Pin == 4 || Pin == 3 || Pin == 2) { | |
digitalWrite(13, 1); | |
} else if (Pin == 5 || Pin == 6 || Pin == 7) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(11, 1); | |
} | |
break; | |
case 5: | |
if (Pin == 3 || Pin == 2 || Pin == 5) { | |
digitalWrite(13, 1); | |
} else if (Pin == 8 || Pin == 6 || Pin == 4) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(11, 1); | |
} | |
break; | |
case 6: | |
if (Pin == 2 || Pin == 5 || Pin == 8) { | |
digitalWrite(11, 1); | |
} else if (Pin == 3 || Pin == 6 || Pin == 9) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(13, 1); | |
} | |
break; | |
case 7: | |
if (Pin == 5 || Pin == 8 || Pin == 9) { | |
digitalWrite(11, 1); | |
} else if (Pin == 2 || Pin == 6 || Pin == 10) { | |
digitalWrite(12, 1); | |
} else { | |
digitalWrite(13, 1); | |
} | |
break; | |
} | |
digitalWrite(Pin, patterns[number][i][j]); | |
delayMicroseconds(100); | |
digitalWrite(Pin, 0); | |
digitalWrite(11, 0); | |
digitalWrite(12, 0); | |
digitalWrite(13, 0); | |
} | |
} | |
} | |
for (int j = 8; j > directionIndex; j--) { | |
int store = patterns[number][2][2]; | |
patterns[number][2][2] = patterns[number][1][2]; | |
patterns[number][1][2] = patterns[number][0][2]; | |
patterns[number][0][2] = patterns[number][0][1]; | |
patterns[number][0][1] = patterns[number][0][0]; | |
patterns[number][0][0] = patterns[number][1][0]; | |
patterns[number][1][0] = patterns[number][2][0]; | |
patterns[number][2][0] = patterns[number][2][1]; | |
patterns[number][2][1] = store; | |
} | |
} | |
void loop() { | |
int buttonIn = analogRead(A5); | |
if (buttonIn >= 18 && buttonIn <= 22) { | |
mode = 1; | |
previousMillis = 0; | |
} else if (buttonIn >= 24 && buttonIn <= 28) { | |
mode = 2; | |
numberIndex = 0; | |
numberLayer1 = -1; | |
numberLayer2 = -1; | |
numberLayer3 = -1; | |
qub.disableLEDs(); | |
previousMillis = 0; | |
} else if (buttonIn >= 30 && buttonIn <= 34) { | |
mode = 3; | |
previousMillis = 0; | |
rndNumber = rand() % 6 + 1; | |
} | |
switch (mode) { | |
case 1: | |
main_poti(); | |
break; | |
case 2: | |
main_displayMatNr(); | |
break; | |
case 3: | |
main_turn(rndNumber); | |
break; | |
default: | |
main_blink(); | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment