Ciao
Ho iniziato un piccolo progetto del classico controller per acquario, nulla di troppo sofisticato, ma essendo alle prime armi mi trovo in grossa difficoltà con lo sketch.
A blocchi sono riuscito a realizzare piu o meno tutto, ora il problema sta nel mettere tutto assieme.
Ho un Arduino uno e vorrei poter controllare attraverso un lcd, la temperatura modificando le soglie min e max, e comandare l'accensione e spegnimento delle luci con il fading.
Come ho detto, ho fatto innumerevoli prove, e cercato in rete copiando qua e là, ma a sto punto sono fermo e sono costretto a chiedere indicazioni.
Qualcuno con molta pazienza è disposto ad indicarmi come fare e che cosa devo correggere, diciamo un passo alla volta?
Grazie infinite
/***********************************************************
Progetto Acqua Control ver. 0.1
Licenza Common Creative
***********************************************************/
#include <LiquidCrystal.h> //libreria per LCD
#include <OneWire.h> //libreria per il sensore ds18b20
#include <DallasTemperature.h> //libreria per conversione valori
#include <Wire.h>
#include <EEPROM.h>
#include "RTClib.h"
//RTC_DS1307 rtc;
RTC_Millis rtc;
/**********************************************************/
#define BUTTON A0 //definisco i bottoni al pin analogico di arduino A0
#define BACKLIGHT 10
#define MOTDTIME 5000
#define LCDTIME 10000
#define SETMODETIME 2000
#define DEBUG
#define ONE_WIRE_BUS 2 // Il terminale data del sensore è connesso alla porta 2 di Arduino
/**********************************************************/
char line0[16] = "Welcome to";
char line1[16] = "Acqua Control";
/**********************************************************/
int SELECT[] = {720,760};
int LEFT[] = {480,520};
int RIGTH[] = {0,20};
int UP[] = {120,160};
int DOWN[] = {300,350};
int buttonPress = 0;
int BC337=12; //Pin7 = BC337 Connessione transistor al pin 7
int PLAFO=10; //pin 10 plafoniera led bianco
int brightness = 0; // how bright the LED is - questa fa parte delle luci
int fadeAmount = 5; //valore di incremento/decremento luci
int tx = 20; //temperatura di soglia
/**********************************************************/
unsigned long timeToBlacklight = 0;
unsigned long timeToSetMode = 0;
unsigned long timeSetting = 0;
/**********************************************************/
boolean blacklightStatus = false;
/**********************************************************/
byte symbolselect[8] = {B00001,B00011,B00111,B01111,B00111,B00011,B00001};
byte symbolplay[8] = {B10000,B11000,B11100,B11110,B11100,B11000,B10000};
byte symbolstop[8] = {B00000,B11111,B11111,B11111,B11111,B11111,B00000};
byte symbolpause[8] = {B00000,B10001,B10001,B10001,B10001,B10001,B00000};
byte grado[8] = {0b00010,0b00101,0b00010,0b00000,0b00000,0b00000,0b00000,0b00000}; //creo i dati per il carattere °
/**********************************************************/
char* principale[4] = {"Temperatura","Luci","Data"};
/**********************************************************/
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(8,9,4,5,6,7);
/**********************************************************/
void setup() {
#ifdef DEBUG
Serial.begin( 9600 );
Serial.println("Avvio");
#endif
/**********************************************************/
sensors.begin();
Wire.begin();
Serial.begin(9600);
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(__DATE__, __TIME__));
/**********************************************************/
pinMode( BACKLIGHT,OUTPUT );
digitalWrite( BACKLIGHT,LOW );
/**********************************************************/
lcd.begin(16, 2);
lcd.createChar(1, symbolselect);
lcd.createChar(2, symbolplay);
lcd.createChar(3, symbolstop);
lcd.createChar(4, symbolpause);
lcd.createChar(0, grado); //associo i dati del ° al carattere custom 0
/**********************************************************/
/**********************************************************/
digitalWrite( BACKLIGHT,HIGH );
lcd.setCursor(0,0);
lcd.print(line0);
lcd.setCursor(0,1);
lcd.print(line1);
delay( MOTDTIME );
lcdBlacklightOff();
}
/**********************************************************/
void loop() {
/**********************************************************/
#ifdef DEBUG
Serial.print( " Button: " ); Serial.print( analogRead( BUTTON ) );
Serial.print( " TimeToBlecklight " ); Serial.print( timeToBlacklight );
Serial.print( " TimeToSetHour " ); Serial.println( timeToSetMode );
#endif
/**********************************************************/
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura di: ");
lcd.setCursor(4,1);
lcd.print (sensors.getTempCByIndex(0));
lcd.write((byte)0);
lcd.print ("C");
delay( SETMODETIME );
if (sensors.getTempCByIndex(0) >= tx)
digitalWrite (BC337, LOW);
else if (sensors.getTempCByIndex(0) <= tx)
digitalWrite (BC337, HIGH);
if (buttonPress >= 0){ //se il pulsantepiù vieno premuto verso il negativo
tx = tx ++; //la variabile temperatura di soglia tx incrementa di una unita
lcd.clear(); //cancello il display
lcd.print("Temperatura di"); //scrivo un testo
lcd.setCursor(0, 1); //riposiziono il cursore
lcd.print("soglia: "); //scrivo di nuovo un testo
lcd.print(tx,DEC); //scrivo il valore impostato della temperatura di soglia
lcd.write((byte)0); //scrivo il °
lcd.print ("C"); //scrivo il C di Celsius
delay(1000); //ritardo di 1 secondi per la lettura
}
if (buttonPress <= 0){ //se il pulsantemeno vieno premuto verso il negativo
tx = tx --; //la variabile temperatura di soglia tx decrementa di una unità
lcd.clear(); //cancello il display
lcd.print("Temperatura di"); //scrivo un testo
lcd.setCursor(0, 1); //riposiziono il cursore
lcd.print("soglia: "); //scrivo di nuovo un testo
lcd.setCursor(10, 1); //riposiziono il cursore
lcd.print(tx,DEC); //scrivo il valore impostato della temperatura di soglia
lcd.write((byte)0); //scrivo il °
lcd.print ("C"); //scrivo il C di Celsius
delay(1000); //ritardo di 1 secondi per la lettura
}