e pensa che dovrei ancora inserire 5 relay che facciano funzionare le pompe dell acquario alternandosi
e inserire l'orologio per dare a loro un ora a cui accendersi
insomma sono gia 2 settimane che ci sbatto la testa non riesco a far funzionare 2 sensori di temperatura
prima di tutto modifica il tuo post inserendo lo sketch tra i tag code (pulsante </> sopra le faccine)...poi il tuo sketch ha qualche errore...tipo:
tu scrivi lcd.begin(16,2) ma devi scrivere lcd.begin()
nel loop inserisci due volte la variabile locale "int celsius"....la variabile basta definirla una volta sola quindi al sencondo int celsius togli la int.
mancano un paio di ";" nelle variabili globali (quelle scritte in alto).
avevi arlato di difficoltà nel creare e richiamare funzioni...puoi spiegare meglio? altrimenti mi fermo agli errori di compilazione.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo del display a 0x27 per 16 caratteri per 2 linee
LiquidCrystal_I2C lcd(0x27,16,2);
int min_in = 102; // corrisponde a 0.50v
int min_in2 = 102; // corrisponde a 0.50v
int max_in = 205; // corrisponde a 1.00 v
int max_in2 = 205;// corrisponde a 1.00v
int min_out = 0;// corrisponde a 0c
int min_out2 = 0;// corrisponde a 0c
int max_out = 50;// corrisponde a 50c
int max_out2 = 50;// corrisponde a 50c
int raw_temp = 0;// variabile temperatura grezza
int raw_temp2 = 0;// variabile temperatura grezza
float temperatura = 0.00; // temp memorizzata in decimali
float temperatura2 = 0.00;// temp memorizzata in decimali
void setup(){
lcd.init();// inizializza il display
lcd.backlight();//accende la retroilluminazione
pinMode(A0, INPUT);//imput acqua vasca
pinMode(A1, INPUT);// imput aria vasca filtro
pinMode(A2, INPUT);// imput livello acqua filtro
pinMode(2, OUTPUT); // relay riscaldamento acqua
pinMode(3, OUTPUT);// relay ventola raffreddamento ambiente filtro
}
void loop() {
raw_temp = analogRead(A0);
raw_temp2 = analogRead(A1);
temperatura = map(raw_temp, min_in, max_in,min_out, max_out);
temperatura2 = map(raw_temp, min_in, max_in,min_out, max_out);
lcd.setCursor(0, 0);
lcd.print("T ACQUA ");
lcd.print(temperatura);
lcd.setCursor(0, 1);
lcd.print("T ARIA ");
lcd.print(temperatura2);
delay(3000);
lcd.clear();
if (temperatura < 36)digitalWrite(2, HIGH);
else digitalWrite(2, LOW);
if (temperatura2 >=25)digitalWrite(3, HIGH);
else digitalWrite(3, LOW);
int livello = analogRead(A2);
lcd.setCursor(0, 0);
lcd.print("LIVELLO ACQUA");
lcd.setCursor(0, 1);
lcd.print("FILTRO ");
lcd.print(livello);
delay(3000);
}
qui ho provato in maniera diversa e forse rende meglio l'idea di cosa vorrei fare.
vorrei inserire i messaggi ogni passaggio che fa il programma.
vedi vorrei controllare la temperatura acqua, aria del vano filtro, livello acqua nel filtro , poi inserire i relay che fanno partire il riscaldamento o la ventola per far uscire l'aria calda dal vano filtro , poi mi piacerebbe inserire un pulsante che una volta premuto mi ferma tutte le pompe dell'acquario attiva la mangiatoia poi dopo un tott tempo le fa ripartire.
nella vasca ci sono 3 pompe che dovrebbero funzionare alternate prima una poi l'altra e cosi via.
insomma come inizio un programmino facile facile .......visto che sono solo 3 settimane che lo sto studiando ...... grazie per rispondermi
penso che quando si vuole "creare" un progetto si debba pensare a:
cosa deve fare; come e quando deve farlo? (scaldare,raffreddare, leggere temperature, azionare pompe...etc)....qua ci può stare l'abbozzatura di uno schema logico.
per ogni una delle azioni di cui sopra...di che cosa ho bisogno e che cos'ho? (pompe, pulsanti, display, luci..etc)
quanti pin mi serviranno?
che potenze ci sono in gioco? (per singolo componente)
che distanza c'è tra arduino ed i componenti? (influenza un po' di cose)
dove passo i fili? (idem come sopra)
come alimento?
Quindi avendo ben presente cosa devi fare e con che cosa lo farai...magari cerchi esempi uguali o che mostrino l'uso dei singoli componenti o delle singole azioni che vuoi fare...ti trovi le librerie...studi i metodi che ti mette a disposizione...e qua, non solo per le librerie, il concetto di studiare è imperativo...puoi provare a modificare gli esempi che ti vengono suggeriti quando si spiega una funzione, tentare di applicarli per situazioni diverse per cercare di fare tuo il suo utilizzo...ma non s'improvvisa niente. Non so a che livello sei...ma in primis suggerisco una lettura di tutti gli argomenti presenti nel reference QUI, poi uno sguardo alle librerie standard QUI. e nel mentre guardare gli esempi messi a disposizione nell'IDE di arduino.Se trovi difficoltà nel capire od applicare certe cose non scoraggiarti, nulla è facile o difficile a priori...ogniuno di noi ci arriva con i propri tempi, e poi c'è il forum dove chiedere...ma le domande vanno fatte più precise possibili se vuoi un aiuto concreto.
mi hai dato ottimi consigli. io sono rimasto a 35 anni fa con l'elettronica e in queste 2 settimane infatti ho macinato libri e libri comprati su come usare arduino .
ho studiato elettronica e per quanto riguarda costruire e progettare con i componenti normali non ho problemi anche se sono passati 35 anni.
ora vorrei imparare veramente bene arduino.
grazie ancora per i tuoi preziosi consigli che mi risvegliano la mia memoria.
ciao orso ti vorrei chiedere un piccolo piacere , sto impazzendo per fare girare questo piccolo programma che ho ideato.
arrivo al punto che devo scrivere sul display on oppure off a secondo dello stato ma non riesco a daltarci fuori non è che avresti qualche consiglio?
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo del display a 0x27 per 16 caratteri per 2 linee
LiquidCrystal_I2C lcd(0x27,16,2);
// messaggi da inviare al display
char messaggio1 [ ] = " pompa";
char messaggio2 [ ] = " 1";
char messaggio3 [ ] = " 2";
char messaggio4 [ ] = " 3";
char messaggio5 [ ] = " 4";
char messaggio6 [ ] = " 5";
char messaggio7 [ ] = " 6";
char messaggio8 [ ] = " on";
char messaggio9 [ ] = " off";
char messaggio10 [ ] = " ventilazione";
char messaggio11 [ ] = " livello";
char messaggio12 [ ] = "acqua";
char messaggio13 [ ] = "temperatura";
char messaggio14 [ ] = "aria";
char messaggio15 [ ] = " ferma";
char messaggio16 [ ] = " distribuzione";
char messaggio17 [ ] = " mangime";
char messaggio18 [ ] = " riciclo";
int pompa1 = 2;// pompa vasca 1
int pompa2 = 3;// pompa vasca 2
int pompa3 = 4;// pompa vasca 3
int pulsante = 13;// pulsante interruzzione tutte le pompe per distribuire il mangime
int liv_acqua = A0;// livello acqua vasca rabbocco
int liv_acqua_filtro = A1;//livello acqua vasca filtro
int tem_esterna = A2;
long randNumber;
void setup()
{
lcd.init();//inizializza il display
lcd.backlight();//accensione retroilluminazione
pinMode(2, OUTPUT);// uscita relay pompa 1
pinMode(3, OUTPUT);// uscita relay pompa 2
pinMode(4, OUTPUT);// uscita relay pompa 3
pinMode(5, OUTPUT);// uscita relay ventola raffreddamento aria vasca filtro
pinMode(6, OUTPUT);// uscita relay resistenza riscaldamento vasca filtro
pinMode(7, OUTPUT);// uscita relay pompa principale riciclo
pinMode(8, OUTPUT);// uscita relay pompa schiumatoio per bollicine e riciclo acqua schiumatoio
pinMode(9, OUTPUT);// ventola per creare ondine di superficie vasca acquario
pinMode(10, OUTPUT);// uscita relay accensione luce notturna o collegata a un transistor per accensione in pwm
pinMode(11, OUTPUT);// uscita relay accensiione luce vasca filtro oppure collegamento a un transistor per pwm accensione crepuscolare
pinMode(12, OUTPUT);// uscita relay pompa rabbocco vasca
pinMode(A0, INPUT);// ingresso potenziometro livello vasca rabbocco
pinMode(A1, INPUT);//ingresso potenziometro livello vasca filtro
pinMode(A2, INPUT);//ingresso temperatura esterna
randomSeed(analogRead(A0));
lcd.setCursor(0, 0);
lcd.print("inizio programma");// scritta di inizio aviamento acquario
lcd.setCursor(0, 1);
lcd.print(" acquario ");
delay(10000);
lcd.clear();
}
void loop() {
int pulsante = digitalRead(pulsante);// legge lo stato del pulsante
if (pulsante == HIGH) digitalWrite(7, LOW);// se il pulsante e premuto ferma la pompa per min
else digitalWrite(7, HIGH);// se non premuto non ferma la pompa
randNumber = random(1, 3);
if (randNumber == 1) digitalWrite(pompa1, HIGH);
else digitalWrite(pompa1, LOW);
lcd.setCursor(0, 0);
if (randNumber == 1);
lcd.print(messaggio1);
lcd.print(messaggio2);
lcd.setCursor(0, 1);
if (randNumber != 1);
lcd.print(messaggio9);
delay(1000);
if (randNumber == 1);
lcd.print(messaggio8);
delay(1000);
lcd.clear();
if (randNumber == 2) digitalWrite(pompa2, HIGH);
else digitalWrite(pompa2, LOW);
if (randNumber == 3) digitalWrite(pompa3, HIGH);
else digitalWrite(pompa3, LOW);
delay(1000);
}
Adesso sono via di casa con scarso, per non n dire nullo, accesso ad internet. Se hai pazienza mercoledì ritorno e guardo meglio.
Quello che posso dirti al momento:
Attenzione allo "scope/visibilità" delle variabili...se ne dichiari una globale evita di chiamarne una con lo stesso nome a livelli locale.
I pin analogici non serve dichiararli come INPUT lo sono di base; se vuoi dare un nome a questi pin non fare "int a = A0" ma usa il #define.
Ti suggerisco di usare le "{}" dopo ogni if,else,while etc anche se esegui una sola riga.
Per fare un minimo di debug scrivi nel monitor seriale le stesse cose che vorresti scrivere su LCD così ti rendi conto di cosa sta succedendo.
ciao fratt non so se ti e arrivata la mia risposta spedita quando ero in treno.
ti rispondo ora che sono arrivato in puglia.
mi verrebbe da dire azzz le parentesi graffe........
grazie per la risposta voi del forum siete davvero gentilissimi.
io ho studiato elettronica più di 35 anni fa , ma elettronica cablata non programmata come arduino.
ora sto divorando libri che ho acquistato su arduino.
sono 2 settimane che ho preso contatto con arduino e ora che ho un po di ferie le utilizzo si per stare in spiaggia ma....... divorando libri su arduino.
mi appassiona davvero tanto , e avrei voglia di imparare il suo linguaggio come una seconda lingua.
grazie ancora per la risposta ora provo a mettere le parentesi