embedXcode: A Better Way to Develop for Arduino on the Mac using Xcode

embedXcode: A Better Way to Develop for Arduino on the Mac using Xcode

If you are writing code for your Arduino on a Mac and you've previously written code using Apple's FREE Xcode IDE, you know that the standard Arduino development environment is lacking in functionality, especially those which professional software developers have had in their IDEs for years. My personal favorite is Apple's Xcode IDE, which is the primary IDE used in developing applications for the OS X on the Mac and for iOS applications on Apple's mobile platforms (which are technically ALSO running Apple's OS X operating system). Find out how easy it is to use a professional-grade IDE to do your Arduino code using embedXcode from Rei Vilo Hobbies.

OS X Mavericks 10.9.2 Causes SSL Errors with Git and Bitbucket

OS X Mavericks 10.9.2 Causes SSL Errors with Git and Bitbucket

I use git to protect myself from myself. When I write code for AVR, Arduino, iOS, OS X or even the web, I stick it in a git repository on (it's free to have many private repos, so check it out) (thank you, Atlassian!). At the meltmedia office, we use the gitflow process of source code management to manage our projects and it works wonderfully. So, between home and the office, I use both github and bitbucket. Source code management ("SCM") is s-m-r-t smart and easy as pie (assuming making pies is indeed easy) with git. If I mangle the source code in my project, I can roll it back to a working state. If I want to try something out that will require major fiddling with the code in a project, I branch and fiddle. If it works, I merge it back in. If the experiment fails, I dump the branch like it never happened.

iPotti™ Released!

iPotti™ 1.2 bathroom status device So, we have this issue at the office with our single-person bathrooms. We have one "m" bathroom and one "w" bathroom. We have 40+ people in the office. Many people who sit out-of-sight from the bathrooms often walk all the way across our office only to find out that someone else has beaten them to the potti.

To solve this problem, I took a Make Controller from, wired a couple of Vishay TEMT6000 ambient light sensors (photo transistors) to it, then wrote a Mac desktop app to sit in the status bar to show everyone the status of the pottis. I call it, "iPotti™" and it works awesome!

At the heart of iPotti™ is the Make Controller. It's an Atmel Sam7 ARM microcontroller with the Make Interface Board stuck to it. The Interface Board has Ethernet, USB, power and breakout headers for the pins of the microcontroller. I wrote a slim little piece of firmware for it that simply broadcasts UDP packets with the status of the pottis. It broadcasts a packet about every couple of seconds.

At the receiving end of the iPotti™ system is a little Mac OS X app designed to sit up in the OS X status bar:

iPotti™ in the OS X® Status Menu

iPotti™ Status Menu - Men Busy

The letters are green when the pottis are available. They turn red when the lights go on inside the bathroom. Lights are the whole trigger in this device. I didn't want to get into sensing AC current in the light wiring or tapping into the switches. This was the cheapest and easiest to get done quickly and without forking out too much coin.

The status menu item has a drop-down menu, as well. It's how you quit the app or check the About dialog:

iPotti™ Menu

The About dialog is pretty simple, but it turns out to be indispensable, since I've now released about three updates to the client software.

iPotti™ About dialog

The sensors see ambient light like the human eye does. I mounted them up above the bathrooms and oriented them to look through little vent holes in the lighting canisters. The light cans keep themselves pretty cool, so there shouldn't be any worries about melting the little sensor thingies. (Read on to see the sensors and their PCBs.) Here is what they look like mounted near the ceiling light cans:

iPotti™ light sensor in position

The sensors are spliced to 4-wire alarm cables that run back to the main iPotti™ server. The two cables join into a single RJ-45 connector (same one used for Ethernet, looks like a big phone jack connector) and then snap into a port in the side of the iPotti™ device box.

Another sweet technical feature of the installation is that our office uses IP phones that get their power from the Ethernet switches. It's call, "POE," which stands for Power Over Ethernet. We bought a little Cisco®/Linksys® POES5 5-Volt splitter that happened to have the proper little coax power connector AND it was the proper polarity, so I didn't have to do anything to hack it together. Here's what it looks like connected up, powering and communicating (outside of the case, of course):

iPotti™ powered over Ethernet

Inside its case, the iPotti™ looks like this:

iPotti™ put together in the case

The Make Controller doesn't fit perfectly in this spare project box I had, but it's good enough for a device that nobody will ever see (hardly ever, anyway). The two white cables protruding from the left side of it are being replaced with the RJ-45 jack for the sensors. Originally, in version 1.0, the cables went right inside the case, wrapped around a screw post for strain relief, and then jacked into the controller.

The latest incarnation (the one that is live and connected now) uses some recovered USB ports from some circuit board I had in my junk pile. I took the ends off of two old USB cables and spliced them onto the ends of the bathroom light sensor cables. I should have done that from the start, but I was lazy and anxious to get this thing up for testing. Now, I can easily disconnect it and update it or maintain it.

The only fab I had to do was on the sensors. They are surface-mount (SMD) and they require a resistor, so I made little PCBs for them using my usual toner-transfer process:

Spare or reject sensor PCBs

Fully assembled, they each look like this:

iPotti™ ambient light sensor

The real trick will be getting people to remember to turn of the lights behind them. We've had signs up for the for the longest time to remind people. Occasionally, someone does forget. Overall, the solution works well.

Lessons learned from this project: A little Make Controller doesn't fair well as a web server when 40+ workstations are hitting it every two seconds. The 1.0 version of the system had the iPotti™ main device set up as a web server and the iPotti™ app hit the server every couple of seconds. This was painful and dumb. I chose that over UDP out of laziness and fear of the unknown (I had never set up UDP broadcasts on the Make Controller's lightweight IP stack AND I hadn't done it yet in my Cocoa [Mac OS X] development adventures). Turns out that UDP was stupidly simple to implement on the Make Controller AND for OS X. I should have done it from the get-go.

Here are some other photos of the installation and a famous red box...

Do not lick soldering irons

SparkFun box!!!

Designer and his new creation

Objective-C/iOS/iPhone: UIColor from NSString

Until I find a home for my little snippets of code, here is where they will go. While building an iOS (iPhone) application, I needed a quick little method in Objective-c that would take strings of color codes from data provided by web developer peeps and convert those string values into UIColor objects. For instance, sometimes we'd get "#ff7401" from the data for our app. Sometimes it might be formatted like, "0xff7401" or even just, "ff7401". I simply created a category on NSString to make is super-simple.


[code lang="objc"]

//  UIColor+meltutils.h

//  Created by Andy Frey on 10/15/10.

#import <Foundation/Foundation.h>

@interface NSString (meltutils)

- (UIColor *)toUIColor;




[code lang="objc"]

#import "NSString+meltutils.h"

@implementation NSString (meltutils)

- (UIColor *)toUIColor {

unsigned int c;

if ([self characterAtIndex:0] == '#') {

[[NSScanner scannerWithString:[self substringFromIndex:1]] scanHexInt:&c];

} else {

[[NSScanner scannerWithString:self] scanHexInt:&c];


return [UIColor colorWithRed:((c & 0xff0000) >> 16)/255.0 green:((c & 0xff00) >> 8)/255.0 blue:(c & 0xff)/255.0 alpha:1.0];




So, to use this, all you have to do is import the header file and send a message to your string that contains the color code:

[code lang="objc"] #import "NSString+meltutils.h" ... UIColor *c = [@"#ff840a" toUIColor]; ... [/code]

Hope that helps someone out a little!