Created
August 30, 2018 14:51
-
-
Save julbrs/71bedce8d143fbc5c7300338c741145d to your computer and use it in GitHub Desktop.
Portal Gun Arduino
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
/* Display 4-digit numbers on a 5643S Dixie LED tube | |
copyright Yilun Yu | |
tutorial: http://osoyoo.com/?p=222 | |
*/ | |
const int ledPin1 = 16;// the number of the LED pin | |
const int ledPin2 = 15;// the number of the LED pin | |
const int ledPin3 = 14;// the number of the LED pin | |
const int ledTop = 9;// the number of the LED pin | |
int ledState = LOW; // ledState used to set the LED | |
unsigned long previousMillis = 0; // will store last time LED was updated | |
unsigned long previousMillisRefresh = 0; | |
const long interval = 100; // interval at which to blink (milliseconds) | |
const long refresh = 8; // interval at which to refresh screen | |
// LED display pin out | |
/* | |
* 1 E | |
* 2 D | |
* 3 DP | |
* 4 C | |
* 5 G | |
* 6 D4 | |
* 7 B | |
* 8 D3 | |
* 9 D2 | |
* 10 F | |
* 11 A | |
* 12 D1 | |
* | |
*/ | |
int a = 2; // pin 11 | |
int b = 6; // pin 7 | |
int c = 12; // pin 4 | |
int d = 8; // pin 2 | |
int e = 7; // pin 1 | |
int f = 3; // pin 10 | |
int g = 11; // pin 5 | |
int p = 13; // pin 3 | |
int d4 = 10; // pin 6 | |
int d3 = 5; // pin 8 | |
int d2 = 4; // pin 9 | |
int d1 = 1; // pin 12 | |
int val; | |
int encoderA = 18; // DT | |
int encoderB = 19; // CLK | |
int encoderPos = 0; | |
int encoderPinALast = LOW; | |
int buttonPin = 17; | |
int n = LOW; | |
int x = 10; | |
long del = 600; | |
void setup() | |
{ | |
// screen | |
pinMode(d1, OUTPUT); | |
pinMode(d2, OUTPUT); | |
pinMode(d3, OUTPUT); | |
pinMode(d4, OUTPUT); | |
pinMode(a, OUTPUT); | |
pinMode(b, OUTPUT); | |
pinMode(c, OUTPUT); | |
pinMode(d, OUTPUT); | |
pinMode(e, OUTPUT); | |
pinMode(f, OUTPUT); | |
pinMode(g, OUTPUT); | |
pinMode(p, OUTPUT); | |
pinMode(ledPin1, OUTPUT); | |
pinMode(ledPin2, OUTPUT); | |
pinMode(ledPin3, OUTPUT); | |
pinMode(ledTop, OUTPUT); | |
// encoder | |
pinMode(encoderA, INPUT); | |
pinMode(encoderB, INPUT); | |
//Serial.begin (9600); | |
pinMode(buttonPin, INPUT); | |
digitalWrite(buttonPin, HIGH); | |
} | |
void loop() { | |
// read encoder | |
n = digitalRead(encoderA); | |
if ((encoderPinALast == LOW) && (n == HIGH)) { | |
if (digitalRead(encoderB) == LOW) { | |
encoderPos--; | |
} else { | |
encoderPos++; | |
} | |
//Serial.print (encoder0Pos); | |
//Serial.print ("/"); | |
} | |
encoderPinALast = n; | |
// check button | |
if(digitalRead(buttonPin)==LOW){ | |
//button is being pushed | |
for(int b=0;b<100;b++) { | |
fire(); | |
if (ledState == LOW && b%10==0) { | |
ledState = HIGH; | |
} else { | |
ledState = LOW; | |
} | |
digitalWrite(ledPin1, ledState); | |
digitalWrite(ledPin2, ledState); | |
digitalWrite(ledPin3, ledState); | |
} | |
digitalWrite(ledPin1, LOW); | |
digitalWrite(ledPin2, LOW); | |
digitalWrite(ledPin3, LOW); | |
} | |
// check to see if it's time to blink the LED; that is, if the difference | |
// between the current time and last time you blinked the LED is bigger than | |
// the interval at which you want to blink the LED. | |
unsigned long currentMillis = millis(); | |
if (currentMillis - previousMillis >= refresh) { | |
if(random(20)>18) { | |
analogWrite(ledTop, random(150)+55); | |
} | |
previousMillis = currentMillis; | |
} | |
if (currentMillis - previousMillisRefresh >= refresh) { | |
showNum(encoderPos); | |
previousMillisRefresh = currentMillis; | |
} | |
} | |
void showNum(long n) { | |
clearLEDs(); | |
pickDigit(1); | |
dispDec(1); | |
pickLetter((n / 100) % 10); | |
delayMicroseconds(del); | |
clearLEDs(); | |
pickDigit(2); | |
pickNumber(1); | |
//pickNumber((n/100)%10); | |
delayMicroseconds(del); | |
clearLEDs(); | |
pickDigit(3); | |
pickNumber((n / 10) % 10); | |
delayMicroseconds(del); | |
pickDigit(4); | |
pickNumber(n % 10); | |
delayMicroseconds(del); | |
clearLEDs(); | |
} | |
void fire() { | |
clearLEDs(); | |
pickDigit(1); | |
lf(); | |
delayMicroseconds(del); | |
clearLEDs(); | |
pickDigit(2); | |
li(); | |
delayMicroseconds(del); | |
clearLEDs(); | |
pickDigit(3); | |
lr(); | |
delayMicroseconds(del); | |
clearLEDs(); | |
pickDigit(4); | |
le(); | |
delayMicroseconds(del); | |
} | |
void pickDigit(int x) { | |
digitalWrite(d1, HIGH); | |
digitalWrite(d2, HIGH); | |
digitalWrite(d3, HIGH); | |
digitalWrite(d4, HIGH); | |
switch (x) { | |
case 1: | |
digitalWrite(d1, LOW);break; | |
case 2: | |
digitalWrite(d2, LOW);break; | |
case 3: | |
digitalWrite(d3, LOW);break; | |
default: | |
digitalWrite(d4, LOW);break; | |
} | |
} | |
void pickNumber(int x) { | |
switch (x) { | |
default: | |
zero();break; | |
case 1: | |
one();break; | |
case 2: | |
two();break; | |
case 3: | |
three();break; | |
case 4: | |
four();break; | |
case 5: | |
five();break; | |
case 6: | |
six();break; | |
case 7: | |
seven();break; | |
case 8: | |
eight();break; | |
case 9: | |
nine();break; | |
} | |
} | |
void pickLetter(int x) { | |
switch (x) { | |
default: | |
la();break; | |
case 1: | |
eight();break; | |
case 2: | |
lc();break; | |
case 3: | |
zero();break; | |
case 4: | |
le();break; | |
case 5: | |
lf();break; | |
case 6: | |
six();break; | |
case 7: | |
lh();break; | |
case 8: | |
one();break; | |
case 9: | |
lj();break; | |
} | |
} | |
void dispDec(int x) { | |
digitalWrite(p, HIGH); | |
} | |
void clearLEDs() | |
{ | |
digitalWrite(a, LOW); | |
digitalWrite(b, LOW); | |
digitalWrite(c, LOW); | |
digitalWrite(d, LOW); | |
digitalWrite(e, LOW); | |
digitalWrite(f, LOW); | |
digitalWrite(g, LOW); | |
digitalWrite(p, LOW); | |
} | |
void zero(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, LOW); | |
} | |
void one(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, LOW); | |
digitalWrite(f, LOW); | |
digitalWrite(g, LOW); | |
} | |
void two(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, LOW); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, LOW); | |
digitalWrite(g, HIGH); | |
} | |
void three(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, LOW); | |
digitalWrite(f, LOW); | |
digitalWrite(g, HIGH); | |
} | |
void four(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, LOW); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void five(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, LOW); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, LOW); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void six(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, LOW); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void seven(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, LOW); | |
digitalWrite(f, LOW); | |
digitalWrite(g, LOW); | |
} | |
void eight(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void nine(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, LOW); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void la(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void lc(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, LOW); | |
digitalWrite(c, LOW); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, LOW); | |
} | |
void le(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, LOW); | |
digitalWrite(c, LOW); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void lf(){ | |
digitalWrite(a, HIGH); | |
digitalWrite(b, LOW); | |
digitalWrite(c, LOW); | |
digitalWrite(d, LOW); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void lh(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, HIGH); | |
digitalWrite(g, HIGH); | |
} | |
void li(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, LOW); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, LOW); | |
digitalWrite(e, LOW); | |
digitalWrite(f, LOW); | |
digitalWrite(g, LOW); | |
} | |
void lj(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, HIGH); | |
digitalWrite(c, HIGH); | |
digitalWrite(d, HIGH); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, LOW); | |
digitalWrite(g, LOW); | |
} | |
void lr(){ | |
digitalWrite(a, LOW); | |
digitalWrite(b, LOW); | |
digitalWrite(c, LOW); | |
digitalWrite(d, LOW); | |
digitalWrite(e, HIGH); | |
digitalWrite(f, LOW); | |
digitalWrite(g, HIGH); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment