Arduino - Aula 8 - Números Aleatórios



Imagem 



Número aleatório é um valor escolhido pelo Arduino ao acaso, ou seja sem que esse pertença a uma sequência especifica.

Em outras palavras, é como jogar um dado. Não sabemos que número vai ser mostrado.

Para criar números aleatórios o arduino se utiliza de duas funções:

  • randomSeed()
  • random()
A função randomSeed() inicializa o gerador de números aleatórios, fazendo com que ela comece em um ponto arbitrário na sua sequência aleatória. Esta sequência, apesar de muito longa, e aleatória, é sempre a mesma.

Se é importante que a sequência de valores gerados por random() seja diferente entre as execuções de um sketch, então utilize uma entrada analógica desconectada como parâmetro de randomSeed(). Isso fará com que a lista seja sempre iniciada em pontos distintos.

Por outro lado, se é necessário fazer com que a sequência aleatória inicie sempre no mesmo ponto, então utilize como parâmetro de randomSeed() um número fixo.


Exemplo:

void setup(){ 
   randomSeed(analogRead(0)); // inicia a sequência em um ponto variável 
}

 
void setup(){ 
   randomSeed(5); // inicia a sequência em um ponto fixo 
}


Já a função random() gera um valor aleatório. Esse valor pode ser limitado por dois parâmetros.

Exemplo:

x = random(min, max)

Os números possíveis vão de min até max, porém não inclui max.

Exemplo:

x = random(1, 5)

Os possíveis números são: 1, 2, 3, e 4

Outra opção é utilizar somente o parâmetro max.

x = random(100)

Os possíveis números serão de 0 a 99.



Exemplo 1
Esse exemplo sortei um número e informa o usuário pela serial


long randNumber;

void setup(){
  Serial.begin(9600);  // inicia a comunicação serial
  randomSeed(analogRead(0)); // inicia a lista de valores aleatórios
}

void loop(){
  randNumber = random(300); // sorteia um número de 0 a 299 
  Serial.println(randNumber);  // envia o valor de randNumber pela serial
  delay(50); // espera 50 ms
}
 
 
Imagem
 
 
 Exemplo 2 
 
Esse exemplo acende um LED de forma aleatória entre os 6 LEDs conectados ao Arduino.

Veja o vídeo:



 
int tempo=50;
int numero;

void setup() {                        // inicializa os pinos digitais como saída
  pinMode(5, OUTPUT);     
  pinMode(6, OUTPUT);     
  pinMode(7, OUTPUT);     
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);     
  pinMode(10, OUTPUT);
  randomSeed(analogRead(0)); // inicializa a lista de valores aleatórios
  }

void loop() {
  int numero = random(5,11);    // sorteia um número de 5 a 10
  digitalWrite(numero, HIGH);   // acende o LED no endereço do pino sorteado
  delay(tempo);               // espera
  digitalWrite(numero, LOW);    // apaga o mesmo LED
}
 
  
 
Imagem

 
 Exemplo 3 
 
Esse exemplo faz do arduino um dado eletrônico. 
 
int tempo=50;int numero;

void setup() {                        // inicializa os pinos digitais como saída
  pinMode(5, OUTPUT);     
  pinMode(6, OUTPUT);     
  pinMode(7, OUTPUT);     
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);     
  pinMode(10, OUTPUT); 
  randomSeed(analogRead(0)); // inicializa a lista de valores aleatórios  }

void loop() {
  int numero = random(1,7);    // sorteia um número de 1 a 6 
 
if ( numero == 1){    // se o numero é 1, acende 1 LED
    digitalWrite(5, HIGH);   // acende 1 LED
}

if ( numero == 2){    // se o numero é 2, acende 2 LEDs
     digitalWrite(5, HIGH);   // acende 2 LEDs
     digitalWrite(6, HIGH);   
}  

 if ( numero == 3){    
     digitalWrite(5, HIGH);     // acende 3 LEDs
     digitalWrite(6, HIGH);   
     digitalWrite(7, HIGH);     
 }  

 if ( numero == 4){    
     digitalWrite(5, HIGH);     // acende 4 LEDs
     digitalWrite(6, HIGH);   
     digitalWrite(7, HIGH);           
     digitalWrite(8, HIGH);      
}

 if ( numero == 5){    
     digitalWrite(5, HIGH);     // acende 5 LEDs
     digitalWrite(6, HIGH);   
     digitalWrite(7, HIGH);           
    digitalWrite(8, HIGH);           
    digitalWrite(9, HIGH);  
}

 if ( numero == 6){    
     digitalWrite(5, HIGH);     // acende 6 LEDs
     digitalWrite(6, HIGH);   
     digitalWrite(7, HIGH);           
     digitalWrite(8, HIGH);           
     digitalWrite(9, HIGH); 
     digitalWrite(10, HIGH); 
}


}
 


Imagem


Exercícios


1) Crie um sketch que envie pela serial, a cada 1500 ms, um número aleatório de 1 a 10. Sempre que esse número for impar, acende um Led. Sempre que o número for par, apaga o Led.


2) Faça um jogo em que o usuário tem que aperta um botão assim que um Led acender e que envia pela serial o tempo que o usuário demorou para acender o Led. O Led acendera após um tempo aleatório de até 10 segundos.


3) Faça um dado eletrônico com o mesmo formato de Leds dos círculos de um dado normal. Serão necessários 7 Leds. Um botão deverá fazer um novo sorteio dos números.


4) Faça um sketch que sortei um número de 0 a 3, transforme esse valor em binário e acenda os Leds correspondentes. Serão necessários 4 Leds.