Ajuda com redução de código

Pessoal seguinte estou programando com meu Arduíno Uno com meu filho e criei as seguintes linhas de comando:

int led1 = 1; int led2 = 2; int led3 = 3; int led4 = 4; int led5 = 5; int led6 = 6; int led7 = 7; int led8 = 8;

// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); }

// the loop routine runs over and over again forever: void loop() { digitalWrite(led1, HIGH); delay(15); digitalWrite(led1, LOW); delay(15); digitalWrite(led2, HIGH); delay(15); digitalWrite(led2, LOW); delay(15); digitalWrite(led3, HIGH); delay(15); digitalWrite(led3, LOW); delay(15); digitalWrite(led4, HIGH); delay(15); digitalWrite(led4, LOW); delay(15); digitalWrite(led5, HIGH); delay(15); digitalWrite(led5, LOW); delay(15); digitalWrite(led6, HIGH); delay(15); digitalWrite(led6, LOW); delay(15); digitalWrite(led7, HIGH); delay(15); digitalWrite(led7, LOW); delay(15); digitalWrite(led8, HIGH); delay(15); digitalWrite(led8, LOW); delay(15); digitalWrite(led7, HIGH); delay(15); digitalWrite(led7, LOW); delay(15); digitalWrite(led6, HIGH); delay(15); digitalWrite(led6, LOW); delay(15); digitalWrite(led5, HIGH); delay(15); digitalWrite(led5, LOW); delay(15); digitalWrite(led4, HIGH); delay(15); digitalWrite(led4, LOW); delay(15); digitalWrite(led3, HIGH); delay(15); digitalWrite(led3, LOW); delay(15); digitalWrite(led2, HIGH); delay(15); digitalWrite(led2, LOW); delay(15); digitalWrite(led1, HIGH); delay(15); digitalWrite(led1, LOW); delay(15); }

Esse código cria uma simples sequencia para os led's piscarem indo e voltando algo bem simples mesmo, mas como ainda estou engatinhando com os códigos vi que as linhas pinMode, são muito extensas e trabalhosas de digitar queria simplifica - las tendo em vista que todas estão indicando a mesma coisa que todas as portas dos leds da 1~8 são para OUTPUT, tentei fazer de outra forma:

"pinMode(led1,led2,led3,led4,led5,led6,led7,led8, OUTPUT)"

Porém ao escrever essa linha de comando a IDE do Arduino não compila e tive que escrever o código inteiro como abaixo:

pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT);

Não que seja muito difícil de se fazer mais tendo em vista que vou fazer com meu filho quero criar algo minimalista para ele ir aprendendo também....poderiam me ajudar ???

Abraços

unsigned char LED[8] = {1,2,3,4,5,6,7,8};//o pino 1 é usado como porta de transmissão... se calhar é melhor mudar

void setup() {
    for (unsigned char j = 0; j<8; j++) {
        pinMode(LED[j], OUTPUT);
    }
}

void loop(){

unsigned char up; 

//vai para cima... 
for (up = 0; up < 7; up++) {
    digitalWrite(LED[up], HIGH);
    delay(15);
    digitalWrite(LED[up], LOW);
    delay(15);
}

//vem para baixo... 
for (up = 6; up >= 0; up--) {
    digitalWrite(LED[up], HIGH);
    delay(15);
    digitalWrite(LED[up], LOW);
    delay(15);
}

Isto deve ser o que pretendes… não?

Queria algo mais simples por conta de estar ensinando meu filho de 8 anos a digitar os valores e entender as linhas de comando, e também aprender porque ainda estou começando a programar e não sei praticamente nada...

Como queres ensinar algo que não sabes? Eu dou valor ao facto de estares a tentar passar algo interessante e importante como programação ao teu filho, mas se não sabes, o que podes ensinar? Não devias primeiro aprender tu e passar a informação a ele? Ou aprenderem os dois e tirarem as dúvidas um ao outro.

O código que eu coloquei é bastante simples. É, arrisco até a dizer, o básico para se aprender ciclos “for” e vectores. Mais simples que aquilo não há. Uma ou duas pesquisas na net e descobres artigos suficientes que te expliquem o que ali está…

Portanto, das duas uma, ou aprendes o que eu escrevi faz (acredita, não é assim tão difícil), ou então fazes como estavas a fazer antes e usas o Copy/Paste para não teres de digitar tudo.

Consegui finalizar o código seguindo a mesma ordem das piscadas do LED, porém de forma mais simples possível evitando assim muitas linhas de código desnecessárias…estou aprendendo…kkkkkkkk

int led[8] = {1, 2, 3, 4, 5, 6, 7, 8};

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  for (int x = 0; x < 8; x++) {
    pinMode(led[x], OUTPUT);
  }
}

// the loop routine runs over and over again forever:
void loop() {
  for (int x = 0; x < 8; x++) 
    {
    digitalWrite(led[x], HIGH);
    delay(150);
    digitalWrite(led[x], LOW);
    delay(150);
    }
  for(int x = 8; x >= 0; x--)
  {
    digitalWrite(led[x], HIGH);
    delay(150);
    digitalWrite(led[x], LOW);
    delay(150);
  }
}

Aprendeu a mudar o nome da variável?

O código é o mesmo que o bubulinho escreveu.

Mudou mais alguma coisa... o interessante é que a mudança introduziu um erro no código...

Isso por acaso funciona? Ou apenas parece funcionar? O meu código tinha pequenos pormenores intencionais... como não repetir a piscadela no último LED ao subir.

