Apr
14

How to use JavaScript setTimeout

The setTimeout function allows you to delay the execution of code.  The setTimeout function works by specifying a string of code followed by the delay in milliseconds.  For example:

setTimeout(“alert(‘timeout!’)”, 1000)

The code above will display an alert box that says “timeout!” after 1 second (1000 milliseconds).  Because setTimeout uses strings of text that it tries to execute later, things don’t always work as expected.  Consider the following example:

var test = function() { var obj1 = new Object(); obj1["key"] = “value”; setTimeout(‘alert(obj1["key"])’, 1000); }

The code above defines a function called test.  The function creates a new object, sets the attribute “key” to “value”, and calls setTimeout to display an alert with the value of key 1 second later.  However, calling this function will result in a run-time error because obj1 is outside the scope when the alert function is executed.  To fix this, the code must be written differently:

var test = function() { var obj1 = new Object(); obj1["key"] = “value”; setTimeout(“alert(\”"+obj1["key"]+”\”)”, 1000); }

This code works as expected because the value of key is included directly in the string.  The code does not attempt to reference obj1 later.  But, let’s say you want to pass an entire object to some function.  Simply convert the object to JSON.  For example:

var test = function() { var obj1 = new Object(); obj1["key"] = “value”; setTimeout(“some_function(“+JSON.stringify(obj1)+”)”, 1000); }

 

Mar
24

How to create a git repository

How to create a git repository on your own server:

mkdir <dir-name>

chown <username>:<git-users-group> <dir-name>

chmod g+ws <dir-name>

cd <dir-name>

git init

chmod g+ws .git

git config –bool core.bare true

 

Jun
12

How to create a MySQL database and user

How to create a MySQL database and user:

create database <db_name>;

create user ‘<user_name>’@'localhost’ identified by ‘<user_password>’;

grant all on <db_name>.* to <user_name>;

Oct
22

Audio output selector

Using my headphones with my computer is frustrating.  Whenever I want to use my headphones, I have to move my computer so I can access the back panel, unplug my computer speakers, and plug-in my headphones.  Okay, maybe it isn’t that difficult, but it should be easier.  How about a device that allows you to select between headphones or computer speakers? Read the rest of this entry »

Sep
12

How to setup AVR projects

This brief tutorial demonstrates how to create projects for the AVR using AVR-GCC.  This tutorial assumes that you are using Ubuntu for your development environment.  This tutorial also assumes that you have already installed AVRDUDE.  Also, you should have a development board with at least one button and one LED.  In my case, the button is active low.

1. Install AVR-GCC:

$ sudo apt-get install gcc-avr
$ sudo apt-get install avr-libc

2. Create a new directory for your project, let’s call it blink:

$ mkdir blink
$ cd blink

3. Download the template makefile:

$ wget http://electrons.psychogenic.com/articles/Makefile.tpl
$ mv Makefile.tpl Makefile

4. Copy the template makefile to your Templates folder if desired:

$ cp Makefile ~/Templates/avr-makefile

5. Modify the configuration section of the makefile.  This is fairly easy thanks to the helpful comments included in the makefile.  I used the following configuration:

MCU=atmega128
PROGRAMMER_MCU=m128
PROJECTNAME=blink
PRJSRC=blink.c
INC=
LIBS=
OPTLEVEL=0
AVRDUDE_PROGRAMMERID=dragon_jtag
AVRDUDE_PORT=usb

6. Get blink.c:

$ wget http://www.krisbarrett.com/wp-content/uploads/2009/09/blink.c

7. Modify the #defines so that they correspond to the connections on your development board.  On my development board, the BTN is connected to PA2 and the LED is connected to PA6.

#define LED (1 << PA6)
#define BTN (1 << PA2)

8. Build the project:

$ make

9. Program the AVR using the writeflash target included in the makefile:

$ sudo make writeflash

Ensure that the program works as expected.  The LED should turn on when the button is pressed.  The LED should turn off when it is released.  Recall that this assumes your button is active low.  Congratulations, you have just created your first AVR project!

Sep
12

How to use AVR Dragon

This brief tutorial demonstrates how to read, write, and erase an AVR chip using AVR Dragon.  This tutorial assumes that you are using Ubuntu for your development environment.  This tutorial also assumes that you have an AVR development board running a demo program.  The JTAG port is used in this tutorial, but the ISP port can also be used.  Simply replace “dragon_jtag” with “dragon_isp”.

1. Install AVRDUDE:

$ sudo apt-get install avrdude

2. Read demo program from development board:

$ sudo avrdude -p m128 -c dragon_jtag -P usb -U flash:r:flash.hex:i

3. Erase development board:

$ sudo avrdude -p m128 -c dragon_jtag -P usb -e

4. Reprogram the development board:

$ sudo avrdude -p m128 -c dragon_jtag -P usb -U flash:w:flash.hex:i

Aug
30

Catalan numbers

690px-Catalan_number_4x4_grid_example.svg

Recently I was trying to count the number of n-bit numbers that have an equal number of 1′s and 0′s.  For example, there are 6 such numbers for 4-bit long numbers (0011, 0101, 0110, 1001, 1010, 1100).  I wrote a simple program to count such numbers for arbitrarily long numbers.  However, the program was computationally complex and it took a long time to compute the result for large values of n.  After spending some time trying to figure out the equation myself, I searched the internet and stumbled upon Catalan numbers.  I determined that the equation is related to Catalan numbers.  I included the equation below because I couldn’t find it anywhere else.  Also, I don’t have a formal proof, but it seems to work.  Enjoy!

Number of n-bit numbers that have an equal number of 1′s and 0′s = (m+1) * Cm, where m = n/2 and Cm = mth Catalan number

Sep
03

How to make your own Arduino shield

Arduino Shield

After many months of working on my Arduino based project, I decided to finalize my project by making my own custom PCB.  At first I wanted to design a PCB that connected to the Arduino through a series of cables.  After some thought however, I realized that a shield would be better because it would eliminate the need for cables.  This tutorial assumes an understanding of Cadsoft Eagle.  For more information about Eagle, see the Eagle Tutorials section below.  Here are the steps to make your own Arduino shield: Read the rest of this entry »

Aug
25

Fun with FFT

This is a project that I threw together one weekend.  The FFT is calculated using Processing. The FFT is then sent to the Freeduino via the serial port. The Freeduino displays the FFT on the dot matrix display using shift registers and a Darlington transistor array.

Jul
29

Improved light bar controller

Improved Light Bar Controller

I made several improvements to my light bar controller.  I added a push button that pauses the controller on a desired color. I added a red LED to indicate if the controller is paused.  I also modified the light bar so that it easily plugs into the breadboard.  I did this by replacing the polarized right angle connectors with non polarized headers (one straight and one right angle).  The improved controller also uses the Bare Bones Board from the Modern Device Company instead of the Diecimila.  Below is an updated schematic of the controller. Read the rest of this entry »

Older posts «