Go Down

Topic: Arduino Due libraries (official and 3rd party) (Read 94 times) previous topic - next topic


Where do you feed the battery backup power into the DUE to keep the RTC awake while it's powered down?
Brian from Tacoma, WA
Arduino evangelist - since Dec, 2010.

Tom Carpenter

You can't. They've not only wired the backup power pins to the +3.3V and GND, but also they have not populated the 32kHz crystal so you couldn't use the RTC even with normal power.


heh, at least, not without lifting the pins off the board and running some crazy jumper wires.. :)
Brian from Tacoma, WA
Arduino evangelist - since Dec, 2010.


Hi folks,

I have published my LinkedList Class on GitHub. It's REALLY usefull for all kinds of libraries and projects.

Features that are implemented:

  • LinkedList<T>::LinkedList() - Constructor.

  • LinkedList<T>::~LinkedList() - Destructor. Clear Nodes to minimize memory.

  • int LinkedList<T>::size() - Returns the current size of the list.

  • bool LinkedList<T>::add(T) - Add element T at the END of the list.

  • bool LinkedList<T>::add(int index, T) - Add element T at index of the list.

  • bool LinkedList<T>::unshift(T) - Add element T at the BEGINNING of the list.

  • bool LinkedList<T>::set(int index, T) - Set the element at index to T.

  • T LinkedList<T>::remove(int index) - Remove element at index. Return the removed element.

  • T LinkedList<T>::pop() - Remove the LAST element. Return the removed element.

  • T LinkedList<T>::shift() - Remove the FIRST element. Return the removed element.

  • T LinkedList<T>::get(int index) - Return the element at index.

  • void LinkedList<T>::clear() - Removes all elements.

For more information, and Latest releases go to https://github.com/ivanseidel/LinkedList

Fell free to commit new changes and use it.



Jul 21, 2013, 03:08 am Last Edit: Jul 21, 2013, 02:12 pm by ivanseidel Reason: 1
Hi folks,

After a lot of work, I could manage to make a Gaussian "simple" enough to use and implement almos everything.

In this Library summing Gaussians is really easy, like this:

Code: [Select]
Gaussian g1 = Gaussian(10, 30.4);

Gaussian result = g1 + Gaussian(30, 40);

There is also a Moving Average class, called "GaussianAverage". It works great with Gaussians and also simple values.

Code: [Select]
GaussianAverage myAverage(10); // 10 samples to keep track of

myAverage += Gaussian(32, 2.45);
myAverage += 10; // Automaticaly adds a Gaussian with Maximum variance

Gaussian average = myAverage.process();

For more information and a very detailed documentation, go to https://github.com/ivanseidel/Gaussian

Fell free to commit new changes and use it.



Ivan, when I use your library and #include your CPP file in my Sketch (.ino), at link time I'm getting multiple definitions of the timer objects.  I have #include DueTimer.cpp at the beginning.  The DueTimer.h is of course included in the CPP file.  How can I ask the preprocessor to only include it once?


Ivan, when I use your library and #include your CPP file in my Sketch (.ino), at link time I'm getting multiple definitions of the timer objects.  I have #include DueTimer.cpp at the beginning.  The DueTimer.h is of course included in the CPP file.  How can I ask the preprocessor to only include it once?

Never include de .cpp file, always include the .h =]
#include <DueTimer.h>


Arduino Due TLC5940 Library

  Information and Download: https://code.google.com/p/arduino-due-tlc5940/

The Arduino Due uses an ARM Cortex M3 processor made by Atmel (SAM3X8E). This microcontroller is fairly different from the normal AVR microcontrollers used for most Arduinos. Alex Leone made an Arduino library for handling Texas Instrument's TLC5940 16 Channel LED PWM driver with the AVR microcontrollers (https://code.google.com/p/tlc5940arduino/).

However, running the TLC5940 well requires delving into lower-level parts of the hardware -- things like timer counters and interrupts -- and these are different on the Due/SAM3X8E. I've started a TLC5940 library that makes use of the features offered by the SAM3X8E. At least for now, this library doesn't offer all the fancy features that Alex Leone's library (e.g. animations, fades, PROGMEM storage, etc.) because I didn't need those features. I have my own libraries for describing and running lightshows.