bubulindo:
Mudou mais alguma coisa… o interessante é que a mudança introduziu um erro no código…

Isso por acaso funciona? Ou apenas parece funcionar? O meu código tinha pequenos pormenores intencionais… como não repetir a piscadela no último LED ao subir.

Seu código tem um pequeno erro aqui:

for (up = 0; up < 7; up++) {

Só vai ligar 7 LEDs.

Acho que estava preocupado com o pino 1.

o pino 1 é usado como porta de transmissão… se calhar é melhor mudar

De resto é praticamente a mesma coisa.

O código estava com alguns erros e de cara logo notei eles, foram fácil de resolver.....logo após isso introduzi mais algumas linhas de comando para terminar de implementar o código, mas muito obrigado pela ajuda

edsonnota1000:
Consegui finalizar o código seguindo a mesma ordem das piscadas do LED, porém de forma mais simples possível evitando assim muitas linhas de código desnecessárias…estou aprendendo…kkkkkkkk

int led[8] = {1, 2, 3, 4, 5, 6, 7, 8};

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  for (int x = 0; x < 8; x++) {
    pinMode(led, OUTPUT);
  }
}

// the loop routine runs over and over again forever:
void loop() {
  for (int x = 0; x < 8; x++)
    {
    digitalWrite(led, HIGH);
    delay(150);
    digitalWrite(led, LOW);
    delay(150);
    }
  for(int x = 8; x >= 0; x–)
  {
    digitalWrite(led, HIGH);
    delay(150);
    digitalWrite(led, LOW);
    delay(150);
  }
}

O teu vector tem 8 posições…
No teu último ciclo for começas pela posição 9… A linguagem C começa a contar do zero… pequeno pormenor mas que faz toda a diferença.

edsonnota1000: O código estava com alguns erros e de cara logo notei eles, foram fácil de resolver.....logo após isso introduzi mais algumas linhas de comando para terminar de implementar o código, mas muito obrigado pela ajuda

Notou erros e cometeu um pior.

for(int x = 8; x >= 0; x--)

Isso conta 9 pinos mas, aqui só tem 8.

int led[8] = {1, 2, 3, 4, 5, 6, 7, 8};

Acho que falta um pouco de humildade e gratidão.

edsonnota1000: O código estava com alguns erros e de cara logo notei eles, foram fácil de resolver.....logo após isso introduzi mais algumas linhas de comando para terminar de implementar o código, mas muito obrigado pela ajuda

Importas-te de me elucidar quais foram os ERROS (plural)? Eu quero aprender com eles...

FernandoGarcia:

edsonnota1000: O código estava com alguns erros e de cara logo notei eles, foram fácil de resolver.....logo após isso introduzi mais algumas linhas de comando para terminar de implementar o código, mas muito obrigado pela ajuda

Notou erros e cometeu um pior.

for(int x = 8; x >= 0; x--)

Isso conta 9 pinos mas, aqui só tem 8.

int led[8] = {1, 2, 3, 4, 5, 6, 7, 8};

Acho que falta um pouco de humildade e gratidão.

Acredito eu que por ser novato e estar a menos de uma semana com meu Arduíno pequenos deslizes podem ocorrer com qualquer um...acredito eu que quando você colocou a mão pela primeira vez em um arduíno ou escreveu as primeiras linhas de código também não foi lá aquela maravilha né.... Bom falta de humildade da minha parte !!!! Desculpa ai o Senhor "notou erros e cometeu um pior"......acredito que errar é humano e da minha parte pelo menos acredito que estou no caminho certo em ser humilde para dizer que não sei e postar aqui as dúvidas, em relação aos erros que disse ter sido fácil de resolver foi pura e simplesmente pelo fato de que o próprio programa ter me dito o que fazer e por isso segui e ja achei a solução, não desmerecendo em nenhum momento as respostas que o amigo "bubulindo" havia me passado.

Amigo "Bubulindo" Caso tenha fica nervoso ou se sentiu ofendido pelo que escrevi a qualquer momento peço encarecidas desculpas foi só e simplesmente um mal entendido, novamente volto a agradecer a ajuda e espero que tais problemas não voltem mais a ocorrer, só quero saber que aqui posso encontrar ajuda para outros possíveis erros que eu possa cometer assim como todos nós....

Abraços e novamente obrigado pelas respostas

LOL

Claro que podes e deves colocar aqui as tuas dúvidas... mas não custa nada ter um pouco de humildade. Da mesma maneira que não custa nada dizer que te deram uma ajuda no outro fórum para a "correcção" do teu programa.

Eu no meu programa vejo um erro... tu dizes que são erros e na realidade não o corrigiste devidamente, logo gostaria de ver quais são os erros.

Podias ter dito que te deu um erro a compilar ou que o último LED não acendia... mas não disseste nada disso.

fabio_h: LOL http://labdegaragem.com/forum/topics/ajuda-com-redu-o-de-c-digo?%3ATopic%3A346134

Sim na verdade acompanho mais outros fóruns do que o Arduíno.CC e lá tive uma ajuda imensa de um outro amigo, mas que me ajudou a implementar ainda mais o código com novas linhas, não as que estavam prontas que você passou elas foram só explicadas a mim ai pude entender corretamente o que havia escrito Em relação aos erros como disse que acredito eu ter sido feito propositalmente para me instruir foram dois na verdade um com a falta de acendimento do último Led como mencionou e outro com a falta do } fechando a void loop...esta correto ?

Abraços