infatti avevo cancellato il post #13 perchè non ero sicuro , ma era identico al post #14
Guarda, ho preso il tuo codice, l'ho copiato nell'IDE, ho fatto la formattazione automatica e l'ho rimesso al suo posto nel post #14 ... vedi un po' tu ...
Guglielmo
P.S.: ...e presta attenzione al messaggio di C1P8 (post #19) ...
Una criticità di cui parlava C1P8 penso di averla eliminata ,
inutile settare LOW un PIN IN , e anche di aver capito come
indentare lo sketch grazie alle indicazioni di gpb01
( quando studiavo informatica nel lontano 1985 usavo scrivere
i programmi non indentati solo perchè per me sono piu leggibili ,
capisco che i tempi sono cambiati) .
spero comunque di avvicinarmi il più possibile ai format del Forum
grazie alle vostre preziose indicazioni.
// ZONA GIORNO ARDUINO MEGA COM 5
#include <LiquidCrystal_I2C.h>
#define LED_PIN 3
int SRTraviVeranda = 0;
int SRTraveEsternaVeranda = 0;
int SRPresaPilotataVeranda = 0;
int SRLuciAlte = 0;
int SRTavoloCucina = 0;
int SRMensolaSXCucina = 0;
int SRMensolaDXCucina = 0;
int SRTraviCucina = 0;
int SRIngressoTravi = 0;
int SRScala = 0;
int SRIngressoLampadario = 0;
int SRTraveSoppalco = 0;
int SRTraveDoppia = 0;
int SRTraveMedia = 0;
int SRPresaPilotataSala = 0;
// Veranda
#define pTraviVeranda 39
#define TraviVeranda 22
#define pTraveEsternaVeranda 40
#define TraveEsternaVeranda 23
#define pPresaPilotataVeranda 41
#define PresaPilotataVeranda 24
//Cucina
#define pLuciAlte 42
#define LuciAlte 25
#define pTavoloCucina 43
#define TavoloCucina 26
#define pMensolaSXCucina 44
#define MensolaSXCucina 27
#define pMensolaDXCucina 45
#define MensolaDXCucina 28
#define pTraviCucina 46
#define TraviCucina 29
//Ingresso
#define pIngressoTravi 47
#define IngressoTravi 30
#define pScala 48
#define Scala 31
#define pIngressoLampadario 49
#define IngressoLampadario 32
//Sala
#define pTraveSoppalco 50
#define TraveSoppalco 33
#define pTraveDoppia 51
#define TraveDoppia 34
#define pTraveMedia 52
#define TraveMedia 35
#define pPresaPilotataSala 53
#define PresaPilotataSala 36
// Allarme e spegni tutto
#define pSpegniTutto 37
#define pAllarme 38
#define z = 1 // Variabile di intervallo fliccheraggio pulsanti
#define a = 1 //Variabile di intervallo per luci allarme
#define b = 1 //Variante di intervallo per spegni tutto
int uscitarele = 1000;
int pulsantepremuto = 0;
int uscita = 0;
int statoprecedente = 99;
String SERIALE = "";
LiquidCrystal_I2C lcd(0x27, 20, 4);
String riga1 = "Benvenuti da Alberto";
String riga2 = "Lucia ";
String riga3 = "Samuele ";
String riga4 = "Tommaso ";
String azione = " ";
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(LED_PIN, OUTPUT);
analogWrite(LED_PIN, 20);
lcd.setCursor(0, 0);
typewriting(riga1);
lcd.setCursor(0, 1);
typewriting(riga2);
lcd.setCursor(0, 2);
typewriting(riga3);
lcd.setCursor(0, 3);
typewriting(riga4);
delay(100);
analogWrite(LED_PIN, 5);
//Veranda
pinMode(pTraviVeranda, INPUT); // Travi Centrali 5V Ingresso 39
pinMode(TraviVeranda, OUTPUT); // Travi Centrali 24V
digitalWrite(TraviVeranda, LOW);
pinMode(pTraveEsternaVeranda, INPUT); // Trave esterna 5V
pinMode(TraveEsternaVeranda, OUTPUT); // Trave esterna 24V
digitalWrite(TraveEsternaVeranda, LOW);
pinMode(pPresaPilotataVeranda, INPUT); // Presa pilotata angolo 5V
pinMode(PresaPilotataVeranda, OUTPUT); // Presa pilotata angolo 24V
digitalWrite(PresaPilotataVeranda, LOW);
//Cucina
pinMode(pLuciAlte, INPUT); // Luci alte 5V
pinMode(LuciAlte, OUTPUT); // Luci alte 220V
digitalWrite(LuciAlte, LOW);
pinMode(pTavoloCucina, INPUT); // Tavolo 5V
pinMode(TavoloCucina, OUTPUT); // Tavolo 220V
digitalWrite(TavoloCucina, LOW);
pinMode(pMensolaSXCucina, INPUT); // Mensola SX 5V
pinMode(MensolaSXCucina, OUTPUT); // Mensola SX 24V
digitalWrite(MensolaSXCucina, LOW);
pinMode(pMensolaDXCucina, INPUT); // Mensola DX 5V
pinMode(MensolaDXCucina, OUTPUT); // Mensola DX 24V
digitalWrite(MensolaDXCucina, LOW);
pinMode(pTraviCucina, INPUT); // Travi 5V
pinMode(TraviCucina, OUTPUT); // Travi 24V
digitalWrite(TraviCucina, LOW);
// SALA
pinMode(pTraveSoppalco, INPUT); // Trave Soppalco 5V
pinMode(TraveSoppalco, OUTPUT); // Trave Soppalco 24V
digitalWrite(TraveSoppalco, LOW);
pinMode(pTraveDoppia, INPUT); // Trave Alta + Bassa 5V
pinMode(TraveDoppia, OUTPUT); // Trave Alta + Bassa 24V
digitalWrite(TraveDoppia, LOW);
pinMode(pTraveMedia, INPUT); // Trave Media 5V
pinMode(TraveMedia, OUTPUT); // Trave Media 24V
digitalWrite(TraveMedia, LOW);
pinMode(pPresaPilotataSala, INPUT); // Presa Pilotata 5V
pinMode(PresaPilotataSala, OUTPUT); // Presa Pilotata 24V
digitalWrite(PresaPilotataSala, LOW);
//Ingresso
pinMode(pIngressoTravi, INPUT); // Travi 5V
pinMode(IngressoTravi, OUTPUT); // Travi 24V
digitalWrite(IngressoTravi, LOW);
pinMode(pScala, INPUT); // Scala 5V
pinMode(Scala, OUTPUT); // Scala 24V
digitalWrite(Scala, LOW);
pinMode(pIngressoLampadario, INPUT); // Lampadario 5V
pinMode(IngressoLampadario, OUTPUT); // Lampadario 24V
digitalWrite(IngressoLampadario, LOW);
//Allarme sPEGNI TUTTO
pinMode(pAllarme, INPUT); // Allarme
pinMode(pSpegniTutto, INPUT); // Spegni tutto
digitalWrite(pSpegniTutto, LOW);
Serial.begin(9600);
Serial.println();
Serial.print(" Ok ripartiamo");
Serial.println();
Serial.println();
Serial.print("Travi veranda stato iniziale > ");
Serial.print(SRTraviVeranda);
Serial.println();
Serial.print("Travi veranda esterna stato iniziale > ");
Serial.print(SRTraveEsternaVeranda);
Serial.println();
Serial.print("Presa Pilotata stato iniziale > ");
Serial.print(SRPresaPilotataVeranda);
Serial.println();
Serial.print("Cucina travi alte stato iniziale > ");
Serial.print(SRLuciAlte);
Serial.println();
Serial.print("Cucina Tavolo stato iniziale > ");
Serial.print(SRTavoloCucina);
Serial.println();
Serial.print("Cucina Mensola SX stato iniziale > ");
Serial.print(SRMensolaSXCucina);
Serial.println();
Serial.print("Cucina mensola DX stato iniziale > ");
Serial.print(SRMensolaDXCucina);
Serial.println();
Serial.print("Cucina travi stato iniziale > ");
Serial.print(SRTraviCucina);
Serial.println();
Serial.print("Ingresso Travi stato iniziale > ");
Serial.print(SRIngressoTravi);
Serial.println();
Serial.print("Scala stato iniziale > ");
Serial.print(SRScala);
Serial.println();
Serial.print("Ingresso lampadario stato iniziale > ");
Serial.print(SRIngressoLampadario);
Serial.println();
Serial.print("Sala trave soppalco stato iniziale > ");
Serial.print(SRTraveSoppalco);
Serial.println();
Serial.print("Sala Trave doppia stato iniziale > ");
Serial.print(SRTraveDoppia);
Serial.println();
Serial.print("Sala trave media stato iniziale > ");
Serial.print(SRTraveMedia);
Serial.println();
Serial.print("sala Presa pilotata stato iniziale > ");
Serial.print(SRPresaPilotataSala);
Serial.println();
Serial.print("#-------------------------------------------------#");
Serial.println();
Serial.println();
// Veranda
}
void loop() {
// Allarme 38 zona Notte
//int ComunicazioneAllarme=37;
//Spegni Tutto 37 Notte
// Veranda trave centrale:
if (digitalRead(pTraviVeranda) == HIGH && SRTraviVeranda == 0) {
digitalWrite(TraviVeranda, HIGH);
// "Benvenuti da Alberto";
azione = "Veranda Travi CX OFF";
statoprecedente = SRTraviVeranda;
pulsantepremuto = pTraviVeranda;
uscitarele = TraviVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraviVeranda = 1;
DOPO();
};
if (digitalRead(pTraviVeranda) == HIGH && SRTraviVeranda == 1) {
digitalWrite(TraviVeranda, LOW);
// "--------------------";
azione = "Veranda Travi CX ON";
statoprecedente = SRTraviVeranda;
pulsantepremuto = pTraviVeranda;
uscitarele = TraviVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraviVeranda = 0;
DOPO();
};
// Veranda Trave Esterna:
if (digitalRead(pTraveEsternaVeranda) == HIGH && SRTraveEsternaVeranda == 0) {
digitalWrite(TraveEsternaVeranda, HIGH);
// "Benvenuti da Alberto";
azione = "Verand Trave EST OFF";
statoprecedente = SRTraveEsternaVeranda;
pulsantepremuto = pTraveEsternaVeranda;
uscitarele = TraveEsternaVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraveEsternaVeranda = 1;
DOPO();
};
if (digitalRead(pTraveEsternaVeranda) == HIGH && SRTraveEsternaVeranda == 1) {
digitalWrite(TraveEsternaVeranda, LOW);
// "Benvenuti da Alberto";
azione = "Veranda Trave EST ON";
statoprecedente = SRTraveEsternaVeranda;
pulsantepremuto = pTraveEsternaVeranda;
uscitarele = TraveEsternaVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraveEsternaVeranda = 0;
DOPO();
};
// Veranda presa Pilotata:
if (digitalRead(pPresaPilotataVeranda) == HIGH && SRPresaPilotataVeranda == 0) {
digitalWrite(PresaPilotataVeranda, HIGH);
// "Benvenuti da Alberto";
azione = "Ver Pres Pilotat OFF";
statoprecedente = SRPresaPilotataVeranda;
pulsantepremuto = pPresaPilotataVeranda;
uscitarele = PresaPilotataVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraveEsternaVeranda = 1;
DOPO();
};
if (digitalRead(pPresaPilotataVeranda) == HIGH && SRPresaPilotataVeranda == 1) {
digitalWrite(PresaPilotataVeranda, LOW);
// "Benvenuti da Alberto";
azione = "Ver Pres Pilotata ON";
statoprecedente = SRPresaPilotataVeranda;
pulsantepremuto = pPresaPilotataVeranda;
uscitarele = PresaPilotataVeranda;
PRIMA();
Scrivi_su_LCD();
SRPresaPilotataVeranda = 0;
DOPO();
};
// Cucina Luci Alte:
if (digitalRead(pLuciAlte) == HIGH && SRLuciAlte == 0) {
digitalWrite(LuciAlte, HIGH);
// "Benvenuti da Alberto";
azione = "Cucina Lampade OFF";
statoprecedente = SRLuciAlte;
pulsantepremuto = pLuciAlte;
uscitarele = LuciAlte;
PRIMA();
Scrivi_su_LCD();
SRLuciAlte = 1;
DOPO();
};
if (digitalRead(pLuciAlte) == HIGH && SRLuciAlte == 1) {
digitalWrite(LuciAlte, LOW);
// "Benvenuti da Alberto";
azione = "Cucina lampade ON";
statoprecedente = SRLuciAlte;
pulsantepremuto = pLuciAlte;
uscitarele = LuciAlte;
PRIMA();
Scrivi_su_LCD();
SRLuciAlte = 0;
DOPO();
};
// Cucina Luci Tavolo:
if (digitalRead(pTavoloCucina) == HIGH && SRTavoloCucina == 0) {
digitalWrite(TavoloCucina, HIGH);
// "Benvenuti da Alberto";
azione = "Cucina Tavolo OFF";
statoprecedente = SRTavoloCucina;
pulsantepremuto = pTavoloCucina;
uscitarele = TavoloCucina;
PRIMA();
Scrivi_su_LCD();
SRTavoloCucina = 1;
DOPO();
};
if (digitalRead(pTavoloCucina) == HIGH && SRTavoloCucina == 1) {
digitalWrite(TavoloCucina, LOW);
// "Benvenuti da Alberto";
azione = "Cucina Tavolo ON";
statoprecedente = SRTavoloCucina;
pulsantepremuto = pTavoloCucina;
uscitarele = TavoloCucina;
PRIMA();
Scrivi_su_LCD();
SRTavoloCucina = 0;
DOPO();
};
// Cucina mensola SX:
if (digitalRead(pMensolaSXCucina) == HIGH && SRMensolaSXCucina == 0) {
digitalWrite(MensolaSXCucina, HIGH);
// "Benvenuti da Alberto";
azione = "Cucina Mensol SX OFF";
statoprecedente = SRMensolaSXCucina;
pulsantepremuto = pMensolaSXCucina;
uscitarele = MensolaSXCucina;
PRIMA();
Scrivi_su_LCD();
SRMensolaSXCucina = 1;
DOPO();
};
if (digitalRead(pMensolaSXCucina) == HIGH && SRMensolaSXCucina == 1) {
digitalWrite(MensolaSXCucina, LOW);
// "Benvenuti da Alberto";
azione = "Cucina Mensola SX ON";
statoprecedente = SRMensolaSXCucina;
pulsantepremuto = pMensolaSXCucina;
uscitarele = MensolaSXCucina;
PRIMA();
Scrivi_su_LCD();
SRMensolaSXCucina = 0;
DOPO();
};
// Cucina mensole DX:
if (digitalRead(pMensolaDXCucina) == HIGH && SRMensolaDXCucina == 0) {
digitalWrite(MensolaDXCucina, HIGH);
// "Benvenuti da Alberto";
azione = "Cucina Mensol DX OFF";
statoprecedente = SRMensolaDXCucina;
pulsantepremuto = pMensolaDXCucina;
uscitarele = MensolaDXCucina;
PRIMA();
Scrivi_su_LCD();
SRMensolaDXCucina = 1;
DOPO();
};
if (digitalRead(pMensolaDXCucina) == HIGH && SRMensolaDXCucina == 1) {
digitalWrite(MensolaDXCucina, LOW);
// "Benvenuti da Alberto";
azione = "Cucina Mensola DX ON";
statoprecedente = SRMensolaDXCucina;
pulsantepremuto = pMensolaDXCucina;
uscitarele = MensolaDXCucina;
PRIMA();
Scrivi_su_LCD();
SRMensolaDXCucina = 0;
DOPO();
};
// Cucina Travi:
if (digitalRead(pTraviCucina) == HIGH && SRTraviCucina == 0) {
digitalWrite(TraviCucina, HIGH);
// "Benvenuti da Alberto";
azione = "Cucina Travi OFF";
statoprecedente = SRTraviCucina;
pulsantepremuto = pTraviCucina;
uscitarele = TraviCucina;
PRIMA();
Scrivi_su_LCD();
SRTraviCucina = 1;
DOPO();
};
if (digitalRead(pTraviCucina) == HIGH && SRTraviCucina == 1) {
digitalWrite(TraviCucina, LOW);
// "Benvenuti da Alberto";
azione = "Cucina Travi ON";
statoprecedente = SRTraviCucina;
pulsantepremuto = pTraviCucina;
uscitarele = TraviCucina;
PRIMA();
Scrivi_su_LCD();
SRTraviCucina = 0;
DOPO();
};
//ingresso Travi:
if (digitalRead(pIngressoTravi) == HIGH && SRIngressoTravi == 0) {
digitalWrite(IngressoTravi, HIGH);
// "Benvenuti da Alberto";
azione = "Ingresso Travi OFF";
statoprecedente = SRIngressoTravi;
pulsantepremuto = pIngressoTravi;
uscitarele = IngressoTravi;
PRIMA();
Scrivi_su_LCD();
SRIngressoTravi = 1;
DOPO();
};
if (digitalRead(pIngressoTravi) == HIGH && SRIngressoTravi == 1) {
digitalWrite(IngressoTravi, LOW);
// "Benvenuti da Alberto";
azione = "Ingresso Travi ON";
statoprecedente = SRIngressoTravi;
pulsantepremuto = pIngressoTravi;
uscitarele = IngressoTravi;
PRIMA();
Scrivi_su_LCD();
SRIngressoTravi = 0;
DOPO();
};
//ingresso scala rovere led :
if (digitalRead(pScala) == HIGH && SRScala == 0) {
digitalWrite(Scala, HIGH);
// "Benvenuti da Alberto";
azione = "Interrato Scala OFF";
statoprecedente = SRScala;
pulsantepremuto = pScala;
uscitarele = Scala;
PRIMA();
Scrivi_su_LCD();
SRScala = 1;
DOPO();
};
if (digitalRead(pScala) == HIGH && SRScala == 1) {
digitalWrite(Scala, LOW);
// "Benvenuti da Alberto";
azione = "Interrato Scala ON";
statoprecedente = SRScala;
pulsantepremuto = pScala;
uscitarele = Scala;
PRIMA();
Scrivi_su_LCD();
SRScala = 0;
DOPO();
};
// ingresso Lampadario:
if (digitalRead(pIngressoLampadario) == HIGH && SRIngressoLampadario == 0) {
digitalWrite(IngressoLampadario, HIGH);
// "Benvenuti da Alberto";
azione = "Ingresso Lampada OFF";
statoprecedente = SRIngressoLampadario;
pulsantepremuto = pIngressoLampadario;
uscitarele = IngressoLampadario;
PRIMA();
Scrivi_su_LCD();
SRIngressoLampadario = 1;
DOPO();
};
if (digitalRead(pIngressoLampadario) == HIGH && SRIngressoLampadario == 1) {
digitalWrite(IngressoLampadario, LOW);
// "Benvenuti da Alberto";
azione = "Ingresso lampada ON";
statoprecedente = SRIngressoLampadario;
pulsantepremuto = pIngressoLampadario;
uscitarele = IngressoLampadario;
PRIMA();
Scrivi_su_LCD();
SRIngressoLampadario = 0;
DOPO();
};
//Sala Trave Soppalco:
if (digitalRead(pTraveSoppalco) == HIGH && SRTraveSoppalco == 0) {
digitalWrite(TraveSoppalco, HIGH);
// "Benvenuti da Alberto";
azione = "Sala Tr soppalco OFF";
statoprecedente = SRTraveSoppalco;
pulsantepremuto = pTraveSoppalco;
uscitarele = TraveSoppalco;
PRIMA();
Scrivi_su_LCD();
SRTraveSoppalco = 1;
DOPO();
};
if (digitalRead(pTraveSoppalco) == HIGH && SRTraveSoppalco == 1) {
digitalWrite(TraveSoppalco, LOW);
// "Benvenuti da Alberto";
azione = "Sala Tr soppalco ON";
statoprecedente = SRTraveSoppalco;
pulsantepremuto = pTraveSoppalco;
uscitarele = TraveSoppalco;
PRIMA();
Scrivi_su_LCD();
SRTraveSoppalco = 0;
DOPO();
};
// Sala Trave Doppia:
if (digitalRead(pTraveDoppia) == HIGH && SRTraveDoppia == 0) {
digitalWrite(TraveDoppia, HIGH);
// "Benvenuti da Alberto";
azione = "Sala Trave DoppiaOFF";
statoprecedente = SRTraveDoppia;
pulsantepremuto = pTraveDoppia;
uscitarele = TraveDoppia;
PRIMA();
Scrivi_su_LCD();
SRTraveDoppia = 1;
DOPO();
};
if (digitalRead(pTraveDoppia) == HIGH && SRTraveDoppia == 1) {
digitalWrite(TraveDoppia, LOW);
// "Benvenuti da Alberto";
azione = "Sala Trave Doppia ON";
statoprecedente = SRTraveDoppia;
pulsantepremuto = pTraveDoppia;
uscitarele = TraveDoppia;
PRIMA();
Scrivi_su_LCD();
SRTraveDoppia = 0;
DOPO();
};
// Sala trave Media:
if (digitalRead(pTraveMedia) == HIGH && SRTraveMedia == 0) {
digitalWrite(TraveMedia, HIGH);
// "Benvenuti da Alberto";
azione = "Sala Trave Media OFF";
statoprecedente = SRTraveMedia;
pulsantepremuto = pTraveMedia;
uscitarele = TraveMedia;
PRIMA();
Scrivi_su_LCD();
SRTraveMedia = 1;
DOPO();
};
if (digitalRead(pTraveMedia) == HIGH && SRTraveMedia == 1) {
digitalWrite(TraveMedia, LOW);
// "Benvenuti da Alberto";
azione = "Sala Trave Media ON";
statoprecedente = SRTraveMedia;
pulsantepremuto = pTraveMedia;
uscitarele = TraveMedia;
PRIMA();
Scrivi_su_LCD();
SRTraveMedia = 0;
DOPO();
};
// Sala presa Pilotata SX:
if (digitalRead(pPresaPilotataSala) == HIGH && SRPresaPilotataSala == 0) {
digitalWrite(PresaPilotataSala, HIGH);
// "Benvenuti da Alberto";
azione = "Sala luce pilota OFF";
statoprecedente = SRPresaPilotataSala;
pulsantepremuto = pPresaPilotataSala;
uscitarele = PresaPilotataSala;
PRIMA();
Scrivi_su_LCD();
SRPresaPilotataSala = 1;
DOPO();
};
if (digitalRead(pPresaPilotataSala) == HIGH && SRPresaPilotataSala == 1) {
digitalWrite(PresaPilotataSala, LOW);
// "Benvenuti da Alberto";
azione = "Sala Luce pilota ON";
statoprecedente = SRPresaPilotataSala;
pulsantepremuto = pPresaPilotataSala;
uscitarele = PresaPilotataSala;
PRIMA();
Scrivi_su_LCD();
SRPresaPilotataSala = 0;
DOPO();
};
/*
AllarmE:
// Allarme
//if(Serial.available() > 0){SERIALE=Serial.read();};
//if (SERIALE=="allarme" && TraveSoppalco == LOW && TavoloCucina == LOW)
if(digitalRead(38)==HIGH && TraveSoppalco == LOW && TavoloCucina == LOW)
{
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
};
// if (SERIALE=="allarme" && TraveSoppalco == LOW && TavoloCucina == HIGH)
if(digitalRead(38)==HIGH && TraveSoppalco == LOW && TavoloCucina == HIGH)
{
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
};
// if (SERIALE=="allarme" && TraveSoppalco == HIGH && TavoloCucina == LOW)
if(digitalRead(38) == HIGH && TraveSoppalco == HIGH && TavoloCucina == LOW)
{
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, LOW);
delay(a);
};
// if(SERIALE=="allarme" && TraveSoppalco==HIGH && TavoloCucina==HIGH)
if(digitalRead(38)==HIGH&& TraveSoppalco==HIGH && TavoloCucina==HIGH)
{
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
digitalWrite(TraveSoppalco, LOW);
digitalWrite(TavoloCucina, LOW);
delay(a);
digitalWrite(TraveSoppalco, HIGH);
digitalWrite(TavoloCucina, HIGH);
delay(a);
}; //Fine dell'if Allarme
//Spegni Tutto
//if (SERIALE="spegni")
if(digitalRead(37)==HIGH)
{
digitalWrite(TraviVeranda, LOW);SRTraviVeranda=0;
digitalWrite(TraveEsternaVeranda, LOW);SRTraveEsternaVeranda=0;
digitalWrite(LuciAlte, LOW);SRLuciAlte=0;
digitalWrite(TavoloCucina, LOW);SRTavoloCucina=0;
digitalWrite(MensolaSXCucina, LOW);SRMensolaSXCucina=0;
digitalWrite(MensolaDXCucina, LOW);SRMensolaDXCucina=0;
digitalWrite(TraviCucina, LOW);SRTraviCucina=0;
digitalWrite(IngressoTravi, LOW);SRIngressoTravi=0;
digitalWrite(Scala, LOW);SRScala=0;
digitalWrite(IngressoLampadario, LOW);SRIngressoLampadario=0;
digitalWrite(TraveSoppalco, LOW);SRTraveSoppalco=0;
digitalWrite(TraveDoppia, LOW);SRTraveDoppia=0;
digitalWrite(TraveMedia, LOW);SRTraveMedia=0;
digitalWrite(TraviVeranda, LOW);SRTraviVeranda=0;
digitalWrite(PresaPilotataSala, LOW);SRPresaPilotataSala=0;
delay(a);
} //Fine dell'if dello spegni tutto
}
*/
} // Fine void loop
void PRIMA() {
Serial.print("PRIMA >>>> ");
Serial.print(azione);
Serial.print(" - Stato precedente: ");
if (statoprecedente == 0) { Serial.print(" Acceso = "); };
if (statoprecedente == 1) { Serial.print(" Spento = "); };
Serial.print(statoprecedente);
Serial.println();
void DOPO() {
Serial.print("DOPO >>>> ");
Serial.print(azione);
Serial.println();
Serial.print("pulsante premuto = ");
Serial.println(pulsantepremuto);
Serial.print(" Canale uscita = ");
Serial.println(uscitarele);
Serial.print(" valore uscita = ");
Serial.print(digitalRead(uscitarele));
if (digitalRead(uscitarele) == 0) { Serial.print(" Acceso "); };
if (digitalRead(uscitarele) == 1) { Serial.print(" Spento "); };
Serial.println();
Serial.println("....................................................");
Serial.println();
}
void Scrivi_su_LCD() {
Serial.println();
Serial.print("riga1 = ");
Serial.print(riga1);
Serial.println();
Serial.print("riga2 = ");
Serial.print(riga2);
Serial.println();
Serial.print("riga3 = ");
Serial.print(riga3);
Serial.println();
Serial.print("riga4 = ");
Serial.print(riga4);
Serial.println();
Serial.print("azione = ");
Serial.print(azione);
Serial.println();
riga4 = riga3;
riga3 = riga2;
riga2 = riga1;
riga1 = azione;
analogWrite(LED_PIN, 20);
lcd.setCursor(0, 0);
typewriting(riga1);
lcd.setCursor(0, 1);
typewriting(riga2);
lcd.setCursor(0, 2);
typewriting(riga3);
lcd.setCursor(0, 3);
typewriting(riga4);
// delay(10);analogWrite(LED_PIN,20);
delay(10);
analogWrite(LED_PIN, 15);
delay(10);
analogWrite(LED_PIN, 10);
delay(10);
analogWrite(LED_PIN, 5);
Serial.println("----#----#----#----#----#----#----");
Serial.print("riga1 = ");
Serial.print(riga1);
Serial.println();
Serial.print("riga2 = ");
Serial.print(riga2);
Serial.println();
Serial.print("riga3 = ");
Serial.print(riga3);
Serial.println();
Serial.print("riga4 = ");
Serial.print(riga4);
Serial.println();
Serial.println();
Serial.print("---+---+---+--- FINE GIOCHI ---+---+---+---");
Serial.println();
Serial.println();
}
void typewriting(String messaggio) {
int lunghezza = messaggio.length();
for (int i = 0; i < lunghezza; i++) {
lcd.print(messaggio[i]);
delay(10);
}
}
Grazie mille Guglielmo , ho capito come fare , forse però i commenti andrebbero fatti fuori dal CODE quindi penso di aver sbagliato anche il post #24 ...... ma piano piano ci arrivo , sono un pò duro ma non durissimo . grazie ancora per il vostro aiuto.
una criticità di cui parla penso di averla capita , inutile settare LOW un pin IN , l'altra ci stò pensando ma non mi viene String riga1 = "Benvenuti da Alberto"; questo è un messaggio che mando al LCD quando inizio il loop , poi se ne va premendo altri interruttori , alla fine del progetto gli LCD sono inutili come il serial Print per il monitor , ma per adesso mi servono per avere un controllo visivo di quello che sto facendo , grazie per i complimenti del cablaggio .
ci sono delle parti a cui sto ancora lavorando , ovviamente sono contrassegnate da /* ...... */
questo è l'effetto finale del mio progetto. illuminazione con strisce led 24 v montate su apposite canaline in alluminio e cover diffusore luce
La domanda fondamentale:
Perché io vedo:
- fili probabilmente lunghi collegati direttamente ai pin senza disaccoppiamento (a questo servono le R da 10k del mio schema)
- nessun debounce hardware o software (a questo servono i condensatori)
- pull down di valore troppo elevato per contatti posti a grande distanza
No, non è solo inutile: l'impostazione LOW con digitalWrite di un ingresso, se è attivata la resistenza di pull-up interna con pinMode (pin, INPUT_PULLUP);
LA DISATTIVA!
Sono pienamente d'accordo.
Purtroppo la formattazione automatica non agisce sulle parti tra /* e */
. Capisco che sia giusto non formattare i commenti, ma il codice dovrebbe essere identificato e formattato ugualmente, tanto più se sono più righe. Potrebbe anche apparire una domanda:
"Formattare anche i commenti tra /* e */?"
Altrimenti, basta togliere /* e */
, formattare e poi rimetterli.
Secondo noi queste cose escono meglio con delle struct
Il problema sono quelle lunghe strighe descriventi l'azione
I cavi che vanno da Arduino ai pulsanti passano prima dalla morsettiera con una distanza di circa 50 cm ,alla morsettiera arrivano da ogni stanza vari pulsanti che sono ponticellati per avere il solito scopo , i cavi dalla morsettiera vanno ai pulsanti tramite forassite singole dove non passano altri cavi ho dedicato ogni forassite al suo scopo , infatti mi arrivano circa 120 forassiti al quadro elettrico, dalla morsettiera ai pulsanti la distanza è variabile , da 3 a 10/12 mt , e sono divisi in due parti zona notte e zona giorno ( divisi dal rigo nero a metà morsettiera) parte sinistra alimentata dal Vcc di un Arduino e parte destra alimentata dall'altro Arduino.
premetto che funziona tutto , al premere di ogni pulsante si accende e spegne la luce assegnata , quindi teoricamente e praticamente funziona tutto , conscio di aver fatto uno sketch in base alle mie ancestrali rimembranze del linguaggio BASIC che studiai a scuola.
il problema che non capisco è : guardando la foto dei travi illuminati , quattro travi hanno tre modi di essere illuminati tramite pulsante , o il primo a sinistra o il terzo da sinistra o il secondo e quarto , questo per avere più gradi di illuminazione in base alle nostre esigenze , se la sera li spengo tutti , la mattina mi ritrovo con un trave illuminato o due o quattro anche senza premere nessun pulsante , e questo accade anche nelle altre stanze perché l'illuminazione è tutta uguale in ogni stanza , delle volte non ho nessun disturbo , altre volte uno , altre volte 3 , altre volte tutti , è molto variabile .
Avevo già pensato di abbassare il valore della resistenza di pull down , ma mi sembra molto strano che durante le ore di riposo pulsanti ( non premuti per lungo tempo ) ci possa essere un riconoscimento di segnale nel Pin IN di Arduino , avevo anche pensato di inserire un diodo per eliminare un eventuale rientro di Vcc derivato da non so cosa , tipo un accumulo di tensione, sto anche seriamente pensando di avere dei fantasmi in casa che mi premono i pulsanti a mia insaputa.
avevo anche ipotizzato di semplificare il codice ..... premetto che è il mio primo progetto con Arduino.
Non si chiamano fantasmi, ma tensioni di rete indotte e segnali a radiofrequenza, sempre presenti. Non è neanche pensabile collegare un ingresso digitale a simili "antenne". A me sembra già strano che non si resettino completamente (e randomicamente) gli Arduini.
Qualsiasi segnale del "campo" (cioè tutto ciò che sta lontano dalla logica) deve trovare una bassa impedenza (cioè serve un disturbo di grande potenza per interferire) e un'alta "inerzia" (deve durare per un certo tempo), per questo un comune relé non verrà mai disturbato da nulla. Un ingresso digitale collegato al "campo", bisogna invece appositamente renderlo, via hardware e software, "duro e sordo" quanto un relé.
Questa è una delle differenze principali tra gli ingressi/uscite di Arduino (schedina per prototipi senza alcuna protezione dai disturbi condotti e irradiati), e un PLC industriale progettato apposta per far fronte a tutta la casistica di disturbi EMI presenti nel mondo reale.
Esatto. Quindi, Capolona, usa resistenze da 1k (5mA con 5V) o addirittura da 470 ohm (circa 10mA con 5V) al posto di quelle da 10k. Comincia dalle luci che più spesso si accendono da sole e vedi se non accade più.
ho usato il valore da 10 K hom informandomi in rete , sostituire singolarmente le resistenze di pull down sarebbe un pò complicato , preferisco rifare tutto di nuovo , usando delle resistenze di valore inferiore .
Per essere sicuro che ci sia scarico completo da interferenze generate da varie fonti uso resistenze da 470 hom ? non vorrei usarne da 1 K hom per poi ritrovarmi con i soliti problemi , grazie comunque per i vostri preziosi consigli.
Io ti do questo suggerimento. Ci sono dei pezzi di codice che secondo me sono "accorpabili" a coppia (facendo una funzione). Ovvero un esempio:
// Veranda trave centrale:
if (digitalRead(pTraviVeranda) == HIGH && SRTraviVeranda == 0) {
digitalWrite(TraviVeranda, HIGH);
// "Benvenuti da Alberto";
azione = "Veranda Travi CX OFF";
statoprecedente = SRTraviVeranda;
pulsantepremuto = pTraviVeranda;
uscitarele = TraviVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraviVeranda = 1;
DOPO();
};
if (digitalRead(pTraviVeranda) == HIGH && SRTraviVeranda == 1) {
digitalWrite(TraviVeranda, LOW);
// "--------------------";
azione = "Veranda Travi CX ON";
statoprecedente = SRTraviVeranda;
pulsantepremuto = pTraviVeranda;
uscitarele = TraviVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraviVeranda = 0;
DOPO();
};
Secondo me semplifichi codice e lettura se leggi solo il valore del pin e poi in una funzione specifica verifichi la variabile di stato (nei punti dove il codice deve comportarsi in maniera diversa a secondo dello stato):
// Veranda trave centrale:
if (digitalRead(pTraviVeranda) == HIGH)
{ funzTraviVeranda();
}
...
void funzTraviVeranda()
{ digitalWrite(TraviVeranda, ! SRTraviVeranda ); // oppure digitalWrite(TraviVeranda, (SRTraviVeranda == 0 ? HIGH : LOW) );
azione = "Veranda Travi CX " + (SRTraviVeranda == 0 ? "OFF" : "ON") ;
statoprecedente = SRTraviVeranda;
pulsantepremuto = pTraviVeranda;
uscitarele = TraviVeranda;
PRIMA();
Scrivi_su_LCD();
SRTraviVeranda = (SRTraviVeranda == 0 ? 1 : 0); // if in linea
DOPO();
}
Consiglio di fare di più che semplicemente ridurre la resistenza di pull-down.
Schmitt trigger 6 canali non invertente.
SN74HCS14
Pensavo di trovarlo commercializzato come modulo pcb e invece devi assemblarlo tu su un pcb.
Ciao.
secondo noi passando per una struct si semplifica enormemente il programma, almeno la gestione dei pulsanti ingressi ed uscite
solo come esempio, volutamente non c'è una setup() funzionante
/*
Una nuova idea DDD
Del Dinamico Duo
Sentitevi liberi di copiare
Sentitevi liberi di trarre ispirazione
Sentitevi liberi di dare un cenno di ringraziamento
Creato con IDE 1.8.10
*/
typedef struct
{
byte inp; // ingresso associato
byte out; // uscita associata
bool stato; // acceso/spento
char * nome; // puntatore al nome (quasi la stessa cosa che usare un array di char interno alla struct)
} luce;
luce luci[] =
{
{ 3, 4, 0, "sala grande"},
{ 5, 6, 0, "saletta"},
{10, 11, 0, "trave centrale"}
};
void setup(void)
{
Serial.begin(9600);
}
void loop(void)
{
for (byte i = 0; i < sizeof luci / sizeof luci[0]; i++)
{
if (digitalRead(luci[i].inp))
{
digitalWrite(luci[i].out, luci[i].stato = !luci[i].stato);
}
Serial.print("rilevato pulsante numero: ");
Serial.println(luci[i].inp);
Serial.print("luce numero: ");
Serial.print(i);
Serial.print(" ---> ");
Serial, print(luci[i].nome);
Serial.print(" ");
Serial.print(luci[i].stato ? "accesa" : "spenta");
Serial.println();
}
}
PS il comando dello IDE Modifica-Copia per il forum funziona benissimo
guardate la loop()
fa tutto in tre sole righe
un for
un if
e un digitalwrite
il resto sono solo stampe
COSI' un programma è ben indentato e leggibile
e per vedere se anche altri si interessano agli altrui problemi:
ha pure una bassa complessità ciclomatica
PPS
che nessuno se la prenda se abbiamo copiato da lui (o loro)
lo abbiamo sempre detto che ci ispiravamo a voi più bravi
peraltro qui è tutto open source
Non solo, posso pure fare una ricerca nell'array luci perché ad esempio voglio sapere quante e quali luci risultano accese.
Mi basterà scorrere tutti gli elementi dell'array luci[i].state e se vale 1 stampo inp, out e il nome.
Ciao.
È normale, quando si inventa qualcosa e si fa un prototipo, doverlo modificare, quindi bisogna anche prevederlo! Le resistenze smd sono molto comode e da Aliexpress trovi una serie intera di migliaia di pezzi per pochi euro.