Playing MIDI files on Arduino – Part 3 Hardware and MD_MIDIFile Library

MIDI_computer_music

Part 1 and part 2 covered Standard MIDI Files and playing music at the right tempo. Once we have a MIDI stream, we need hardware that can play the notes.

In this part we’ll look at how to finally make a sound and how the MD_MIDIFile library supports this in software.

Continue reading “Playing MIDI files on Arduino – Part 3 Hardware and MD_MIDIFile Library”

Advertisements

Playing MIDI files on Arduino – Part 2 Keeping to the Beat

MIDI_computer_music

Keeping time in music is very important. So it stands to reason that MIDI files include a number of parameters related to keeping time, and the MIDI standard also includes time synchronization messages to ensure that all the instruments keep to the same musical beat.

Part 1 covered the content of Standard MIDI Files. In this part we’ll look at the how to  keep the music synchronised to the beat, one of the more complex parts of playing a SMF.

Continue reading “Playing MIDI files on Arduino – Part 2 Keeping to the Beat”

Playing MIDI files on Arduino – Part 1 Standard MIDI Files

MIDI_computer_musicMIDI is an industry standard music technology protocol that connects products from many different companies including digital musical instruments, computers, tablets, and smartphones. MIDI is used every day around the world by musicians, DJs, producers, educators, artists, and hobbyists to create, perform, learn, and share music and artistic works.

MIDI music can be stored in standard files. Here’s what they look like and how they work and how we can ‘play’ the files.

Continue reading “Playing MIDI files on Arduino – Part 1 Standard MIDI Files”

Tic-Tac-Toe and an Experiment in Game Interface

tictactoeThe motivation for this project was to explore the separation between the algorithm for managing a game and the user interface for the game. Discovering a Tic-tac-toe algorithm simple enough to implement on the Arduino allowed an exploration of this concept in a game with simple user interface requirements.

Continue reading “Tic-Tac-Toe and an Experiment in Game Interface”

Revisiting Device Independent Control for LED Cubes

LED Cube 8x8x8

Some time ago, I wrote about device independent control of monochrome LED cubes (see this previous blog post which contains information referenced in this article).

Recently, someone contacted me about extending this framework to color cubes for a project they were considering. As it turn out, this was relatively straightforward and has added additional capability to the existing MD_Cubo library.

Continue reading “Revisiting Device Independent Control for LED Cubes”

Reading LM34, LM35, LM335 (LM3x) Temperature Sensors Accurately

LM35 ImageThe LM3x series of sensors are precision, easily-calibrated, integrated circuit temperature sensors. These are ideal as a beginner sensor, only to disappoint when code is copied from somewhere, run on the MCU and the temperature readings seem to be wildly varying and incorrect. Why is this happening and what can be done about it? Read on.

Continue reading “Reading LM34, LM35, LM335 (LM3x) Temperature Sensors Accurately”

LCD Module Pushwheel Animation

PushwheelA question on the Arduino forum and the thread that followed prompted me to try and emulate a mechanical push- or thumb-wheel display update on an LCD module. The technique uses the LCD programmable characters and could be extended to other applications for simple LCD module animations.

Continue reading “LCD Module Pushwheel Animation”

Robot Eye Expressions using LED Matrix Display

RobotEyes_IconI was exploring ways to make a future robot project more appealing and came across a number of articles about animated robotic eyes created to convey expression or mood. This looked like a bit of fun and quite achievable using the LED matrix modules that I have been playing with for a while. Here’s the result.

Continue reading “Robot Eye Expressions using LED Matrix Display”

Processing Selections from Multiple User Input Sources

MUI_HeaderIn the last few projects I completed, I needed to find a way to process user commands arising from multiple input sources. A simple example would be a clock with tact switches and a Bluetooth interface providing identical functionality from either user input source.

For these applications I developed a simple modular and scalable approach that can be applied in other projects.

Continue reading “Processing Selections from Multiple User Input Sources”

Parola A to Z – RAM Requirements

RAM_ChipThe amount of RAM an application uses is printed out by the IDE at compile time. For applications that don’t allocate memory, this is a really good guide to how much spare RAM is available at run time.

However, if  an application, like any using the Parola libraries, uses memory from the heap, you need to make sure that there is sufficient memory left for run-time memory allocation.

Continue reading “Parola A to Z – RAM Requirements”