const int segment_pins[]= { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; const int wire_pins[]= { A2, A3, A4, A5 }; const uint8_t fail_segments[]= { 0b11111111, 0b10000000, 0b10111110, 0b10000000, 0b11011110, 0b10110000, 0b11111001, 0b11011110, 0b10000000, 0b11111111, 0b10000000 }; const uint8_t sucess_segments[]= { 0b10111110, 0b10000000, 0b10111000, 0b10110000, 0b10011100, 0b11111001, 0b10000000 }; /* * Hexadecimal numbers encoded for display * on a seven segment display */ const uint8_t hex_to_segments[]= { //.GFEDCBA 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111, // 9 0b01110111, // A 0b01111100, // B 0b00111001, // C 0b01011110, // D 0b01111001, // E 0b01110001 // F }; /** * Display the binary encoded segments * in seg */ void display_segments(uint8_t seg) { for (int i=0; i<8; i++) { digitalWrite(segment_pins[i], seg & (1<=0; i--) { display_segments(hex_to_segments[i]); uint8_t wires= 0; for (int w=0; w<4; w++) { wires<<=1; wires|= digitalRead(wire_pins[w]) ? 1 : 0; } if (wires & 10) fail_animation(); if (!(wires ^ 5)) sucess_animation(); delay(1000); } fail_animation(); }