From 0c6fecd654c4e375d8c57ea5adc557aa9b188ac2 Mon Sep 17 00:00:00 2001 From: giuliof Date: Sat, 25 Sep 2021 12:06:52 +0200 Subject: [PATCH] Archiviato il codice sorgente (last edit 2018). --- Friction-o-meter/Friction-o-meter.ino | 113 ++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Friction-o-meter/Friction-o-meter.ino diff --git a/Friction-o-meter/Friction-o-meter.ino b/Friction-o-meter/Friction-o-meter.ino new file mode 100644 index 0000000..0cd33b7 --- /dev/null +++ b/Friction-o-meter/Friction-o-meter.ino @@ -0,0 +1,113 @@ +#include + +const byte sensore_1 = A3; +const byte sensore_2 = A4; +const byte sensore_3 = A5; + +const byte soglia = 500; + +const byte pulsanti = A0; +/* + Select = 733 + Left = 514 + Up = 144 + Down = 343 + Right = 0 +*/ + +LiquidCrystal lcd (8, 9, 4, 5, 6, 7); + +unsigned long int start_1, end_1; // Istanti assoluti (rispetto all'accensione della scheda) +unsigned long int start_2, end_2; // di inizio e fine del "volo". La differenza tra gli istanti +unsigned long int start_3, end_3; // sarĂ  la misura del tempo di volo. + +void setup () { + lcd.begin (16, 2); // Inizializzazione dello schermo LCD sul bus I2C + lcd.clear(); + pinMode (sensore_1, INPUT); + pinMode (sensore_2, INPUT); + pinMode (sensore_3, INPUT); + pinMode (pulsanti, INPUT); + + Serial.begin(115200); +} + +void loop () { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Friction-o-meter"); + lcd.setCursor(0, 1); + lcd.print(" Premere Select "); + + while (analogRead(pulsanti) < 700 || analogRead(pulsanti) > 800) { // Attende pressione di select + ; + } + + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Friction-o-meter"); + lcd.setCursor(0, 1); + lcd.print("Acquisizione...."); + + start_1 = 0; + start_2 = 0; + start_3 = 0; + end_1 = 0; + end_2 = 0; + end_3 = 0; + + while (start_1 == 0 || start_2 == 0 || start_3 == 0 || end_1 == 0 || end_2 == 0 || end_3 == 0) { + if (start_1 == 0 && analogRead(sensore_1) <= soglia){ + start_1 = millis(); + } + if (start_1 != 0 && end_1 == 0 && analogRead(sensore_1) >= soglia){ + end_1 = millis(); + } + + if (start_2 == 0 && analogRead(sensore_2) <= soglia){ + start_2 = millis(); + } + if (start_2 != 0 && end_2 == 0 && analogRead(sensore_2) >= soglia){ + end_2 = millis(); + } + + if (start_3 == 0 && analogRead(sensore_3) <= soglia){ + start_3 = millis(); + } + if (start_3 != 0 && end_3 == 0 && analogRead(sensore_3) >= soglia){ + end_3 = millis(); + } + + delay(1); + } + + // Stampa i risultati anche su seriale + Serial.println(((start_2 - start_1) + (end_2 - end_1))/2); + Serial.println(((start_3 - start_2) + (end_3 - end_2))/2); + Serial.println(end_1 - start_1); + Serial.println(end_2 - start_2); + Serial.println(end_3 - start_3); + + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Ris:"); + lcd.setCursor(5,0); + lcd.print(((start_2 - start_1) + (end_2 - end_1))/2); + lcd.setCursor(10,0); + lcd.print(((start_3 - start_2) + (end_3 - end_2))/2); + lcd.setCursor(0, 1); + lcd.print(end_1 - start_1); + lcd.setCursor(5, 1); + lcd.print(end_2 - start_2); + lcd.setCursor(10, 1); + lcd.print(end_3 - start_3); + + while (analogRead(pulsanti) < 700 || analogRead(pulsanti) > 800) { // Ciclo di attesa per mantenere i risultati fino alla pressione di Select + ; + } + + while (analogRead(pulsanti) > 700 && analogRead(pulsanti) < 800) { // Attesa per il rilascio del pulsante + ; + } +} +