Vai al contenuto
PLC Forum


automazione bloccata


Francesco Querin

Messaggi consigliati

Francesco Querin
fatto come dici, testato sulla seriale il pulsante d che dovrebbe stoppare e passare al case 2  non fa altro che resettare tutto, come se premessi il pulsante rosso reset di arduino  invece che chiamare il case 2. controprova premo solo il pulsante d e vedo sulla seriale esecuzione programma e sotto 2 il valore appunto di int variabile.
 
tolto if( bevanda != rele1) e funziona, si accende il rele della pompa e il rele della bevanda 1 anche se premo il pulsante della bevanda 3, poi non vedo sulla seriale versamento bevanda e infine fa uno strano suono e si blocca, stoppando il funzionamento e poi riavviandosi.
Link al commento
Condividi su altri siti


Quote

fatto come dici, testato sulla seriale il pulsante d che dovrebbe stoppare e passare al case 2  non fa altro che resettare tutto,

 

Non è che si possono fare tante ipotesi:

  • o c'è un errore macroscopico che manda il software "a farfalle" sino a quando ripassa per l'indirizzo di zero
  • oppure, causa più probabile, il comando attiva un qualche cosa che genera un bel disturbo. la sensibilità ai disturbi è il tallone di achille di arduino.

Hi provato a fare i test senza periferiche collegate (relè, servi, etc)

 

Quote

si accende il rele della pompa e il rele della bevanda 1 anche se premo il pulsante della bevanda 3, poi non vedo sulla seriale versamento bevanda e infine fa uno strano suono e si blocca, stoppando il funzionamento e poi riavviandosi.

 

Fai le prove senza collegare relè e motori.

Usa solo dei LEDs sulle uscite (sempre con un resistore in serie, ovviamente) per virificare la loro attivazione. Credo che il problema sia proprio causato anche da disturbi che mandano il programma "a ranocchie".

Link al commento
Condividi su altri siti

Francesco Querin
il problema e qui digitalWrite(bevanda, HIGH); tutto regolare solo che siaccende solo la pompa,
se tolgo il codice iniziale bevanda=rele1 automaticamente senza impostazione bevanda diventa rele 2 e quindi quando arriva al case 2 parte pompa e valvola 1, se imposto premendo altri pulsanti tutto sembra regolare solo che pero si accende sempre bevanda 1 e pompa,
 
usando solo led e pulsanti ci sono meno disturbi e fila piu regolare infatti ce sempre scritto versamento bevanda che prima non compariva, pero ce sempre il fatto che se non metto variabile=0 parte subito al case 1 e vale lo stesso per bevanda=rele1 e altre situazioni simili.
Link al commento
Condividi su altri siti

Francesco Querin

in seriale ce

serial.println bevanda

serial.println variabile

ce

pulsante a variabile = 1 e bevanda = rele2

pulsante b variabile = 1 e bevanda = rele3

pulsante c variabile = 1 e bevanda = rele4

pulsante d variabile = 2

 

impostazioni base

bevanda=rele1

variabile=0

 

sul monitor seriale leggo

0 variabile

26 bevanda

alla pressione del pulsante a,b o c

1

27,28 o 29

alla pressione del pulsante d

2

26

dovrebbe essere

2

27,28 o 29

 

mettendo impostazione al posto di bevanda e nel pulsante d sotto variabile bevanda=impostazione, oppure nel case 2 bevanda=impostazione, oppure nel pulsante d bevanda=bevanda il risultato ottenuto in diverse prove e sempre lo stesso.

togliendo le impostazioni iniziali oltretutto bevanda e variabile ottengono la prima impostazione che trovano anche se e dentro

if ( digitalRead(buttonA) ==HIGH )

Link al commento
Condividi su altri siti

Scusa ma rele2, rele3, rele4 casa sono?

 

Non ho visto le dichiarazioni, ma credo di intuire che non puoi fae questa eguaglianza " bevanda=rele1 ". Probabilmente il numero che leggi sul monitor è l'indirizzo fisico di rele1

Link al commento
Condividi su altri siti

Allora esegue correttamente il programma.

La macchina fa esattamente quello che gli dici di fare.

 

Se hai:

Quote

 

alla pressione del pulsante d

