Led com baixa luminosidade

Estou fazendo um exercicio o qual tenho de acender leds em sequencia ordenada apagá-los de depois acende-los na sequencia inversa(acende-los no sentido depois em outro)

Criei um array

byte ledpin[]={13,12,11,10,9,8,7};

tenho 7 elementos ordenados de 0-6

Nessa parte do codigo

for(int x=0;x<6;x++)
   {pinMode(ledpin[x],OUTPUT);}  }

x vai de zero a 6 quando incrementado até 7 a variável x nao entra mais no for

Se a condiçao do"for" for x<=7 o ultimo led acende normalmente, mas se for a descrita acima x<6 o ultimo led acende fracamente.Tenho dúvida no porque disso?

tem que ser porque quando você escreve

x <= 7

o último número é 7

mas quando você escreve

x < 6

o último número é 5

A primeira condição é menor o IGUAL
e na segunda só minor, 6 não é menor que 6, por isso que para em 5

se você escreve

x <= 6

então o número final vai ser 6

pelo tanto acho que o led nem ta ligando.

mas tipo nao entendo pq seguindo seu pensamento nao haveria necessidade de haver a notaçao logica “<=” ou “>=”

6 nao e menor que 6. 6 é <=6
entao se 6 nao e menor que 6 o for roda no 6 e valor final de x e 7

A explicação do gepd está correta.

“6 nao e menor que 6. 6 é <=6”

Não entendi essa parte.

6,6 é menor ou igual a 6?

Penso que 6,6 é maior que 6.

Você não pode usar x<=7 pois, seu array tem apenas 7 elementos e a contagem do array começa do 0.

FernandoGarcia:
A explicação do gepd está correta.

“6 nao e menor que 6. 6 é <=6”

Não entendi essa parte.

6,6 é menor ou igual a 6?

Penso que 6,6 é maior que 6.

o ponto se refere a um ponto final:
“6 nao e menor que 6.
6 é <=6”

Quando eu usava linguagem c o “for” ,nesse caso, sairia com 7 justamente por 6 nao ser < que 6

Se a explicaçao do gepd está correta entao duvida sanada

As condicionais lógicas são as mesmas em todas linguagens (que eu saiva)

o que você ta dizendo, em parte, ta errado.

primeiro 6 não é menor que 6 isso é certo, é igual, pelo tanto en um for o resultado vai ser

x = 6
x < 6

vai ser 5
nunca vai ser 7 porque 7 é MAIOR que 6 e você ta procurando um número menor
se você escreve

x <= 6

o ultimo é 6

x < 7

último é 6

x <= 7

último é 7
e assim.

Eu faço sempre da mesma forma, por isso nunca tenho esta dúvida. Neste caso, como o vector tem 7 elementos, uso o número 7 na condição de paragem do ciclo for. Sendo assim, como os elementos vão de 0 a 6, e uso o número 7, tenho que usar o “<”. Ou seja, deve ficar:

byte ledpin[]={13, 12, 11, 10, 9, 8, 7};

for(int x=0; x<7; x++) {
   pinMode(ledpin[x],OUTPUT);
}

Na realidade, uma coisa que normalmente não faço é fazer a definição do vector, da forma apresentada (como o tamanho vazio). Normalmente preencho sempre o tamanho, neste caso ficaria com o número 7, já que são definidos 7 elementos. Ou seja:

byte ledpin[7]={13, 12, 11, 10, 9, 8, 7};

for(int x=0; x<7; x++) {
   pinMode(ledpin[x],OUTPUT);
}

Agora talvez se veja um pouco melhor, porque uso sempre o “<”, uma vez que tanto na definição do vector como na condição de paragem do for utilizo o mesmo número. Como se quiser alterar o tamanho do vector, tenho que alterar pelo menos dois locais diferentes, normalmente defino uma constante que utilizo em todos estes locais:

#define DIM_LED_PIN 7
byte ledpin[DIM_LED_PIN]={13, 12, 11, 10, 9, 8, 7};

for(int x=0; x<DIM_LED_PIN; x++) {
   pinMode(ledpin[x],OUTPUT);
}