/* *@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); }