1void setup() {
2
3 DDRB = DDRB | B00111111;
4 DDRD = DDRD | B11111100;
5
6 PORTB = PORTB | B00111111;
7 PORTD = PORTD | B11111100;
8
9
10 pinMode(A1, OUTPUT);
11 digitalWrite(A1,1);
12 pinMode(A2, OUTPUT);
13 digitalWrite(A2,1);
14
15 pinMode(A0, INPUT);
16
17 Serial.begin(9600);
18 delay(1000);
19
20}
21
22unsigned int nf [8] = {256*B00000000+B00000000,
23 256*B00111110+B10000100,
24 256*B00100000+B11000100,
25 256*B00100000+B10100100,
26 256*B00111100+B10010100,
27 256*B00100000+B10001100,
28 256*B00100000+B10000100,
29 256*B00000000+B00000000
30 };
31
32unsigned int heart [8] = {256*B00000000+B00000000,
33 256*B00001110+B11100000,
34 256*B00011111+B11110000,
35 256*B00111111+B11111000,
36 256*B00001111+B11100000,
37 256*B00000011+B10000000,
38 256*B00000001+B00000000,
39 256*B00000000+B00000000
40 };
41
42unsigned int v [8] = {256*B00000000+B00000000,
43 256*B00100000+B00000100,
44 256*B00010000+B00001000,
45 256*B00001000+B00010000,
46 256*B00000100+B00100000,
47 256*B00000010+B01000000,
48 256*B00000001+B10000000,
49 256*B00000000+B00000000
50 };
51
52
53
54
55
56void loop() {
57 byte curPos = measPos();
58 toScreen(nf[curPos]);
59
60}
61
62
63
64void toScreen(int msg) {
65 PORTB = ~highByte(msg);
66 PORTD = ~lowByte(msg);
67}
68
69
70byte measPos() {
71
72 unsigned int E = analogRead(A0);
73
74
75 const unsigned int Emax = 800;
76 const unsigned int Emin = 600;
77
78 if (E <= Emin) return 0;
79 if (E >= Emax) return 0;
80
81
82 const unsigned int maxInt = 65535;
83 const unsigned int recEmax = maxInt/Emax;
84 const unsigned int recEmin = maxInt/Emin;
85 const byte numPos = 8;
86 unsigned int recE = maxInt/E;
87 byte measPos = (recE - recEmax) * numPos / (recEmin - recEmax);
88
89
90
91
92 return numPos-measPos-1;
93}
94
95