Hopefully some will find this useful.  ;)

- Madeline


Hi all,

I 've been working on my senior project - a balancing robot - using a Mega 2560.  A recent accident damaged the board and I was thinking of replacing it with a Due to see if the faster clock speed helped.  Can someone check to see if the following libraries/examples work or at least compile?

These 2 I'm using now:

This one will be my next purchase, I think:

It would be greatly appreciated,


Paul Stoffregen

Aug 06, 2013, 10:27 am Last Edit: Aug 06, 2013, 10:30 am by Paul Stoffregen Reason: 1

Can someone check to see if the following libraries/examples work or at least compile?

It's pretty easy to just download Arduino 1.5.2, add the library, select Due from Tools > Boards, and click Verify.  No hardware purchase necessary!  (at least to know if it merely compiles)

Just for fun, I tried one of the libraries just now.  ADXL455_Example.pde definitely does not compile.  The first error I hit was it depends on WProgram.h, which Arduino hasn't supported since 0023.  I edited that to Arduino.h, but then it depends on pre-1.0 stuff from the Wire library.  I didn't go any farther.  This probably won't work on ANY Arduino board using any version of Arduino newer than 0023.


I have posted a patch for the Adafruit TFTLCD library to allow the Due to use LCD displays based on the ILI9825/9828 controllers with a 8 bit parallel interface here:


EasyTransfer compiles with this mod to EasyTransfer.h. Just wrap the avr include with an ifndef/endif:

Code: [Select]
#ifndef __SAM3X8E__
#include <avr/io.h>

PS: Pity it doesn't do retransmits...


Hi Everyone, I am very new to this, have had some success with a few Uno projects and now want to try working with a Due. However there are some libraries that I would like to use that are available for the Uno but not for Due. So the question comes... is there are general guidelines for converting libraries that work with Uno so they will work with Due? For example, Sensirion and BMP085.


Hey i am also new here,

may be some one are interested in a due working sketch for the BMP085

Code: [Select]
* Sketch:  BMP085_Text.ino
* Author:  A. Kriwanek: http://www.kriwanek.de/arduino/wetterstation.html
* Version: 1.00  01.09.2012/17:15
* This sketch tests a BMP085 barometric sensor. Temperature and pressure are read from the sensor
* The mathematical computation is  done and the results will be displayed every second on the
* serial monitor.
* Used Hardware:
* - Sparkfun Breakout board BMP085
* - Arduino UNO Protoboard
* - Arduino UNO
* My sketch is free software: Arduino BMP085_Text.ino von Andreas Kriwanek steht unter
* einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.
* My Sketch in wide parts is based on the sketch from Jim Lindblom:
* BMP085 Extended Example Code
* by: Jim Lindblom
* SparkFun Electronics
* date: 1/18/11
* license: CC BY-SA v3.0 - http://creativecommons.org/licenses/by-sa/3.0/
* Update (7/19/11): I've heard folks may be encountering issues
* with this code, who're running an Arduino at 8MHz. If you're
* using an Arduino Pro 3.3V/8MHz, or the like, you may need to
* increase some of the delays in the bmp085ReadUP and
* bmp085ReadUT functions.
* https://www.sparkfun.com/products/9694 Product page
* http://de.wikipedia.org/wiki/Luftdruck Correction formula to sea level
* http://www.meteo24.de/wetter/49X8157.html Weather Bad Aibling

#include <Wire.h>

#define BMP085_ADDRESS 0x77        // I2C address of BMP085

const unsigned char OSS = 0;       // Oversampling Setting

// Calibration values of BMP085:
short ac1;
short ac2;
short ac3;
unsigned short ac4;
unsigned short ac5;
unsigned short ac6;
short b1;
short b2;
short mb;
short mc;
short md;

// b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...)
// so ...Temperature(...) must be called before ...Pressure(...).
long b5;

float temperature;
float pressure;
float pressureNN;
float pressureCorrection = 0.98731518;  // Höhe 103 ü.NN Halle. Please calculate your coeffizient
                                       // for your homes elevation!

void setup()

