In my second semester at MIT, I am now taking a course called "Advanced Interactions" taught by Marcelo Coelho. In our first project, titled "1D Interface," we were tasked to design a simple game that could only use a 1D array of colored pixels, then to design a controller to play the game. This project has taught me how to use my knowledge of programming/software and electronics/hardware in a new light in interaction design.
Using Processing as the environment to program and display the game and an Arduino Nano along with two rotary encoders for the controller, I created a game called "Counting Colors." In this game, two players must memorize how many pixels of each color are displayed in an array of pixels. They then make their guesses using the controller, and are notified whether they were right or wrong. There are multiple rounds at different difficulty levels, which adds different colors to memorize and more total pixels. The player with the highest number of correct guesses at the end wins.
Programming the actual game strengthened my skills in using state machines to define specific behavior and helped me to better learn how to get different sources to communicate with each other by getting Arduino to talk to Processing for the controls of the game. In terms of designing the controller, I got a great deal of practice to deepen my skills in CAD modeling, 3D printing prototypes, and wiring the components together, but I also learned good design practices to not only fit everything together in one package, but to make it all look and feel really good, as well.
Another incredibly useful thing I've learned is how to present my work to others in a simple manner and get useful feedback to implement and improve my project in various ways. These critiques have helped me refine my design into something that is very enjoyable for people to play at a variety of skill and interest levels.