Fibonacci de Arduino

MAN! It's been a while. Well, not without good cause. Since my last post, I have started developing software for the Cocoa Touch platform, better known as iPad & iPhone platform! Since most of it is copyrighted I haven't been able to post any goodies pertaining to this, but I'll see what I can do.

Anyways, as the title somewhat indicates, I have recently acquired my very own Arduino board, and was glad I did! (Thanks Ma!) My background in C like languages has made the learning fast and efficient, as the syntax isn't too much different at all from traditional C. I had been reading about the Arduino boards for quite some time but skipped over the part where the heart of the board is an ATMEGA328/168!

So, as a first exercise, I decided to do something simple to get acclamated w/ the hardware and software. What better way than the Fibonacci sequence?

Well, not totally. Since the ATMega328 is a 32-bit device, the largest fibbonacci number it can calculate is 2971215073, before the 2^32-1 limitation kicks in. Never the less, it took all of about two hours to get everything up and running, and developing a quick and dirty alogrithm for this.

/*First Arduino*/
/*This project will print out the first 47 fibbonacci numbers*/
/*Copyright 2010 Mikestechspot.blogspot.com©*/

unsigned long nextFibbonacci(unsigned long);

unsigned long longFirstFib = 0;
unsigned long longSecFib = 1;
unsigned long longThirdFib = 1;

void setup(){
Serial.println("Starting Fibbonacci Sequence:");

void loop(){

longThirdFib = longFirstFib + longSecFib;

Serial.println(longThirdFib, DEC);

if(longThirdFib == 2971215073){ //Sequence is done for an unsigned long data type limitation
Serial.println("Fibbonacci sequence limited to 2971215073, becuase of 32-bit unsigned long");
Serial.println("Fibbnacci sequence complete");

longFirstFib = longSecFib;
longSecFib = longThirdFib;


/*End of Code*/

I didn't comment the code this time, but if you take it line by line you should be fine. Any questions, feel free to comment, or visit the Arduino Language refernce pages and Arduino forums as well.


Salute the Eagle

Ahh, just finished the 3 Eagle tutorials, and all it took was a trip to Starbucks, about 3-4 hours, and Kid Cudi in the headphones. They are easily worth paying for! So, to pay hommage, I will list them here, in case you havent found them already.

  1. Eagle Basics: Schematics

  2. Eagle Basics: PCB Layout

  3. Eagle Basics: Creating a Part

Take these with a grain of salt. There will be small stuff they don't cover, so feel free to get your hands dirty! Also, if your a fan of command line commands, Eagle has a text box at the top where you can enter text commands for things like changing colors of layers, refreshing windows, etc. (I don't know all the possibilities) and I found these useful from time to time. Now, before I go to church this morning, I will meditate on my next project. Deuces.


Eagle also comes with a 71 page pdf tutorial also. I will be checking this out for myself in the future.


New Shipment

My shipment from Sparkfun came last night. Priority shipping was worth the extra $3, only 2 days to ship! It may not look like much, but this holds a great deal of power.

As you can see, this is worth celebrating! First things first though. Before I delve in, I'm going to finally learn this thing called Eagle. Most circuit/schematic programs seem to operate off of the SPICE Engine, but from what I'm told, Eagle is somewhat of a standard, and who doesn't love a good standard? So, It's off to the #2 Google result for 'Eagle Tutorial'. At least it's number 2 today. I'll be in touch.


Getting The Dev Machine Up And Running

Any 'good' developer needs a machine to develop on. I got this old Compaq Evo that has a gig of RAM and I haven't used since I got a MacBook from work. Thing is, MacBooks do not come w/ serial ports. lol At least this one didn't. Not a total downfall considering it's a great machine, but neways:

Right now I'm working w/ the Atmel ATMega168, and am a newbie to this hardware, but I know C and plenty of object oriented languages, so the learning curve isn't too steep. Before I worked with the BASIC Stamp, and, although a great microcontroller, I wanted something a litte bit lower level, to get my hands dirty with :-)

Since some(maybe all) Atmel processors have support for embedded linux, and that's my longterm goal is an embedded linux box from scratch, I see it best to develop for the AVR on a linux distro. Enough intro, time for work!

The specs of the Evo are below:
  1. Factory Compaq Evo N610c, with the exception of a replaced hard drive that went bad, and 1 gig of RAM instead of 256.
  2. Ubuntu 9.04, patched and fully up to date
  3. Java 6
  4. Eclipse IDE
  5. AVR Plugin for Eclipse
  6. I also installed VNC for remoting into the machine and developing from anywhere
  7. SSH, a must have for any linux distro.

There wasn't much up-to-date info for getting starting with developing for AVR on linux, so call this my giving back.

  • The Ubuntu install was standard, nothing fancy was done on this part.

  • (After an hour) Okay, time for apps!

Time for updates, safety first!

After that, lucky me that java, ssh, and vnc can be installed from the shell. The packages are




While writing this, I discovered that there is a version of Eclipse in the repository also. Not sure if it's the latest, but since I already have it installed then it won't matter, try it for yourself! Next, I downloaded Eclipse for Linux as a tarball, and unpacked it into /usr with the rest of the apps, and created a shortcut on my dock for it. Avr-gcc is what's needed next, and this can be downloaded from with apt-get also, package name gcc-avr. You'll also want these two as well, avr-libc, and binutils-avr. I also installed the packages that were recommended by the package manager. Next, the AVR Plugin for Eclipse. Documentation can be found in that link and this one. That also installed w/out a hitch.

If you open Eclipse and start a new project, there should be an option for an 'AVR Cross Target Application', using the 'AVR-GCC Toolchain' toolchain.

Now, time for some developing!