Skip to content

Instantly share code, notes, and snippets.

@vainamov
Last active January 18, 2017 16:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vainamov/1ec1973e8ee6d0a2ae94d2b1adbb030f to your computer and use it in GitHub Desktop.
Save vainamov/1ec1973e8ee6d0a2ae94d2b1adbb030f to your computer and use it in GitHub Desktop.
#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