Problema alimentazione

Salve a tutti :slight_smile:
Sto cercando di realizzare un banco comandi per il modellino di una funivia, utilizzando degli arduni. Il primo problema è che con un arduino devo leggere lo stato di 7 pulsanti... per farlo ho utilizzato le resistenze interne di Arduino (ponendo i 7 pin HIGH). Ora, collegando i 7 pulsanti ad un unico GND, il tutto non funziona, ed anzi, senza accendere l'Arduino ma collegando i pulasnti ad un gnd 5v esterno l'Arduino si accende ! ( i led sono poco luminosi, ma si accende !)
Come mai ?

DEVE funzionare. Posta lo sketch. E non collegare mai Arduino a segnali di alcun tipo se non è alimentato!

Ok accendo il PC e vi giro lo sketch

int ripristino = 0;
int massimacoppia = 0;
int AR = 0;
int AN = 0;
int AE = 0;
int massimavel = 0;
int circuitodisicurezza = 0;
int marcia = 0;
int Fase = 0;
int CONSENSO = 0;
int TEST = 0;
int FASE = 0;
unsigned long tempo;
unsigned long tempo3;
unsigned long dati; 
unsigned long dati3;

void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(14,OUTPUT);
pinMode(15,OUTPUT);
pinMode(16,OUTPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);

digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(17, HIGH);
digitalWrite(18, HIGH);

tempo = millis();
tempo3 = millis();
dati = millis();
dati3 = millis();
}

void loop(){
marcia = digitalRead(18);
ripristino = digitalRead(17);
circuitodisicurezza = digitalRead(2);
AR = digitalRead(3);
AN = digitalRead(4);
AE = digitalRead(5);
massimacoppia = digitalRead(6);
massimavel = digitalRead(7);

if(marcia == LOW && TEST == 0 && CONSENSO == 1){
if(FASE == 0){
    FASE = 1;
    dati3 = millis();
  }
if(FASE == 1){
  tempo3 = millis();
  if(tempo3 >= dati3+1000){ //accende tutti i LED
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(12, HIGH);
    FASE = 2;
    dati3 = millis();
  }
}
if (FASE == 2){
  tempo3 = millis();
  if(tempo3 >= dati3+4000){ //spegne tutti i LED
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    dati3 = millis();
    TEST = 1;
  }
}

}

if(marcia == HIGH){
if( circuitodisicurezza == LOW && AR == LOW && AN == LOW && AE == LOW && massimacoppia == LOW && massimavel == LOW && CONSENSO == 1 ){
 Serial.println("cane");
  digitalWrite(16, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  digitalWrite(14, LOW);
  digitalWrite(15, LOW);
  TEST = 0;
  FASE = 0;
}

if(CONSENSO == 0 && ripristino == HIGH){
Fase = 0;
}
if(CONSENSO == 0 && ripristino == LOW){
Serial.println("RIPRISTINO");
if (Fase == 0){
  dati = millis();
  Fase = 1;
}
if(Fase == 1){
tempo = millis();
if(tempo >= dati+3000){
  CONSENSO = 1;
  Fase = 0;
  dati = millis();
}
}
}
}


if( circuitodisicurezza == HIGH && TEST == 1){
digitalWrite(16,LOW);
digitalWrite(14, HIGH);
CONSENSO = 0;
}

if(AR == HIGH){
digitalWrite(16, LOW);
digitalWrite(13, HIGH);
digitalWrite(8, HIGH);
CONSENSO = 0;
//Serial.println(
}

if(AN == HIGH){
digitalWrite(16, LOW);
digitalWrite(14, HIGH);
digitalWrite(9, HIGH);
//Serial.println(
CONSENSO = 0;
}

if(AE == HIGH){
digitalWrite(16,LOW);
digitalWrite(15, HIGH);
digitalWrite(10, HIGH);
CONSENSO = 0;
}

if(massimacoppia == HIGH){
digitalWrite(16, LOW);
digitalWrite(14, HIGH);
digitalWrite(11, HIGH);
CONSENSO = 0;
}

if(massimavel == HIGH){
digitalWrite(16, LOW);
digitalWrite(14, HIGH);
digitalWrite(12, HIGH);
CONSENSO = 0;
}
 }

>moonflower737: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Intanto ti consiglio di usare la sintassi pinMode (pin, INPUT_PULLUP) per abilitare i pull-up interni sui pin che ti interessano.

Secondo, con qualche ciclo for e/ qualche funzione potresti semplificare e rendere più leggibile il programma.

Ma qual è il problema preciso che hai? Questo sketch è un po' lungo... L'hai sviluppato un pezzo alla volta, spero.

Dunque il problema principale sta nel fatto che dopo aver portato per la prima volta il " CONSENSO = 1; " AR e AN non vengono più letti

Per il cicol for... prima devo capire bene come funziona

Non capisco molto quello che fa lo sketch, ma non vedo motivi per cui dovrebbe succedere quanto dici. Prova a premere CTRL+T in Arduino, ti formatterà il codice adeguatamente e verifica se gli if sono tutti annidati come da intenzione.

Ok grazie :slight_smile: