Skip to content

Instantly share code, notes, and snippets.

@julbrs
Created August 30, 2018 14:51
Show Gist options
  • Save julbrs/71bedce8d143fbc5c7300338c741145d to your computer and use it in GitHub Desktop.
Save julbrs/71bedce8d143fbc5c7300338c741145d to your computer and use it in GitHub Desktop.
Portal Gun Arduino
/* 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