void loop()
 temperature = bmp085GetTemperature(bmp085ReadUT())/10;
 pressure = bmp085GetPressure(bmp085ReadUP())/100;
 pressureNN = pressure / pressureCorrection;
 Serial.print("Temperature: ");
 Serial.print(" C, Pressure: ");
 Serial.print(" hPa in 103m height above sea level, Pressure-NN: ");
 Serial.println(" hPa");

// Stores all of the bmp085's calibration values into global variables
// Calibration values are required to calculate temp and pressure
// This function should be called at the beginning of the program
void bmp085Calibration()
 ac1 = bmp085ReadInt(0xAA);
 ac2 = bmp085ReadInt(0xAC);
 ac3 = bmp085ReadInt(0xAE);
 ac4 = bmp085ReadInt(0xB0);
 ac5 = bmp085ReadInt(0xB2);
 ac6 = bmp085ReadInt(0xB4);
 b1 = bmp085ReadInt(0xB6);
 b2 = bmp085ReadInt(0xB8);
 mb = bmp085ReadInt(0xBA);
 mc = bmp085ReadInt(0xBC);
 md = bmp085ReadInt(0xBE);

// Calculate temperature given ut.
// Value returned will be in units of 0.1 deg C
short bmp085GetTemperature(unsigned short ut)
 long x1, x2;
 x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
 x2 = ((long)mc << 11)/(x1 + md);
 b5 = x1 + x2;

 return ((b5 + 8)>>4);  

// Calculate pressure given up
// calibration values must be known
// b5 is also required so bmp085GetTemperature(...) must be called first.
// Value returned will be pressure in units of Pa.
long bmp085GetPressure(unsigned long up)
 long x1, x2, x3, b3, b6, p;
 unsigned long b4, b7;
 b6 = b5 - 4000;
 // Calculate B3
 x1 = (b2 * (b6 * b6)>>12)>>11;
 x2 = (ac2 * b6)>>11;
 x3 = x1 + x2;
 b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
 // Calculate B4
 x1 = (ac3 * b6)>>13;
 x2 = (b1 * ((b6 * b6)>>12))>>16;
 x3 = ((x1 + x2) + 2)>>2;
 b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
 b7 = ((unsigned long)(up - b3) * (50000>>OSS));
 if (b7 < 0x80000000)
   p = (b7<<1)/b4;
   p = (b7/b4)<<1;
 x1 = (p>>8) * (p>>8);
 x1 = (x1 * 3038)>>16;
 x2 = (-7357 * p)>>16;
 p += (x1 + x2 + 3791)>>4;
 return p;

// Read 1 byte from the BMP085 at 'address'
char bmp085Read(unsigned char address)
 unsigned char data;
 Wire.requestFrom(BMP085_ADDRESS, 1);
 return Wire.read();

// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
short bmp085ReadInt(unsigned char address)
 unsigned char msb, lsb;
 Wire.requestFrom(BMP085_ADDRESS, 2);
 msb = Wire.read();
 lsb = Wire.read();
 return (short) msb<<8 | lsb;

// Read the uncompensated temperature value
unsigned short bmp085ReadUT()
 unsigned short ut;
 // Write 0x2E into Register 0xF4
 // This requests a temperature reading
 // Wait at least 4.5ms
 // Read two bytes from registers 0xF6 and 0xF7
 ut = bmp085ReadInt(0xF6);
 return ut;

// Read the uncompensated pressure value
unsigned long bmp085ReadUP()
 unsigned char msb, lsb, xlsb;
 unsigned long up = 0;
 // Write 0x34+(OSS<<6) into register 0xF4
 // Request a pressure reading w/ oversampling setting
 Wire.write(0x34 + (OSS<<6));
 // Wait for conversion, delay time dependent on OSS
 delay(2 + (3<<OSS));
 // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
 Wire.requestFrom(BMP085_ADDRESS, 3);
 // Wait for data to become available
 while(Wire.available() < 3)
 msb = Wire.read();
 lsb = Wire.read();
 xlsb = Wire.read();
 up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
 return up;


fatal error: util/delay.h: No such file or directory

I think some library works on UNO may not work in DUE. Any header file collection link for SAM3X8E?


Go Up