2

26

dovrebbe essere

2

27,28 o 29

 

 

Vai a vedere cosa fa nel ciclo relativo al pulsante d.

Io non posso fare il debug del programma al posto tuo.

Link al commento
Condividi su altri siti

Francesco Querin

capito, mi sono dimenticato di dire che un mio amico mi ha detto che quando arriva al pulsante d si e dimenticato del resto e che devo fare

a= lettura del pulsante a  e che se

a fai codice,

quindi ho messo

a= variabile 1 a= bevanda= rele2

al pulsante d variabile=2  a.

pero non e cambiato niente, che sia il pulsante d avevo intuito bene pero non so come vedere che cosa fa quando e li e come risolverlo. provero a debuggare il pulsante d

Link al commento
Condividi su altri siti

25 minuti fa, gabri-z scrisse:

Non c'è modo di far girare il programma " al rallentatore " ?

 

No è uno dei limiti di arduino; l'unica cosa possibile è mettere delle stampe di traccia e vedere sul monitor dove transita il programma.

34 minuti fa, Francesco Querin scrisse:

provero a debuggare il pulsante d

 

Il pulsante "D" viene letto ed il programma fa esattamente quello che gli hai detto di fare.

 

E' possibile sapere cosa vuoi far fare al pulsante "D"?

Link al commento
Condividi su altri siti

Francesco Querin

il pulsante d deve portare il programma al case 2,  cioe nel codice dentro il case 1 deve stopparlo e lo sta facendo bene, deve poi chiamare il case 2 e interompere il case 1 e anche qui sta facendo bene, quello che sta facendo e che non dovrebbe fare e mettere la variabile bevanda a rele1(cioe la pompa) e lasciarla impostata a rele2 o rele3 o rele4(che sarebbero le elettrovalvole che versano le bevande).

bevanda dovrebbe rimanere a rele2 o rele3 o rele4 invece di essere resettata a rele1.

Link al commento
Condividi su altri siti

Io ho guarsdato il file allegato; tu hai scritto:

 

if(digitalRead(buttonD)==HIGH)
{
  variabile=2;
  a;
} 
-----------
case 2:
  myservo.write(180);
 /* qui aggiungi Serial.println(lettura, soglia); */
  while(lettura < soglia)
  {
  digitalWrite(rele1, LOW);
  digitalWrite(bevanda, LOW);
  Serial.println("versamento bevanda");
  }
  if(lettura > soglia){variabile=3;}
  break ;

Che significa che se lettura è minore di soglia esegue le istruzioni, altrimenti salta ed esce.

Aggiungi la riga che ti ho messo tra i commenti e verifica che ci siano le condizioni affinchè esegua il loop.

 

Link al commento
Condividi su altri siti

Francesco Querin

capito, lettura e analogRead A0 che e 0, per cui funziona infatti ogni volta vedo su seriale versamento bevanda, ho tolto a; a= variabile=1 e a= bevanda= rele2 visto che non funzionava ho provato anche altre vie ma sempre il pulsante d resetta bevanda tranne nel caso,

pulsante a

variabile=1

a=high

pulsante d

variabile=2

if a=high  bevanda=rele2

problema essendo a= cioe a impostato, parte subito a b e c essendo c in fondo sovrascrive gli altri e quindi parte sempre c, mettendo invece == uguale invece di = assegnazione non funziona, messo anche serial.println e in seriale leggo

a

b

c

invede dovrei leggere solo a o b o c

aggiunto la riga che mi ai detto testero il programma

Link al commento
Condividi su altri siti

Francesco Querin

int variabile=0;
int soglia=250;
int bevanda;

bevanda=rele1;

semplicemente mettendole nel loop tra il passaggio dei pulsanti a b e c al pulsante d in quel pezzo cera il loop che impostava le variabili a come erano a inizio programma ottenendo il reset e provocando in mancanza di variabile=0 un assegnazione pari al primo valore che trovavano, spostandole dal loop a inizio programma dopo le librerie prima del void setup () non solo scrivo

int variabile;
int soglia=250;
int bevanda;

ma funziona pure perché non ce un loop che le rimposta a inizio ciclo, grazie di tutto  il tempo e i consigli sono stati sempre utili.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...