problema array/led

nel mio progetto sono presenti due pulsantiere munite di pulsanti con led, per motivi inerenti al progetto i led non sono collegati al on/off dei pulsanti ma sono pilotati via software dai pin di Arduino Due e raccolti in un array (si parla di 7 led). Che cosa succede: il PRIMO led si accende correttamente ed al pin di uscita misuro 3 V....gli altri sei si 'accendono' in modo appena visibile ed ai loro pin misuro 1.6/1.7 V. per prova...ho scritto due brevi scketch diversi: nel primo i pin dei led sono inizializzati uno per uno (int led1 = 39; ...etc etc) e TUTTI i led funzionano correttamente. Nel secondo sketch ho riunito i 7 led in un array.....e siamo da capo: il primo funziona bene gli alltri sei NO! le misure mi confermano che solo il primo pin dell'array dà 3 V...gli altri 1.6/1.7. ....qualcuno puo' suggerire gentilmente una soluzione?

grazie

non conosco il motivo di questa caduta di tensione...posso suggerirti di usare uno shift register tipo il 74hc595...da verificare se va bene per la tua situazione

Uno schema?
O anche solo foto

Ma i led li devi accendere tutti contemporaneamente? Hai provato ad accenderli in sequenza uno dopo l'altro per vedere se accendono bene? Posta il codice magari l'errore e li.

Hai messo delle resistenze sui led ? Ma tra 7 valori di pin costanti e i 7 messi in array i pin sono sempre gli stessi ? Rammento che i pin possono fornire un tot massimo di corrente, ma NON solo individualmente come corrente massima, ma anche come "gruppo" o banco; 7*20mA richiedono al gruppo 140mA che sulla Due potrebbero essere troppi per un singolo banco. Come detto prima, posta il codice.

Dubito fortemente che i pin della DUE possano accendere direttamente dei LED senza, prima o poi, dannegiarsi.

Sulla DUE, molti dei pin sono in grado di dare un decimo della corrente (max 3 mA) dei pin degli altri Arduino (max 40 mA). I rimanenti comunque non danno più di 15 mA (sempre come max).

Occorre verificare molto attentamente con il datasheet della MCU per sapere quali pin possono dare fino a 3mA (MAX) e quali fino a 15mA (MAX).

Guglielmo

i led si accendono contemporaneamente, poi…nello sketch ‘completo’ blinkano al cambio di stato.
si, i pin sono sempre gli stessi in array e posti singolarmente.

int led1 = 39;
int led2 = 44;
int led3 = 42;
int led4 = 40;
int led5 = 8;
int led6 = 18;
int led7 = 7;
int power = 38;
int powerState = 0;
int i = 0;
void setup()
{
 pinMode (power, INPUT);
 pinMode (39, OUTPUT);
 pinMode (44, OUTPUT);
 pinMode (42, OUTPUT);
 pinMode (40, OUTPUT);
 pinMode (8, OUTPUT);
 pinMode (18, OUTPUT);
 pinMode (7, OUTPUT);
  }
void loop()
{
 powerState = digitalRead (power);

 if (powerState == HIGH)
 {
 digitalWrite (led1, HIGH);
 digitalWrite (led2, HIGH);
 digitalWrite (led3, HIGH);
 digitalWrite (led4, HIGH);
 digitalWrite (led5, HIGH);
 digitalWrite (led6, HIGH);
 digitalWrite (led7, HIGH);
 }
 else 
 {
  digitalWrite (led1, LOW);
 digitalWrite (led2, LOW);
 digitalWrite (led3, LOW);
 digitalWrite (led4, LOW);
 digitalWrite (led5, LOW);
 digitalWrite (led6,LOW);
 digitalWrite (led7, LOW);
 }
 }

tutti funzionano regolarmente

int SquareLed[] = {39,44,42, 40, 8,18,7};
int power = 38;
int powerState = 0;
int i = 0;
void setup()
{
 pinMode (power, INPUT);
 {
for (int i = 0; i <7; i++);
{
    
 pinMode (SquareLed [i], OUTPUT);
 
}
 }
}
void loop()
{
 powerState = digitalRead (power);

if (powerState == HIGH)
   for (i=0;i<7;i++)
  { digitalWrite (SquareLed [i], HIGH);}
  else

   for (i=0;i<7;i++)
   {digitalWrite(SquareLed[i],LOW);}
}

