Re: modifica timer
Inviato: ven 12 feb 2021, 7:15
caricando il listato su arduino con buttonPinRESET in PULLUP funziona tutto, per quanto riguarda le and ho usato le doppie && commerciali.
Un luogo open dove discutere di elettronica
https://www.pieraisa.it/forum/
Codice: Seleziona tutto
#define ledPinON 17 //LED RELE OUT ON
#define ledPinOFF 19 //LED OUT OFF
#define pulsON 4 //PULSANTE OUT ON
#define pulsOFF 5 //PULSANTE OUT OFF
#define buttonPinPROTa 22 //INGRESSO PROTEZIONE LINEA A (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPinPROTb 23 //INGRESSO PROTEZIONE LINEA B (PROTEZIONE DIFFERENZIALE)
#define ledPinPROTa 24 //LED RELE PROTEZIONE LINEA A
#define ledPinPROTb 25 //LED RELE PROTEZIONE LINEA B
#define buttonPinRESET 26 //PULSANTE RESET PROTEZIONI
#define pulsRipVout 46 //PULSANTE RIPRISTINO VOUT ON
#define RipMan 47 //LED RIPRISTINO VOUT ON MANUALE
#define RipAuto 48 //LED RIPRISTINO VOUT ON AUTOMATICO
int buttonPROTa = 0;
int buttonPROTb = 0;
int buttonReset = 0;
byte bytReset = 0;
byte bytProt = 0;
int intDt1 = 0;
unsigned long ulngT1 = 0;
uint8_t outputStatus[NUM_DIGITAL_PINS];
uint8_t eravamoAccesi;
int ledState12 = LOW;
int ledState13 = HIGH;
int buttonState9;
int lastButtonState9 = HIGH;
long lastDebounceTime9 = 0;
long debounceDelay9 = 50;
void myDigitalWrite(uint8_t pin, uint8_t val) {
outputStatus[pin] = val;
digitalWrite(pin, val);
}
void setup() {
Serial.begin (9600);
pinMode (ledPinON, OUTPUT);
pinMode (ledPinOFF, OUTPUT);
pinMode (pulsON, INPUT_PULLUP);
pinMode (pulsOFF, INPUT_PULLUP);
pinMode (buttonPinPROTa, INPUT);
pinMode (buttonPinPROTb, INPUT);
pinMode (ledPinPROTa, OUTPUT);
pinMode (ledPinPROTb, OUTPUT);
pinMode (buttonPinRESET, INPUT_PULLUP);
pinMode (pulsRipVout, INPUT);
pinMode (RipMan, OUTPUT);
pinMode (RipAuto, OUTPUT);
myDigitalWrite (ledPinON, LOW);
myDigitalWrite (ledPinOFF, HIGH);
myDigitalWrite (ledPinPROTa, LOW);
myDigitalWrite (ledPinPROTb, LOW);
ulngT1 = millis();
}
void loop() {
if (digitalRead (pulsON) == LOW && digitalRead (pulsOFF) == HIGH && outputStatus[ledPinPROTa] == LOW && outputStatus[ledPinPROTb] == LOW) {
delay (100);
myDigitalWrite (ledPinON, HIGH);
myDigitalWrite (ledPinOFF, LOW);
eravamoAccesi = HIGH;
}
if (digitalRead (pulsOFF) == LOW && digitalRead (pulsON) == HIGH) {
delay (100);
myDigitalWrite (ledPinOFF, HIGH);
myDigitalWrite (ledPinON, LOW);
eravamoAccesi = LOW;
}
buttonPROTa = digitalRead (buttonPinPROTa);
buttonPROTb = digitalRead (buttonPinPROTb);
buttonReset = digitalRead (buttonPinRESET);
if (buttonPROTa == HIGH && buttonReset == HIGH) {
bytProt = 1;
myDigitalWrite (ledPinPROTa, HIGH);
myDigitalWrite (ledPinOFF, HIGH);
myDigitalWrite (ledPinON, LOW);
}
if (buttonPROTb == HIGH && buttonReset == HIGH) {
bytProt = 1;
myDigitalWrite (ledPinPROTb, HIGH);
myDigitalWrite (ledPinOFF, HIGH);
myDigitalWrite (ledPinON, LOW);
}
// ATTENZIONE:
// dalla simulazione su Tinkercad questa condizione IF non funziona
if (buttonPROTa == LOW && buttonPROTb == LOW && buttonReset == LOW) {
bytReset = 1;
myDigitalWrite (ledPinPROTa, LOW);
myDigitalWrite (ledPinPROTb, LOW);
if (ledState13 == HIGH) {
if (eravamoAccesi == HIGH) {
myDigitalWrite (ledPinOFF, LOW);
myDigitalWrite (ledPinON, HIGH);
}
}
}
if (bytReset == 1) {
bytProt = 1;
intDt1 = millis() - ulngT1;
if (intDt1 > 3000) {
ulngT1 = millis();
bytProt = 0;
bytReset = 0;
}
}
Serial.print ("bytReset ");
Serial.println (bytReset);
Serial.print ("bytProt ");
Serial.println (bytProt);
int reading9 = digitalRead(pulsRipVout);
if (reading9 != lastButtonState9) {
lastDebounceTime9 = millis();
}
if ((millis() - lastDebounceTime9) > debounceDelay9) {
if (reading9 != buttonState9) {
buttonState9 = reading9;
if (buttonState9 == HIGH) {
ledState12 = !ledState12;
ledState13 = !ledState13;
}
}
}
digitalWrite (RipMan, ledState12);
digitalWrite (RipAuto, ledState13);
lastButtonState9 = reading9;
}
Codice: Seleziona tutto
#define ledPinON 2 //LED RELE OUT ON
#define ledPinOFF 3 //LED OUT OFF
#define pulsON 4 //PULSANTE OUT ON
#define pulsOFF 5 //PULSANTE OUT OFF
#define buttonPinPROTa 6 //INGRESSO PROTEZIONE LINEA A (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPinPROTb 7 //INGRESSO PROTEZIONE LINEA B (PROTEZIONE DIFFERENZIALE)
#define ledPinPROTa 8 //LED RELE PROTEZIONE LINEA A
#define ledPinPROTb 9 //LED RELE PROTEZIONE LINEA B
#define buttonPinRESET 10 //PULSANTE RESET PROTEZIONI
#define pulsRipVout 11 //PULSANTE RIPRISTINO VOUT ON
#define RipMan 12 //LED RIPRISTINO VOUT ON MANUALE
#define RipAuto 13 //LED RIPRISTINO VOUT ON AUTOMATICO
Codice: Seleziona tutto
uint8_t outputStatus[NUM_DIGITAL_PINS];
uint8_t eravamoAccesi;
Grazie per l'info. Ma non credo che tentero' di replicare il circuito su tinkercad perche' come ho detto ultimamente questo simulatore e' diventato un tormento. Gia' la simulazione del codice che ho inviato, molto piu' semplice con solo tre interruttori + tre led e' stato molto difficile. Queste difficolta' non c'erano un anno fa, forse hanno cambiato la struttura del sito oppure e' aumentato molto il traffico al suo interno. Per capire se puo' essere cosa che dipenda dal mio PC ti chiederei se anche tu hai notato questo aspetto.RoccoCostruzioni ha scritto: ↑sab 13 feb 2021, 15:26 comunque Guido se ti va prova a replicare il circuito su tinkecad e vedi il funzionamento è abbastanza accattivante come logica!!!!
Grazie per la testimonianza. Allora mi metto l'animo in pace. Vediamo se nei prossimi giorni io riesca a provare il tuo codice.RoccoCostruzioni ha scritto: ↑dom 14 feb 2021, 23:11 l'unica cosa che ho notato, effettivamente, è che si è rallentato, nel senso che se schiacci il pulsante in maniera veloce non funziona ma lo devi mantenere per commutare qualcosa o farlo funzionare, anche i led prima accendevano e si spegnevano, adesso fanno tipo effetto fade in e fade out, ma ti posso assicurare che non il nostro pc, anche perchè ho un mac recentissimo e fa lo stesso, sarà la loro piattaforma che è lenta
Codice: Seleziona tutto
if (buttonPROTa == LOW && buttonPROTb == LOW) {
if (buttonReset == LOW) {
bytReset = 1;
myDigitalWrite (ledPinPROTa, LOW);
myDigitalWrite (ledPinPROTb, LOW);
if (ledState13 == HIGH) {
if (eravamoAccesi == HIGH) {
myDigitalWrite (ledPinOFF, LOW);
myDigitalWrite (ledPinON, HIGH);
}
}
}
}