const byte LEDS[] = {13,12,11,10,9,8,7,6};
const byte SIZE = 8;
const byte CARD[] = {1,2,3,4};
const byte BASE[] = {1,2,4,8,16,32,64, 128};
const byte IN_DATA[] = {3,5,2,1,7};
const byte IN_SIZE = 5;
short it = 0;
int sum = 0;
void leds_on( byte );
void leds_off( void );
void test_numbers( int );
void setup() {
/* Serial setup for debugging */
Serial.begin(9600);
/* Set the 8 led ports as output */
for (byte i = 0; i < SIZE; i++) {
pinMode(LEDS[i], OUTPUT);
}
/* Setup button pin as input */
pinMode(2, INPUT);
}
void loop() {
/* If end of punched card then show sum and exit */
if (it >= IN_SIZE) {
leds_on(sum);
delay(3000);
leds_off();
exit(0);
}
/* If button pressed show next number in punched card */
if (digitalRead(2)) {
leds_on(IN_DATA[it]);
sum += IN_DATA[it];
it++;
delay(1000);
leds_off();
delay(1000);
}
}
/* Shows a number on the leds */
void leds_on(byte num) {
/* From higher led until lower led*/
for (signed char i = SIZE-1; i >= 0; i--) {
/* Turn on led if num is higher than led base */
if (num >= BASE[i]) {
digitalWrite(LEDS[i], HIGH);
/* Subtract led base to num to reduce it*/
num -= BASE[i];
}
}
}
void leds_off( void ) {
for (byte i=0; i < SIZE; i++) {
digitalWrite(LEDS[i], LOW);
}
}
/* Test numbers from 0 to 255*/
void test_numbers(int time) {
for (byte i = 0; i < 256; i++) {
leds_on(i);
delay(time);
leds_off();
delay(time);
}
}