ola a todos.

gostaria de saber como gerar numeros aleatórios no arduino mas sem repetição.

exemplo:

ligar 10 leds com um numero de 0 a 9 onde ele gere os 10 numeros de forma aleatoria e sem repetição até ligar todos os leds e logo após para de gerar os numeros ja que ligou todos os leds.

li um pouco sobre random mas não sei como fazer da maneira que eu quero.

Exibições: 1757

Responder esta

Respostas a este tópico

Napster, boa noite!

Para gerar números aleatórios sem repetição, você vai precisar usar um array ou String, pois será necessário memorizar os números que já foram gerados.

Existem vários algoritmos. O mais simples é:

1) Gerar um array com números sequenciais (ordenados)

2) Embaralhar esse array.

Veja um exemplo. Favor testar, pois estou sem Arduino aqui.

Coloquei tudo na função setup e a Serial para exibição dos resultados:

void setup(){
  Serial.begin(9600);

  randomSeed(analogRead(0)); //Geração da semente

  int array[10]; //Pode mudar o tamanho se quiser

  //Criação do array com números sequenciais
  for (int i = 0; i < 10; i++) {     
    array[i] = i;
    Serial.println(array[i]);
  }

  //Embaralhando o array
  for (int i = 0; i < 10; i++) {    
    int temp = array[i];
    int novoIndice = random(10);//Escolhe aleatoriamente um índice
    array[i] = array[novoIndice]; //Troca os valores
    array[novoIndice] = temp;
  }

  //Array gerado aleatoriamente
  for (int i = 0; i < 10; i++) {    
    Serial.println(array[i]);
  }

}

exatamente o que eu queria. Muito obrigado funcionou direitinho. Só coloquei um loop para compara os numeros que sai e ta funcionando bem.

 int array[10];
void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(0)); //Geração da semente
  //Pode mudar o tamanho se quiser
  //Criação do array com números sequenciais
  for (int i = 0; i < 10; i++) {     
    array[i] = i;
    //Serial.println(array[i]);
    }
    }
void loop() {
  delay(5000);
 Serial.println("");  
  //Embaralhando o array
  for (int i = 0; i < 10; i++) {    
    int temp = array[i];
    int novoIndice = random(10);//Escolhe aleatoriamente um índice
    array[i] = array[novoIndice]; //Troca os valores
    array[novoIndice] = temp;
  }
  //Array gerado aleatoriamente
  for (int i = 0; i < 10; i++) {    
    Serial.print(" ");
    Serial.print(array[i]);
  }
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço