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.
Tags:
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]);
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por