Helpful Arduino Functions

 

Here’s some helpful functions for Arduino that I use:

Blinking an LED

// this function blinks the an LED light as many times as requested,
// at the requested blinking rate

void blinkLED(byte targetPin, int numBlinks, int blinkRate) {
  for (int i=0; i < numBlinks; i++) {
    digitalWrite(targetPin, HIGH);   // sets the LED on
    delay(blinkRate);                     // waits for blinkRate milliseconds
    digitalWrite(targetPin, LOW);    // sets the LED off
    delay(blinkRate);
  }
}

Blinking a Number (great for visually indicating version # strings)

// blinks a sequence to indicate a number visually
void blinkNumber(char* numString) {
    int versLength = strlen(numString);
  delay(200);
    for (int i =0 ; i < versLength; i++) {
      int number = numString[i] -48;
      if (number == 0){
        blinkLED(LED_A,1,20);
        delay(160);
      }
      if (number > 0 && number < 10) blinkLED(LED_A,number,200);
      delay(400);
    }
}

Buzzing a Buzzer (see my post about this)

void buzz(int targetPin, long frequency, long length) {
  long delayValue = 1000000/frequency/2;
  // calculate the delay value between transitions
  //// 1 second's worth of microseconds, divided by the frequency,
  //// then split in half since there are two phases to each cycle

  long numCycles = frequency * length/ 1000;
  // calculate the number of cycles for proper timing
  //// multiply frequency, which is really cycles per second, by the
  //// number of seconds to get the total number of cycles to produce
 for (long i=0; i < numCycles; i++){ // for the calculated length of time...
    digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphram
    delayMicroseconds(delayValue); // wait for the calculated delay value
    digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphram
    delayMicroseconds(delayValue); // wait again for the calculated delay value
  }
}

Checking Free RAM (see my post about this)

// this function will return the number of bytes currently free in RAM
int memoryTest() {
  int byteCounter = 0; // initialize a counter
  byte *byteArray; // create a pointer to a byte array
  // More on pointers here: http://en.wikipedia.org/wiki/Pointer#C_pointers

  // use the malloc function to repeatedly attempt
  // allocating a certain number of bytes to memory
  // More on malloc here: http://en.wikipedia.org/wiki/Malloc
  while ( (byteArray = (byte*) malloc (byteCounter * sizeof(byte))) != NULL ) {
    byteCounter++; // if allocation was successful, then up the count for the next try
    free(byteArray); // free memory after allocating it
  }

  free(byteArray); // also free memory after the function finishes
  return byteCounter; // send back the highest number of bytes successfully allocated
}

Mapping Bigger Numbers (avoids errors when mapping large positive numbers)

// version of the map function capable of handling larger positive numbers
// (but fails with negative ones)
long mapBig(unsigned long x, unsigned long in_min, unsigned long in_max, unsigned long out_min, unsigned long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

1 thought on “Helpful Arduino Functions”

  1. Pingback: Helpful code snippets for Arduino | Embedded projects from around the web

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to Top