modifica timer
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
caricando il listato su arduino con buttonPinRESET in PULLUP funziona tutto, per quanto riguarda le and ho usato le doppie && commerciali.
Re: modifica timer
Da me funzionava anche senza la espressione PULLUP perche' in Tinkercad ho messo una resistenza esterna tra il pin ed il positivo Non ho mai usato questa espressione.
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
questo è il listato originale con la modifica del signor Guido:
se non capite qualcosa chiedete pure
ho fatto anche la simulazione con tinkercad se qualcuno vuole replicarla per capire il funzionamento della logica che ho utilizzato, purtroppo non mi fa caricare il file del progetto ma solo la foto, comunque se volete riprodurlo vi basta cambiare solo la parte iniziale, visto che tinkercad dispone solo di arduino uno, eccola:
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;
}
ho fatto anche la simulazione con tinkercad se qualcuno vuole replicarla per capire il funzionamento della logica che ho utilizzato, purtroppo non mi fa caricare il file del progetto ma solo la foto, comunque se volete riprodurlo vi basta cambiare solo la parte iniziale, visto che tinkercad dispone solo di arduino uno, eccola:
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
- Allegati
-
- Porzione Listato con TinkerCad.png (99.37 KiB) Visto 3385 volte
Re: modifica timer
Bella realizzazione su Tinkercad: e' stata realizzato il circuito con immensa pazienza. Io ho problemi di estrema lentezza ed incertezza nei progetti che utilizzano Arduino, eppure ho una connessione ADSL di tutto rispetto. Forse dipende dal browser, forse dal SO dato che il PC che utilizzo per queste programmazioni hanno Windows7.
Vedo che sul codice hai utilizzato alcuni miei suggerimenti nella sintassi ed adesso diventa tutto piu' leggibile.
Ho cercato di implementare un azionamento ad interrupt per quanto riguarda il reset, perche' ho fatto il ragionamento che il reset deve agire quasiasi cosa stia facendo il processore, ma ho rinunciato : se non si utilizza spesso questo linguaggio ci si arruginisce, inoltre a me il C non piace a prescindere.
Non ho capito le seguenti righe:
Vedo che sul codice hai utilizzato alcuni miei suggerimenti nella sintassi ed adesso diventa tutto piu' leggibile.
Ho cercato di implementare un azionamento ad interrupt per quanto riguarda il reset, perche' ho fatto il ragionamento che il reset deve agire quasiasi cosa stia facendo il processore, ma ho rinunciato : se non si utilizza spesso questo linguaggio ci si arruginisce, inoltre a me il C non piace a prescindere.
Non ho capito le seguenti righe:
Codice: Seleziona tutto
uint8_t outputStatus[NUM_DIGITAL_PINS];
uint8_t eravamoAccesi;
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
sinceramente non li ho capiti al 100% mi sono stati dettati da PGV qui sul forum stesso ma funzionano alla grande, praticamente fanno da memoria, per esempio se il led A era acceso nel momento in cui schiaccio il reset me lo riaccendi, altrimenti non fai nulla.
comunque Guido se ti va prova a replicare il circuito su tinkecad e vedi il funzionamento è abbastanza accattivante come logica!!!!
comunque Guido se ti va prova a replicare il circuito su tinkecad e vedi il funzionamento è abbastanza accattivante come logica!!!!
Re: modifica timer
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!!!!
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
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
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
mi dispiace che non posso allegare il file di tinkercad così bastava che lo copiavi e avevi tutto gia fatto altrimenti mi mandi la mail e li te lo posso girare!!! anche perchè mi serve che quelle dannate variabili non vadano a 1 se schiaccio buttonReset
Re: modifica timer
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
Ma intanto per quel malfunzionamento che hai detto prova a scrivere quel codice cosi':
invece di:
if (buttonPROTa == LOW && buttonPROTb == LOW && buttonReset == LOW) {
bytReset = 1;
etc
diventa:
if (buttonPROTa == LOW && buttonPROTb == LOW) {
if buttonReset == LOW {
bytReset = 1;
etc
mi sembra di ricordare qualcosa a proposito di quando gli operandi sono piu' di due
-
- Messaggi: 51
- Iscritto il: mer 9 set 2020, 21:16
Re: modifica timer
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);
}
}
}
}