Oppure

Loading
15/02/19 16:09
Thejuster
Buonasera ho un problema che non riesco a risolvere con arduino.
Quando tento di leggere qualcosa da A0,A1 etc arduino va in blocco o si riavvia.

semplicemente uso analogRead e basta.

ho anche cambiato scheda pensando che fosse guasta ma non capisco la ragione
Ultima modifica effettuata da Thejuster 15/02/19 16:13
mire.forumfree.it/ - Mire Engine
C# UI Designer
15/02/19 17:56
TheDarkJuster
Posso vedere il codice problematico?
Ti sei documentato se sia necessario impostare dei registri prima? Sei sicuro che stai esegue do un analogRead dai pin collegati all'ADC interno? Non mi vengono in mente altri motivi per un fallimento o reset se non un watchdog male impostato, lo hai per caso abilitato? Hai controllato quanto tempo serve alla conversione? Gli adc per approssimazioni successive non sono la cosa più veloce al mondo.....
aaa
15/02/19 18:39
nessuno
Che modello esatto di Arduino? Sembra un problema hw ... di quale schema parli?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
15/02/19 19:35
Thejuster
In pratica leggo contemporaneamente da A0 a A3 in totale 4 pin con analogRead.

Questo per verificare dei pulsanti se vengono attivati.
in più un ciclo di verifica tramite array per via del debounce.

il codice è molto semplice.

non faccio altro che settare ciclicamente valori e verifica da A0 ad A3


lettura1 = analogRead(A0);

/* ciclo di verifica  delay(300); */

lettura2 = analogRead(A3);  

//e così via




il problema è che si blocca completamente tutto.
e avvolte anche se non è collegato nulla si spegne e riaccende 3 o 4 volte di seguito.
per poi funzionare qualche istante e si riavvia.

Ho provato sia su Arduino UNO compatibile che su Arduino Leonardo.
Stesso risultato.

@DarkJuster
ADC esterno? no.
Uso semplicemente il 5v di arduino per farlo incanalare nei 4 pulsanti di cui ogni output di un pulsante è collegato
al rispettivo A0,A1,A2,A3
potrebbe essere questo il problema?
E' come se andasse in corto invece ho controllato e ricontrollato decine di volte il cablaggio ma è tutto corretto.

cdn.discordapp.com/attachments/278928749246939136/545283820803588106/…

i pulsanti sono quelli in cima.
quei 4 in parallelo.

i ponticelli trasmettono la +5v ad ogni pulsante mentre l'altra estremità che scende va a collegarsi sui pin di arduino.

Il trasformatore è per alimentare le elettrovalvole da 24v e un forte buzzer di avviso.
mentre quell'altro per arduino è fissato nell'angolo.

per le valvole ho un modulo relay che switcha il voltaggio 24v quando si dà l'ok per far partire il meccanismo.

Mancano ancora molti altri componenti, ma se non risolvo questo problema è inutile continuare.
Ultima modifica effettuata da Thejuster 15/02/19 19:42
mire.forumfree.it/ - Mire Engine
C# UI Designer
15/02/19 21:36
Mikelius
Bisognerebbe vedere pure lo schema elettrico.
Non conosco a fondo arduino, ma mi viene da pensare che gli ingressi siano ad alta impedenza, quindi necessitano di resistenze di pull-up/down per funzionare correttamente il circuito. Dipende dal circuito. Se quando premi il tasto si collega l'ingresso a Vcc, devi mettere resistenze di pull Down, cioè una resistenza tra l'ingresso e GND. in caso contrario di pull -up , cioè una resistenza tra ingresso e Vcc. Queste, quando non è premuto il tasto, forzano il valore d'ingresso dei piedini A0/3 rispettivamente a GND e VCC. Evitando letture errate dal parte del micro.
aaa
15/02/19 21:48
TheDarkJuster
Postato originariamente da Thejuster:
In pratica leggo contemporaneamente da A0 a A3 in totale 4 pin con analogRead.

Questo per verificare dei pulsanti se vengono attivati.
in più un ciclo di verifica tramite array per via del debounce.

il codice è molto semplice.

non faccio altro che settare ciclicamente valori e verifica da A0 ad A3


lettura1 = analogRead(A0);

/* ciclo di verifica  delay(300); */

lettura2 = analogRead(A3);  

//e così via



