So have any of you written applications or programs that provided some enhanced functionality to your life? Stuff that isn't done as easily by other means?
First, according to the Wikipedia article on microprocessors:
About ten billion CPUs were manufactured in 2008. About 98% of new CPUs produced each year are embedded.
Ten billion a year, almost all of which are in embedded systems (ie. not someone's PC). That's a lot. And you can bet most aren't us hobbyists playing with C++.
I hear, or I guess, they are in light bulbs (the compact florescent types / LEDs), toasters, washing machines, dishwashers, sewing machines, and motor cars. I think modern motor cars have a half-dozen or more in them. They are in calculators, label printers, cameras, phones, TVs, video players, etc.
But why would you want to program one, rather than buy it off the shelf? Well I suppose it is because you want some custom functionality that either isn't available elsewhere, or is much too expensive, or "not quite right".
For my case, let me list some of the things I have done with them:
- Garage-door sensor - warns me if I left the door open
- Alarm clock for my daughter that only rings on weekdays
- Specialized timer that beeps at the correct interval, and the correct number of times, to clean the coffee machine
- Little "adventure game" on a chip
- RFID-controlled security system for my front door - where family members can open the door by presenting a card
For me it's also an educational tool - it helps me understand more about the possibilities, and limitations, of the technology. Plus I can get my children enthusiastic about it as well.
Future applications could be things like: temperature monitoring, 3D printing, some kind of robot (for the fun of it!). Perhaps something that lets me know if I have locked all the doors in the house before going to bed. Then maybe a water-tank level sensor. Fish feeder. Cat amuser.
As for C++, the Arduino programming environment uses g++ and is in no way a "limited version". But I certainly wouldn't try to learn everything about C++ in the hope that something will one day become useful. First find an application, and then learn as much as you need to implement it. And maybe later on you will wonder if there was a faster, neater, more efficient way of doing it, and you may research that "better" way. Or maybe what you did first time will work perfectly well.
There are so many things you could
do: music, lighting, entertainment, relaxation, cooking, cleaning, security, transport, tracking (eg. parcels).
In fact I think CNC is one of the more fascinating applications: program into the machine what you want and it cuts up wood to make a cupboard, or aluminium to make an aircraft.
And then there are the people who do things like combine GPS, depth sensor, clocks, transmitters, etc. and attach them to whales to see their migratory patterns (or birds).
To have fun with it, keep things simple (I always try to). If you wanted to, say, have a gadget that beeped and flashed a light when your attic got too hot you would have three major things: a temperature sensor, a light and a beeper. So get the beeping working first. Then flash a light. Then get temperature sensing working. Then use a bit of logic to combine them all. Learn what you need to achieve that. Then install it and see how it goes. Eventually you might want to tweak it (and you might not). Maybe you'll make it use battery power more efficiently. Maybe you'll transmit the temperature via a radio module to your room downstairs. You'll end up with something that does what you
want, when you want it to. And learned a lot, and had fun in the process.