|
|
@@ -0,0 +1,220 @@ |
|
|
|
/* |
|
|
|
*@author James McKenzie |
|
|
|
*@lang C89 Based |
|
|
|
*@contact lunarised@outlook.com |
|
|
|
*/ |
|
|
|
void setup() { |
|
|
|
pinMode(0, OUTPUT); |
|
|
|
pinMode(1, OUTPUT); |
|
|
|
pinMode(2, OUTPUT); |
|
|
|
pinMode(3, OUTPUT); |
|
|
|
pinMode(4, OUTPUT); |
|
|
|
pinMode(5, OUTPUT); |
|
|
|
pinMode(6, OUTPUT); |
|
|
|
pinMode(7, OUTPUT); |
|
|
|
pinMode (11, INPUT_PULLUP); |
|
|
|
pinMode (8, INPUT_PULLUP); |
|
|
|
pinMode (9, INPUT_PULLUP); |
|
|
|
pinMode (10, INPUT_PULLUP); |
|
|
|
int i = 0; |
|
|
|
int j = 0; |
|
|
|
int sum = 0; |
|
|
|
resetDisplay(); |
|
|
|
} |
|
|
|
int i; |
|
|
|
int j; |
|
|
|
int sum; |
|
|
|
int result; |
|
|
|
int error; |
|
|
|
void loop() { |
|
|
|
int error = 0; |
|
|
|
i = stateA(i); |
|
|
|
delay (250); |
|
|
|
j = stateA(j); |
|
|
|
delay(250); |
|
|
|
int operand = stateB(); |
|
|
|
stateC(operand); |
|
|
|
delay(250); |
|
|
|
stateD(); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
delay(1000); |
|
|
|
digitalWrite(1, HIGH); |
|
|
|
} |
|
|
|
int stateA(int val){ |
|
|
|
while (digitalRead(11)==HIGH){ |
|
|
|
if (digitalRead(8)==LOW){ |
|
|
|
val = (val + 1)%10; |
|
|
|
displayDigit(val, 100); |
|
|
|
} |
|
|
|
if (digitalRead(9)==LOW){ |
|
|
|
val = (val + 9)%10; |
|
|
|
displayDigit(val, 100); |
|
|
|
} |
|
|
|
displayDigit(val, 100); |
|
|
|
} |
|
|
|
return val; |
|
|
|
} |
|
|
|
int stateB(){ |
|
|
|
int operand = 0; |
|
|
|
digitalWrite(1, LOW); |
|
|
|
while (operand == 0){ |
|
|
|
if (digitalRead(11) == LOW){ |
|
|
|
operand = 1; |
|
|
|
} |
|
|
|
if (digitalRead(10) == LOW){ |
|
|
|
operand = 2; |
|
|
|
} |
|
|
|
if (digitalRead(9) == LOW){ |
|
|
|
operand = 3; |
|
|
|
} |
|
|
|
if (digitalRead(8) == LOW){ |
|
|
|
operand = 4; |
|
|
|
} |
|
|
|
} |
|
|
|
digitalWrite(1, HIGH); |
|
|
|
return operand; |
|
|
|
} |
|
|
|
void stateC(int operand){ |
|
|
|
if (operand == 1){ |
|
|
|
sum = i + j; |
|
|
|
} |
|
|
|
if (operand == 2){ |
|
|
|
sum = i - j; |
|
|
|
} |
|
|
|
if (operand == 3){ |
|
|
|
sum = i * j; |
|
|
|
} |
|
|
|
if (operand == 4){ |
|
|
|
if (j == 0){ |
|
|
|
error = 1; |
|
|
|
} |
|
|
|
else{ |
|
|
|
sum = i / j; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
void stateD(){ |
|
|
|
if (error == 1){ |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(4, LOW); |
|
|
|
delay (5000); |
|
|
|
error = 0; |
|
|
|
} |
|
|
|
else{ |
|
|
|
while (digitalRead(11)==HIGH){ |
|
|
|
int splitSum = sum; |
|
|
|
while(splitSum >= 9){ |
|
|
|
displayDigit(splitSum%10, 250); |
|
|
|
splitSum /= 10; |
|
|
|
} |
|
|
|
displayDigit(splitSum, 250); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
void displayDigit(int inp, int fTime){ |
|
|
|
switch (inp){ |
|
|
|
case 1: |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(4, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
|
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(4, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 7: |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 8: |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(4, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 9: |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(1, LOW); |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
case 0: |
|
|
|
digitalWrite(2, LOW); |
|
|
|
digitalWrite(0, LOW); |
|
|
|
digitalWrite(3, LOW); |
|
|
|
digitalWrite(4, LOW); |
|
|
|
digitalWrite(5, LOW); |
|
|
|
digitalWrite(6, LOW); |
|
|
|
delay(fTime); |
|
|
|
resetDisplay(); |
|
|
|
break; |
|
|
|
} |
|
|
|
}; |
|
|
|
void resetDisplay(){ |
|
|
|
digitalWrite(0, HIGH); |
|
|
|
digitalWrite(1, HIGH); |
|
|
|
digitalWrite(2, HIGH); |
|
|
|
digitalWrite(3, HIGH); |
|
|
|
digitalWrite(4, HIGH); |
|
|
|
digitalWrite(5, HIGH); |
|
|
|
digitalWrite(6, HIGH); |
|
|
|
digitalWrite(7, HIGH); |
|
|
|
} |