Klein Bot

Kleins, robots, electricity

Blog

Larson (Cylon) Scanner version 2

Posted by Klein on March 3, 2013 at 10:05 PM

I've updated the code to be more configurable (to any arbitrary animation) and handle variable brightness better. There's still something wrong with the "timeBetween" control of scanner speed, but it works ok now.


const int NUMFRAMES = 22;

const int NUMPINS = 12;

 

unsigned long timeBetween = 80; // milliseconds between frames

unsigned long microsStart = 0;

unsigned long timeSinceStart = 0;

int activePin = 0;

int activeFrame = 0;

 

int frameVals[NUMFRAMES][NUMPINS] =

  {

    {  0,  0,100,200,500,999,  0,  0,  0,  0,  0,  0 },

    {  0,  0,  0,100,200,500,999,  0,  0,  0,  0,  0 },

    {  0,  0,  0,  0,100,200,500,999,  0,  0,  0,  0 },

    {  0,  0,  0,  0,  0,100,200,500,999,  0,  0,  0 },

    {  0,  0,  0,  0,  0,  0,100,200,500,999,  0,  0 },

    {  0,  0,  0,  0,  0,  0,  0,100,200,500,999,  0 },

    {  0,  0,  0,  0,  0,  0,  0,  0,100,200,500,999 },

    {  0,  0,  0,  0,  0,  0,  0,  0,  0,100,999,500 },

    {  0,  0,  0,  0,  0,  0,  0,  0,  0,999,500,200 },

    {  0,  0,  0,  0,  0,  0,  0,  0,999,500,200,100 },

    {  0,  0,  0,  0,  0,  0,  0,999,500,200,100,  0 },

    {  0,  0,  0,  0,  0,  0,999,500,200,100,  0,  0 },

    {  0,  0,  0,  0,  0,999,500,200,100,  0,  0,  0 },

    {  0,  0,  0,  0,999,500,200,100,  0,  0,  0,  0 },

    {  0,  0,  0,999,500,200,100,  0,  0,  0,  0,  0 },

    {  0,  0,999,500,200,100,  0,  0,  0,  0,  0,  0 },

    {  0,999,500,200,100,  0,  0,  0,  0,  0,  0,  0 },

    {999,500,200,100,  0,  0,  0,  0,  0,  0,  0,  0 },

    {500,999,100,  0,  0,  0,  0,  0,  0,  0,  0,  0 },

    {200,500,999,  0,  0,  0,  0,  0,  0,  0,  0,  0 },

    {100,200,500,999,  0,  0,  0,  0,  0,  0,  0,  0 },

    {  0,100,200,500,999,  0,  0,  0,  0,  0,  0,  0 }

  };

 

void setup() {

  // put your setup code here, to run once:

  for (int i=0; i<NUMPINS; i++) {

    pinMode(i, OUTPUT);

  }

  //Serial.begin(9600);

}

 

void loop() {

  // each loop

  for (int i=0; i<NUMPINS; i++) { digitalWrite(i, LOW); }

  activeFrame = int((millis()/timeBetween)) % NUMFRAMES;

 

  // spend 1000 microseconds turning pin i on/off

  microsStart = micros();

  timeSinceStart = 0;

  while ( timeSinceStart < 1000 ) {

    for (int i=0; i<NUMPINS; i++) {

      if ( frameVals[activeFrame][i] > timeSinceStart ) {

        digitalWrite(i,HIGH);

      } else { digitalWrite(i,LOW); }

    }

    timeSinceStart = micros()-microsStart;

  }

 

}

 

 


Categories: FIRST Robotics

Post a Comment

Oops!

Oops, you forgot something.

Oops!

The words you entered did not match the given text. Please try again.

Already a member? Sign In

0 Comments