il primo funziona bene…glia altri a meno di metà

>Clgrossi: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:

[code] _il _tuo_ codice_ [/code]

così da non venire interpretato e non dare adito alla formazione di caratteri/formattazioni indesiderati (bastava riguardassi il tuo post per accorgertene). Grazie.

Guglielmo

pinMode (SquareLed , OUTPUT);

digitalWrite (SquareLed , HIGH);

manca l' indice

pinMode(SquareLed[i] , OUTPUT);

digitalWrite(SquareLed[i],HIGH);

No. Proprio perché non manca vediamo in [ i ] italico

>PaoloF_60: ... NON manca nessun indice ... è che, NON essendo stato racchiuso il codice nei tag CODE, esso è stato interpretato, per cui il [ i ] è diventato "italic"

Guglielmo

Edit: Standardoil mi ha preceduto :D

SPERO di averlo editato bene…scusate ma sono nuovo inesperto

Non centra nulla, ma aumenta la leggibilità Mettiti a posto con le graffe, che non metti le graffe a if ed else, ma le metti al for Standardizza , e nel caso particolare metti le a if e else Ma non è questo il problema... Comunque mettiti a posto con rientri e uso di variabili Ti sei accorto che usi due differenti variabili i per inizializzare e poi comandare i led? Prima legge di Nelson (che sono io) sulle maniere: Devi fare le stesse cose sempre alla stessa maniera, Se fai sempre alla maniera giusta sei a posto Se fai sempre nella maniera sbagliata ti basta di capire una volta sola Se fai in tante maniere differenti, non ti basta di capire mai

intanto grazie.....quindi il problema QUALE è? ....no, non me ne sono accorto...me le puoi cortesemente rendere evidenti? lo SO che sono una capra.....

Comincia col mettere leggibile il programma, che poi si vede A proposito, uno schema?

ti chiedevo appunto 'come' renderlo leggibile, non ho capito quali variabili e comandi ho scritto in modo 'sbagliato' e le parentesi mi sembrano anche giuste....come vedi la mia ignoranza non ha limiti: ècome l'universo....ha dimensioni astronomiche ed è in continua espansione.

Lo strano non è che non si accendono i successivi Lo strano è che si accende il primo Non è che è differente dagli altri? Magari più piccolo?

 void loop()
{
   powerState = digitalRead (power);

  if (powerState == HIGH)
  {   for (i=0;i<7;i++)
     digitalWrite (SquareLed [i], HIGH);}
    else

    { for (i=0;i<7;i++)
     digitalWrite(SquareLed[i],LOW);}
}

immagino che ti riferivi a QUESTE parentesi (grazie)

i successivi SI ACCENDONO <( esono tutti uguali come puoi vedere dalla foto che ho postato)…con una intensità molto minore, QUESTO è il mio problema…ma SOLO se sono posti in array, indicizzati singolarmente si accendono in modo regolare

int SquareLed[] = {39,44,42, 40, 8,18,7};
int power = 38;
int powerState = 0;
int i = 0;

void setup() {
  pinMode (power, INPUT);
  for (int i = 0; i <7; i++) {  
    pinMode (SquareLed [i], OUTPUT);
  }
}

void loop() {
  powerState = digitalRead (power);
  if (powerState == HIGH) {
    for (i=0;i<7;i++) {
      digitalWrite(SquareLed [i], HIGH);
    }
  }
  else {
    for (i=0;i<7;i++) {
      digitalWrite(SquareLed[i],LOW);
    }
  }
}

cosi dovrebbe essere identata giusta e con le parentesi giuste
non ho la due per provarla e non trovo la due nemmeno fra le schede
quindi non ho potuto nemmeno compilare … che scheda posso usare per compilare.

Fra l’ altro come segnalava Guglielmo il pin 18 è da 3 mA

Ho capito perché si accende il primo Scoperto tutto Lui non fa la pinmode in una for Mette un puntoevirgola subito dopo il for, che non fa nulla. Ma non capivo come mai si accendeva il primo Lui erroneamente aveva inizializzare una inutile variabile int a nome i Ma questa permetteva la pinmode al primo elemento dello array