ciao a tutti premetto che sono nuovo su questo forum e sto cercando di fare un piccolo progetto concettualmente molto semplice: quando una fotoresistenza rileva un valore diverso da quello precedente parte il timer e quando la seconda fotoresistenza rileva anche essa una variazione interrompe il timer. Infine vorrei che il valore dell'intervallo si leggesse su uno schermo lcd. Purtroppo però ho scritto uno sketch ma non visualizzo alcun valore sapreste dirmi cosa dovrei correggere?
#
#include "Arduino.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
unsigned long current_time_1;
unsigned long timeintervallo; // intervallo
boolean timer_running_1 = 0;
int sensorValue1 ; // A1
int sensorValue2 ; // A2
int sensorHigh1 = 0; // valore massimo di luce da calibrare
int sensorHigh2 = 0; // valore massimo di luce da calibrare
int sensorLow1 = 0; // valore minimo di luce da calibrare
int sensorLow2 = 50; // valore minimo di luce
;
void setup(){ {
pinMode(6, OUTPUT);
pinMode(7, INPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Weilaaaaa!!");
delay (2000);
}
delay (550);
lcd.clear();
lcd.print("cominciamo!");
delay (1000);
lcd.clear();
lcd.print(digitalRead(7));
delay (1000);
lcd.clear();
}
void loop () {
lcd.clear();
if (digitalRead (7) == HIGH) { while (digitalRead (7) == HIGH) {
calibrate(); }}
int sensorValue0 = analogRead (A0);
int sensorValue1 = analogRead (A1);
Serial.print(" , 1 alto = ");
Serial.print (sensorHigh1);
Serial.print(" , 2 alto = ");
Serial.println (sensorHigh2);
Serial.print(" , 1 attuale = ");
Serial.print (sensorValue1);
Serial.print(" , 2 attuale = ");
Serial.println (sensorValue2);
Serial.print(" ,1 basso = ");
Serial.print (sensorLow1);
Serial.print(" ,2 basso = ");
Serial.println (sensorLow2);
if (sensorHigh1 - 5 > sensorValue1 > sensorLow1 + 5); // se il valore del sensore si abbassa ed è compreso tra il massimo e minimo esegui le azioni sottostanti
{
timer_running_1 = 1; // condizione di inizio timer
current_time_1 = millis(); // salva il valore di attuale di tempo
timer(); // esegui loop chiamato timer()
}
}
void timer() {
if(timer_running_1 == 1) // se il timer è incominciato esegui azioni sottostanti
{
sensorValue2 = analogRead (A2); // leggi valore A2
while (sensorValue2 < sensorHigh2 - 200) {
sensorValue2 = analogRead (A2);} // finchè valore A2 non scende di 200 sotto sensorHigh2 continua a leggere i valori sul pin A2
if(sensorValue2 < sensorHigh2 - 200){
timer_running_1 = 0; // se il valore di A2 è sceso di 200 sotto sensorHigh2 interrompi il timer
unsigned long timeintervallo = millis() - current_time_1; // calcola l'intervallo
lcd.print ("intervallo"); // invia il valore dell'intervallo allo schermo lcd
lcd.setCursor(0, 1);
lcd.print (timeintervallo);
delay(2000);
lcd.clear();
}
}
}
void calibrate (){ //calibra i valori alti e bassi di luce
digitalWrite (6, HIGH);
delay(1000);
digitalWrite (6, LOW);
sensorLow1 = analogRead (A1);
sensorHigh2 = analogRead (A2);
delay (200);
lcd.clear();
lcd.print("low 1");
lcd.setCursor(0, 1);
lcd.print("impostato");
delay(1500);
lcd.clear();
lcd.print("cambia lo stato ");
lcd.setCursor(0, 1);
lcd.print("fisico hai 5sec.");
digitalWrite (6, HIGH);
delay (5000);
digitalWrite (6, LOW);
lcd.clear();
delay (500);
digitalWrite (6, HIGH);
delay(1000);
digitalWrite (6, LOW);
sensorHigh1 = analogRead (A1);
delay (200);
lcd.print("high 1");
lcd.setCursor(0, 1);
lcd.print("impostato");
delay (1500);
lcd.clear();
lcd.print("calibrazione ");
lcd.setCursor(0, 1);
lcd.print("terminata");
delay (2000);
lcd.clear();
lcd.print("lascia il pulsante ");
lcd.setCursor(0, 1);
lcd.print("hai 2 sec.");
delay(2000);
lcd.clear();
lcd.print("sistema il tutto ");
lcd.setCursor(0, 1);
lcd.print("alla svelta...");
delay(10000);
lcd.clear();
}
EDIT BY MOD: codice incluso negli appositi tag