Acionamento de saidas a partir da frequencia

Gostaria de saber se tem alguma forma de Ligar e Desligar saídas sequencialmente utilizando uma frequência para determinar a velocidade. Já consegui uma forma de fazer mas o script ficou muito grande. E o professor pediu pra tentar minimizar. Alguém ai tem alguma ideia?

Se mostrar o seu código talvez fique mais fácil de entender o que você quer.

void setup (){
pinMode (0,OUTPUT);
pinMode (1,OUTPUT);
pinMode (2,OUTPUT);
pinMode (3,OUTPUT);
pinMode (4,OUTPUT);
pinMode (5,OUTPUT);
pinMode (6,OUTPUT);
pinMode (7,OUTPUT);
pinMode (8,OUTPUT);
pinMode (9,OUTPUT);
}

void loop(){
int tempo = analogRead(0);
delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);

delay(tempo);

digitalWrite(0,HIGH);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}

Preciso compactar ele

Por favor use tags para inserir código aqui no fórum.

Que tal começar por isto?

void setup ()
{
  for(byte i = 0; i < 10; i++)
 {
   pinMode (i, OUTPUT);
  }
}

Então o problema e que eu preciso controlar o intervalo entre o acionamento das saídas e eu preciso que elas liguem em ordem crescente e logo após desliguem em ordem decrescente com a velocidade controlada por um potenciometro

Isso e facil... mas nao se faz com delays...

Primeiro tens de aprender o que sao loops e reduzir o codigo que tens a um loop que incrementa e outro que decrementa.

Depois tens de usar o analogRead() para o utilizador escolher a temporizacao com um potenciometro.

Em vez de delay deves usar o millis(). Procura o exemplo Blink Without Delay que mostra como o usar.

Como assim? Criar 2loops ou 2 for dentro de um loop?

Desculpe a ignorância estou começando agora na programação

 digitalWrite(0,HIGH);
 digitalWrite(1,HIGH);
 digitalWrite(2,HIGH);
 digitalWrite(3,LOW);
 digitalWrite(4,LOW);
 digitalWrite(5,LOW);
 digitalWrite(6,LOW);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(9,LOW);

Para esta parte você pode fazer isso por exemplo:

  for(byte i = 0; i < 10; i++)
  {
    if(i < 3)
    {
      digitalWrite(i,HIGH);
    } 
    else
    {
      digitalWrite(i,LOW); 
    }
  }

Esta parte:

 int tempo = analogRead(0);

delay(tempo);

também me levanta algumas dúvidas. Sendo que o analogRead() devolve valores entre 0 e 1023, este valor devia ter "algum tratamento" antes de ser aplicado ao delay(), para fazer as coisas variarem entre 0.1 e 1 segundo, por exemplo.

Pelo que estudei caso eu não coloque nenhum valor ele utiliza uma variação de 0-5v no meu potenciômetro e converte isso de 0.1-1s. Por favor me corrijam caso eu esteja errado

bubulindo:
Isso e facil... mas nao se faz com delays...

Primeiro tens de aprender o que sao loops e reduzir o codigo que tens a um loop que incrementa e outro que decrementa.

Depois tens de usar o analogRead() para o utilizador escolher a temporizacao com um potenciometro.

Em vez de delay deves usar o millis(). Procura o exemplo Blink Without Delay que mostra como o usar.

Amigo tentei utilizar seus conselhos mas não consegui. o código que escrevi está funcionando do jeito que eu preciso o problema é que segundo o professor esta muito grande e ele pediu que eu reduzisse ele. Ai entra o problema eu não faço a menor ideia de como fazer isso

Amigo o que o teu professor te disse está correto.A forma como escreveste o código mais parece um "fix" rápido para o que pretendias fazer, no entanto está longe de ser um código "bonito" e que seja o mais otimizado para o micro.
A solução já te foi dada aqui pelos membros.
Em traços gerais para conseguires o que queres tens de obter o sumo de cada ajuda.
Tenta ler de novo as respostas e recomeça o teu codigo
Bons estudos

Cristiano_Andrade:
Amigo tentei utilizar seus conselhos mas não consegui. o código que escrevi está funcionando do jeito que eu preciso o problema é que segundo o professor esta muito grande e ele pediu que eu reduzisse ele. Ai entra o problema eu não faço a menor ideia de como fazer isso

O professor podia ser um pouco mais... expedito, e apontar o problema.
O teu código repete-se vezes sem conta. A linguagem C tem propriedades criadas de propósito para evitar que código seja repetido da forma que fizeste.

Uma delas são ciclos (while e for) e a outra são funções... Sabes o que são ambas?

Permite-me discordar e dizer-te que o teu código não funciona... parece funcionar mas se, por exemplo, tentares parar a sequência a meio, não vais conseguir.

O teu código original 263 linhas.

Assim de repente e sem testar uma versão equivalente ao que tu tens ocupa-me 27 linhas. (e sim... eu deixei espaços)

Por isso qualquer coisa abaixo de 75 linhas deve ser possível para ti, não achas?

Hã?

Se você estiver pagando por este curso, te aconselho a procurar outro.

Se um professor não sabe simplificar um código deste ele está no lugar errado.

A segunda opção é: você está querendo que alguém faça o seu trabalho.

Não eu estou tentando aprender.O curso e gratuito em uma instituição federal e o professor não e de programação e sim de eletrônica analógica e esta fazendo isso para ajudar. pois meu curso tem ensase em telecom e não tem programação em C++

Mesmo assim, penso que isso não é desculpa. A solução é tão fácil que por muito pouca prática que alguém tenha neste assunto estudando um pouco chega-se rapidamente a uma alternativa melhor que a que é apresentada.

A função que poderia fazer isso é a for o problema é que não sei como montar a for no Arduino para fazer ele acionar as saídas digitais fazendo com que elas façam um contador crescente e outro decrescente. Sendo que preciso controlar o intervalo entre um acionamento e outro com um potenciometro

for(byte i = 0; i < 10; i++)
{
}

for(byte i = 9; i >= 0; i--)
{
}

Não é obrigatório usar o for, pois a função loop() já é um "for" por si só. Há uns meses, um utilizador tinha uma dúvida parecida, que está discutida aqui. Veja se o que mostra o vídeo serve, e se compreende o código que é colocado.