Salve, sono nuovo del forum, e non avendo trovato un topic apposito per presentarsi, mi presento qui.
Premetto che non conosco molto bene Arduino, essendo che l'ho provato per la prima volta poco più di una settimana fa' e quindi per quanto riguarda la programmazione sono abbastanza scarso e invece per la parte dei ciercuiti c'è mio padre che non è esperto ma se ne intende abbastanza.
Noi abbiamo in casa un acquario e pensavamo di cambiare le lampade fra un po' e mettere quelle a led.
Quindi arduino dovrebbe simulare un alba di x tempo, poi lasciare accesi i led a manetta per un altro po' di tempo, poio il tramonto e poi la notte.
Dopodichè ho aggiunto un interruttore a 3 fasi, che nella prima fase esegue il programma normalmente, nella seconda tiene fisse le luci al massimo(senza interrompere il ciclo), e nella terza spegne le luci(sempre senza interrompere il ciclo).
Poi adesso ho provato ad aggiungerci il sistema di rabbocaggio dell'acqua e anche quiesto deve funzionare senza bloccare il ciclo.
Comunque io ho scritto un codice che sembra fare tutto quello che speravo, ma il codice è bello lungo e premettendo che non voglio usare librerie aggiuntive tipo "metro", "datatime"... volevo sapere cosa potre i fare per accorciare il codice(senza rivoluzionarlo completamente).
Ecco il codice:
int led_pin = 10;
int led_water = 13;
int button_off = 2;
int button_on = 3;
int button_water = 4;
int buttonState = 0;
int buttonState2 = 0;
int buttonState3 = 0;
void setup() {
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
pinMode(button_on, INPUT);
pinMode(button_off, INPUT);
pinMode(button_water, INPUT);
}
void loop(){
for (int led_value_increment=0; led_value_increment <= 255; led_value_increment++) {
Serial.print("ALBA - ");
Serial.println(led_value_increment);
buttonState3 = digitalRead(button_water);
if (buttonState3 == HIGH){
digitalWrite(led_water, HIGH);
Serial.println("Rabbocco acqua");
}
else{
digitalWrite(led_water, LOW);
}
buttonState = digitalRead(button_on);
buttonState2 = digitalRead(button_off);
if (buttonState == HIGH) {
analogWrite(led_pin, 254);
delay(100);
}
else if (buttonState2 == HIGH) {
analogWrite(led_pin, 0);
delay(100);
}
else{
analogWrite(led_pin, led_value_increment);
delay(100);
}
}
for (int led_value_time_day=0; led_value_time_day <= 255; led_value_time_day++) {
Serial.print("GIORNO - ");
Serial.println(255);
buttonState3 = digitalRead(button_water);
if (buttonState3 == HIGH){
digitalWrite(led_water, HIGH);
Serial.println("Rabbocco acqua");
}
else{
digitalWrite(led_water, LOW);
}
buttonState = digitalRead(button_on);
buttonState2 = digitalRead(button_off);
if (buttonState == HIGH) {
analogWrite(led_pin, 254);
delay(100);
}
else if (buttonState2 == HIGH) {
analogWrite(led_pin, 0);
delay(100);
}
else{
analogWrite(led_pin, 255);
delay(100);
}
}
for (int led_value_decrement=255; led_value_decrement >= 0; led_value_decrement--) {
Serial.print("TRAMONTO - ");
Serial.println(led_value_decrement);
buttonState3 = digitalRead(button_water);
if (buttonState3 == HIGH){
digitalWrite(led_water, HIGH);
Serial.println("Rabbocco acqua");
}
else{
digitalWrite(led_water, LOW);
}
buttonState = digitalRead(button_on);
buttonState2 = digitalRead(button_off);
if (buttonState == HIGH) {
analogWrite(led_pin, 254);
delay(100);
}
else if (buttonState2 == HIGH) {
analogWrite(led_pin, 0);
delay(100);
}
else{
analogWrite(led_pin, led_value_decrement);
delay(100);
}
}
for (int led_value_time_night=0; led_value_time_night <= 255; led_value_time_night++) {
Serial.print("NOTTE - ");
Serial.println(0);
buttonState3 = digitalRead(button_water);
if (buttonState3 == HIGH){
digitalWrite(led_water, HIGH);
Serial.println("Rabbocco acqua");
}
else{
digitalWrite(led_water, LOW);
}
buttonState = digitalRead(button_on);
buttonState2 = digitalRead(button_off);
if (buttonState == HIGH) {
analogWrite(led_pin, 254);
delay(100);
}
else if (buttonState2 == HIGH) {
analogWrite(led_pin, 0);
delay(100);
}
else{
analogWrite(led_pin, 0);
delay(100);
}
}
}
Se il codice è troppo macchinoso e ho proprio sbagliato il principio ditemelo che lo rifaccio da zero, magari consigliandomi qualche comando utile per quello che voglio fare, ma comunque credo che troverò sul forum. Grazie mille.
Andrea
PS: Prima che qualcuno me lo chieda, i valori dei tempi, delle luci e delle altre cose sono a casaccio perchè non conosco i voltaggi che richiederanno i led e gli altri parametri.
Pensavo di metterci una batteria tampone(già testata, funziona)così se va via la corrente il ciclo continua e quindi dopo il primo avvio che dovrò fare nel momento in cui dovrà iniziare l'alba il programma sarà completamente autonomo.