vendredi 25 mars 2016

Arduino random number generation

For some context, I’m working on what is basically “Simon” for an Arduino project. I’m using an ATMEGA2560 and editing the code with Atmel Studio 6.1. The project uses the random number generator to create the sequence for the button input, which is where I’m running into trouble.

My current method of adding some variance is to use a timer interrupt to seed the random number, by incrementing a number to be processed through an equation. However, the timer simply doesn’t work – and the number doesn’t increment. Am I doing anything wrong with initialization, or is something else at fault?

Snippet here:

#define F_CPU 1000000UL  // 1 MHz, for timer

#include <avr/io.h> // normal stuff
#include <avr/interrupt.h> // timer interrupt
#include <util/delay.h> // easy delay functions
#include <stdlib.h> // random function

// global var that timer uses
volatile uint8_t count;

// function prototypes
int generateSeq(); // generates random number
int getRandomNumber(); // also generates random number (?)



int main(void)
{
  
  // variables
  int sequence[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // actual sequence
  int terms = 0; // terms in sequence
  int gameState = 0;
  int ifWrong = 0; // if sequence is wrong

  
  // timer interrupt (WHAT AM I DOING WRONG)
  TCCR0A |= (1<<CS02)|(1<<CS00);
  TIMSK0 |= (1<<TOIE0);
  TCNT0 = 0;
  count = 1;
  sei();

  while(1)
  {
        // actual "game" part
    while(gameState == 1)
    {

      // generate term in sequence
      // 1 = up, 2 = right, 3 = down, 4 = left
          
      if(ifWrong == 0)
      {
        sequence[terms] = generateSeq(); // call sequence function
        terms++;
      }
    }
  }
}

// random seed for sequence generator (something wrong here?)
ISR(TIMER0_OVF_vect)
{
  count++;
  
  if(count >= 255)
  {
    count = 1;
  }
}

int generateSeq() // function to generate sequence
{
  // equation is currently a placeholder
  int r2 = (int)rand() * (int)count;
  int num = r2 * count;
  return (num % 4) + 1;
}

If you need the full source code, I can offer that as well. Thanks in advance!




Aucun commentaire:

Enregistrer un commentaire