esercizio_03_riflessi.ino
#define NUMPROVE 10
#define LEDPIN 13
#define APIN 10
#define BPIN 9
#define CPIN 6
#define DPIN 5
#define EPIN 4
#define FPIN 11
#define GPIN 12
#define DPPIN 7
#define S1PIN 8
#define S2PIN 3
#define S3PIN 2
#define LUCE 1
#define TEMP 0
#define NUMSEGS 8
char segments [] = {
APIN,
BPIN,
CPIN,
DPIN,
EPIN,
FPIN,
GPIN,
DPPIN
};
boolean cifre [16][7] = {
{true, true, true, true, true, true, false }, {false, true, true, false, false, false, false }, {true, true, false, true, true, false, true }, {true, true, true, true, false, false, true }, {false, true, true, false, false, true, true }, {true, false, true, true, false, true, true }, {true, false, true, true, true, true, true }, {true, true, true, false, false, false, false }, {true, true, true, true, true, true, true }, {true, true, true, true, false, true, true }, {true, true, true, false, true, true, true }, {false, false, true, true, true, true, true }, {true, false, false, true, true, true, false }, {false, true, true, true, true, false, true }, {true, false, false, true, true, true, true }, {true, false, false, false, true, true, true }, };
void setup () {
int i;
for (i = 0; i < NUMSEGS; i++) {
pinMode(segments [i], OUTPUT); digitalWrite(segments [i], HIGH); }
Serial.begin (9600); randomSeed(analogRead(5)); }
void digit (int n) {
int i;
n = n % 16; for (i = 0; i < 7; i++) {
digitalWrite(segments [i], (cifre[n][i]) ? LOW : HIGH); }
}
void resetDisp () {
int i;
for (i = 0; i < NUMSEGS; i++) {
digitalWrite(segments [i], HIGH); }
}
void loop () {
int i = 0;
int side;
long startTime = micros ();
long totale = 0;
long minimo = 10000000;
long massimo = 0;
resetDisp (); digitalWrite(APIN, LOW);
while (digitalRead(S2PIN)) { if (micros () > startTime + 1000000) { startTime = micros ();
switch (i++ % 3) {
case 0:
digitalWrite(APIN, HIGH);
digitalWrite(GPIN, LOW);
break;
case 1:
digitalWrite(GPIN, HIGH);
digitalWrite(DPIN, LOW);
break;
case 2:
digitalWrite(DPIN, HIGH);
digitalWrite(APIN, LOW);
break;
}
}
}
delay(10); if (!digitalRead(S2PIN)) { while (!digitalRead(S2PIN)); }
for (i=0; i < NUMPROVE; i++) { int bottone;
resetDisp (); delay (random (1500,2500)); if (random (2)) { digitalWrite(EPIN, LOW); digitalWrite(FPIN, LOW);
bottone=S3PIN; } else {
digitalWrite(BPIN, LOW); digitalWrite(CPIN, LOW);
bottone=S1PIN; }
startTime = micros ();
if (digitalRead(S1PIN) && digitalRead(S3PIN)) { while (digitalRead(S1PIN) && digitalRead(S3PIN));
if (!digitalRead(S1PIN) && !digitalRead(S3PIN)) {
i --; } else {
if (!digitalRead(bottone)) { long riflesso = micros () - startTime; totale += riflesso; if (riflesso < minimo) { minimo = riflesso; }
if (riflesso > massimo) { massimo = riflesso; }
} else {
i--; }
}
} else {
i--; }
while (!digitalRead(S1PIN) || !digitalRead(S3PIN)); }
Serial.print ("Riflesso minimo = ");
Serial.print (minimo);
Serial.print (" massimo = ");
Serial.print (massimo);
Serial.print (" media = ");
Serial.println (totale / NUMPROVE);
digit (totale / 50000 / NUMPROVE);
delay (2500);
}