il problema è che si blocca completamente tutto.
e avvolte anche se non è collegato nulla si spegne e riaccende 3 o 4 volte di seguito.
per poi funzionare qualche istante e si riavvia.

Ho provato sia su Arduino UNO compatibile che su Arduino Leonardo.
Stesso risultato.

@DarkJuster
ADC esterno? no.
Uso semplicemente il 5v di arduino per farlo incanalare nei 4 pulsanti di cui ogni output di un pulsante è collegato
al rispettivo A0,A1,A2,A3
potrebbe essere questo il problema?
E' come se andasse in corto invece ho controllato e ricontrollato decine di volte il cablaggio ma è tutto corretto.

cdn.discordapp.com/attachments/278928749246939136/545283820803588106/…

i pulsanti sono quelli in cima.
quei 4 in parallelo.

i ponticelli trasmettono la +5v ad ogni pulsante mentre l'altra estremità che scende va a collegarsi sui pin di arduino.

Il trasformatore è per alimentare le elettrovalvole da 24v e un forte buzzer di avviso.
mentre quell'altro per arduino è fissato nell'angolo.

per le valvole ho un modulo relay che switcha il voltaggio 24v quando si dà l'ok per far partire il meccanismo.

Mancano ancora molti altri componenti, ma se non risolvo questo problema è inutile continuare.

Non ho mai parlato di adc esterno, ma di quello DENTRO il micro, infatti ho scritto interno. Se il watchdog è abilitato duramte la lettura e tu fai un delay è occio che il micro si riavvia, quindi ti chiedo di controllare se lo hai abilitato. Se non è il caso ti serve una resistenza di pull-up.
aaa
18/02/19 7:25
Thejuster
riguardo al codice ho fatto un qualcosa molto grezzo da leggere.
Ma purtroppo l'unico modo funzionale per il debounce.

questo è un grafico del mio debounce

ogni # equivale ad un ciclo update.
quindi immaginate il casino i valori che legge l'analog sono scombinati
quindi ho fatto una verifica su array

279 # 1023 # 0 # 0 # 19 # 1023 # 1023 # 1023 # 
279 # 1023 # 0 # 0 # 19 # 1023 # 1023 # 1023 # 
279 # 1023 # 1023 # 0 # 19 # 1023 # 1023 # 1023 # 
279 # 1023 # 1023 # 367 # 19 # 1023 # 1023 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 1023 # 1023 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 0 # 1023 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 0 # 875 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 0 # 875 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 0 # 875 # 1023 # 
279 # 1023 # 1023 # 367 # 0 # 0 # 875 # 1023 # 
0 # 1023 # 1023 # 367 # 0 # 0 # 875 # 1023 # 


e il comando o pressione la accetta solo se si ha


0 # 0# 0 # 0 # 0# 0# 0# 0# 




codice


Ciclo Update



 //--------------------------
  lettura = analogRead(A0);

  if(passo != leggere)
  {
     segue[passo] = lettura; passo++;    
     
  }


  if(passo == leggere) { passo = 0; }
 
  if(segue[1] == 0 && segue[2] == 0 && segue[3] == 0 && segue[4] == 0 && segue[5] == 0 && segue[6] == 0 && segue[7] == 0 && segue[8] == 0) { premuto2=true;};


//-----------------------------------

  lettura1 = analogRead(A1);

  if(passo1 != leggere1)
  {
     segue1[passo1] = lettura1; passo1++;    
     
  }
   if(passo1 == leggere1) { passo1 = 0; }
  

  
  if(segue1[0] == 0 && segue1[1] == 0 && segue1[2] == 0 && segue1[3] == 0 && segue1[4] == 0 && segue1[5] == 0 && segue1[6] == 0 && segue1[7] == 0) { premuto1 = true; }
  
 
// ecc. ecc.  questo procedimento per ogni pulsante...



  //Pulsante 2 premuto
   if(premuto2)
   {
   
     if(posizione == 0) { resettainput(); altezza+=10; premuto2 = false; delay(600); }
     if(posizione == 1) { resettainput(); larghezza+=10; premuto2 = false; imposta(); delay(600); }
     if(posizione == 2) { resettainput(); canalina++; premuto2 = false; imposta(); delay(600); }
   }




il vodi resettainput();
non fa che ripulire tutti gli array inserendo come valore -1;
in modo da evitare che il programma legge il pulsante come sempre attivo.


mire.forumfree.it/ - Mire Engine
C# UI Designer