Prerequisites
This project assumes you are familiar with the following
Setup
All you need for this project is the Getting Started Kit.
Write code (Java)
Copy the code below into a new Java project. If you need a reminder of how to do this, revisit the Getting Started Course.
Not your programming language? Set your preferences so we can display relevant code examples
//Add Phidgets Library.
import com.phidget22.*;
import java.util.concurrent.ThreadLocalRandom;
public class RedLightGreenLight {
//Define
static boolean playingGame = false;
static int redScore = 0;
static int greenScore = 0;
public static boolean flashLEDs(DigitalOutput led1, DigitalOutput led2) throws Exception{
int i = 0;
while(i < 5){
led1.setState(true);
led2.setState(true);
Thread.sleep(500);
led1.setState(false);
led2.setState(false);
Thread.sleep(500);
i += 1;
}
return true;
}
public static int getRandomSleep(){
//generate a random number between 500 and 4000
return ThreadLocalRandom.current().nextInt(500, 4000);
}
public static void main(String[] args) throws Exception{
//Create
DigitalInput redButton = new DigitalInput();
DigitalOutput redLED = new DigitalOutput();
DigitalInput greenButton = new DigitalInput();
DigitalOutput greenLED = new DigitalOutput();
//Address
redButton.setHubPort(0);
redButton.setIsHubPortDevice(true);
redLED.setHubPort(1);
redLED.setIsHubPortDevice(true);
greenButton.setHubPort(5);
greenButton.setIsHubPortDevice(true);
greenLED.setHubPort(4);
greenLED.setIsHubPortDevice(true);
//Event for red button
redButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
redScore += 1;
}
else{
redScore -= 1;
}
System.out.println("Red Score: " + redScore);
if(redScore == 100){
System.out.println("Red player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
System.out.println("Error: " + ex);
}
}
});
//Event for green button
greenButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
greenScore += 1;
}
else{
greenScore -= 1;
}
System.out.println("Green Score: " + greenScore);
if(greenScore == 100){
System.out.println("Green player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
System.out.println("Error: " + ex);
}
}
});
//Open
redLED.open(1000);
greenLED.open(1000);
redButton.open(1000);
greenButton.open(1000);
System.out.println("Starting game, wait for LEDs to stop flashing.");
playingGame = flashLEDs(redLED, greenLED);
//Game loop
while(playingGame){
greenLED.setState(true);
Thread.sleep(getRandomSleep());
greenLED.setState(false);
redLED.setState(true);
Thread.sleep(getRandomSleep());
redLED.setState(false);
}
System.out.println("Game over");
}
}
package redlightgreenlight;
//Add Phidgets Library.
import com.phidget22.*;
import java.util.concurrent.ThreadLocalRandom;
public class RedLightGreenLight {
//Define
static boolean playingGame = false;
static int redScore = 0;
static int greenScore = 0;
public static boolean flashLEDs(DigitalOutput led1, DigitalOutput led2) throws Exception{
int i = 0;
while(i < 5){
led1.setState(true);
led2.setState(true);
Thread.sleep(500);
led1.setState(false);
led2.setState(false);
Thread.sleep(500);
i += 1;
}
return true;
}
public static int getRandomSleep(){
//generate a random number between 500 and 4000
return ThreadLocalRandom.current().nextInt(500, 4000);
}
public static void main(String[] args) throws Exception{
//Create
DigitalInput redButton = new DigitalInput();
DigitalOutput redLED = new DigitalOutput();
DigitalInput greenButton = new DigitalInput();
DigitalOutput greenLED = new DigitalOutput();
//Address
redButton.setHubPort(0);
redButton.setIsHubPortDevice(true);
redLED.setHubPort(1);
redLED.setIsHubPortDevice(true);
greenButton.setHubPort(5);
greenButton.setIsHubPortDevice(true);
greenLED.setHubPort(4);
greenLED.setIsHubPortDevice(true);
//Event for red button
redButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
redScore += 1;
}
else{
redScore -= 1;
}
System.out.println("Red Score: " + redScore);
if(redScore == 100){
System.out.println("Red player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
System.out.println("Error: " + ex);
}
}
});
//Event for green button
greenButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
greenScore += 1;
}
else{
greenScore -= 1;
}
System.out.println("Green Score: " + greenScore);
if(greenScore == 100){
System.out.println("Green player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
System.out.println("Error: " + ex);
}
}
});
//Open
redLED.open(1000);
greenLED.open(1000);
redButton.open(1000);
greenButton.open(1000);
System.out.println("Starting game, wait for LEDs to stop flashing.");
playingGame = flashLEDs(redLED, greenLED);
//Game loop
while(playingGame){
greenLED.setState(true);
Thread.sleep(getRandomSleep());
greenLED.setState(false);
redLED.setState(true);
Thread.sleep(getRandomSleep());
redLED.setState(false);
}
System.out.println("Game over");
}
}
//Add Phidgets Library
import com.phidget22.*;
//Define
DigitalOutput redLED;
DigitalOutput greenLED;
DigitalInput redButton;
DigitalInput greenButton;
boolean playingGame = false;
int redScore = 0;
int greenScore = 0;
//Flash LEDs - starting sequence
boolean flashLEDs(DigitalOutput led1, DigitalOutput led2) throws Exception{
int i = 0;
while(i < 5){
led1.setState(true);
led2.setState(true);
delay(500);
led1.setState(false);
led2.setState(false);
delay(500);
i += 1;
}
return true;
}
int getRandomSleep(){
//generate a random number between 500 and 4000
return int(random(500, 4000));
}
void setup(){
try{
//Create
redLED = new DigitalOutput();
greenLED = new DigitalOutput();
redButton = new DigitalInput();
greenButton = new DigitalInput();
//Address
redButton.setHubPort(0);
redButton.setIsHubPortDevice(true);
redLED.setHubPort(1);
redLED.setIsHubPortDevice(true);
greenButton.setHubPort(5);
greenButton.setIsHubPortDevice(true);
greenLED.setHubPort(4);
greenLED.setIsHubPortDevice(true);
//Event
redButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
greenScore += 1;
}
else{
greenScore -= 1;
}
print("Green Score: " + greenScore);
if(redScore == 100){
print("Green player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
print("Error: " + ex);
}
}
});
//Event
greenButton.addStateChangeListener(new DigitalInputStateChangeListener() {
public void onStateChange(DigitalInputStateChangeEvent e) {
try{
//if button is pushed and no one has won
if(playingGame && e.getState()){
//if green light is on
if(greenLED.getState()){
greenScore += 1;
}
else{
greenScore -= 1;
}
System.out.println("Green Score: " + greenScore);
if(greenScore == 100){
print("Green player wins!");
playingGame = false;
}
}
} catch(PhidgetException ex){
print("Error: " + ex);
}
}
});
//Open
redButton.open(1000);
greenButton.open(1000);
redLED.open(1000);
greenLED.open(1000);
playingGame = flashLEDs(redLED, greenLED);
beginGame();
}catch(Exception e){
//Handle Exceptions
e.printStackTrace();
}
}
void beginGame(){
try{
while(playingGame){
greenLED.setState(true);
Thread.sleep(getRandomSleep());
greenLED.setState(false);
redLED.setState(true);
Thread.sleep(getRandomSleep());
redLED.setState(false);
}
print("Game Over");
exit();
} catch(Exception e){
//Handle Exceptions
e.printStackTrace();
}
}
Write code (Python)
Copy the code below into a new Python project. If you need a reminder of how to do this, revisit the Getting Started Course.
Not your programming language? Set your preferences so we can display relevant code examples
#Add Phidgets Library
from Phidget22.Phidget import *
from Phidget22.Devices.DigitalInput import *
from Phidget22.Devices.DigitalOutput import *
#Required for sleep statement
import time
#Required for random number generator
import random
#Flash LEDs - starting sequence
def flash_leds():
i = 0
while(i < 5):
redLED.setState(True)
greenLED.setState(True)
time.sleep(0.5)
redLED.setState(False)
greenLED.setState(False)
time.sleep(0.5)
i += 1
return True
#Generate a random number between 0.5 and 4.0. Step size of 0.1.
def get_random_sleep():
return random.randrange(500,4000,100)/1000.0
#Event
def onRedButton_StateChange(self, state):
global playing_game
#if button is pushed and no one has won
if(state and playing_game):
#if green light is on
if(greenLED.getState()):
redButton.score += 1
else:
redButton.score -= 1
print(redButton.score)
if(redButton.score == 100):
print("Red player wins!")
playing_game = False
#Event
def onGreenButton_StateChange(self, state):
global playing_game
#if button is pushed and no one has won
if(state and playing_game):
#if green light is on
if(greenLED.getState()):
greenButton.score += 1
else:
greenButton.score -= 1
print(greenButton.score)
if(greenButton.score == 100):
print("Green player wins!")
playing_game = False
#Create
redButton = DigitalInput()
redLED = DigitalOutput()
greenButton = DigitalInput()
greenLED = DigitalOutput()
#Address
redButton.setHubPort(0)
redButton.setIsHubPortDevice(True)
redLED.setHubPort(1)
redLED.setIsHubPortDevice(True)
greenButton.setHubPort(5)
greenButton.setIsHubPortDevice(True)
greenLED.setHubPort(4)
greenLED.setIsHubPortDevice(True)
#Subscribe to Events
redButton.setOnStateChangeHandler(onRedButton_StateChange)
greenButton.setOnStateChangeHandler(onGreenButton_StateChange)
#Define a score
redButton.score = 0
greenButton.score = 0
#Open
redLED.openWaitForAttachment(1000)
greenLED.openWaitForAttachment(1000)
redButton.openWaitForAttachment(1000)
greenButton.openWaitForAttachment(1000)
print("Starting game, wait for LEDs to stop flashing.")
playing_game = flash_leds()
#Game loop
while(playing_game):
greenLED.setState(True)
time.sleep(get_random_sleep())
greenLED.setState(False)
redLED.setState(True)
time.sleep(get_random_sleep())
redLED.setState(False)
print("Game Over")
Write code (C#)
Copy the code below into a new C# project. If you need a reminder of how to do this, revisit the Getting Started Course.
Not your programming language? Set your preferences so we can display relevant code examples
//Add Phidgets Library
using Phidget22;
using System.Collections;
using System.Collections.Generic;
namespace SimonSays
{
class Program
{
//Track number of button events
static int numEvents = 0;
//Track user input and solutions
public static List<int> sequenceKey = new List<int>();
public static List<int> userAnswer = new List<int>();
//public static ArrayList sequenceKey = new ArrayList();
//public static ArrayList userAnswer = new ArrayList();
//Define here so they can be used in events
public static DigitalOutput redLED;
public static DigitalOutput greenLED;
//Event
private static void redButton_StateChange(object sender, Phidget22.Events.DigitalInputStateChangeEventArgs e)
{
redLED.State = e.State;
if (e.State)
{
userAnswer.Add(0);
numEvents++;
}
}
//Event
private static void greenButton_StateChange(object sender, Phidget22.Events.DigitalInputStateChangeEventArgs e)
{
greenLED.State = e.State;
if (e.State)
{
userAnswer.Add(1);
numEvents++;
}
}
static void Main(string[] args)
{
//Determine starting # of colors
var numColors = 3;
//Determine if game should continue looping
bool continueGame = true;
//Create
DigitalInput redButton = new DigitalInput();
DigitalInput greenButton = new DigitalInput();
redLED = new DigitalOutput();
greenLED = new DigitalOutput();
//Address
redButton.HubPort = 0;
redButton.IsHubPortDevice = true;
redLED.HubPort = 1;
redLED.IsHubPortDevice = true;
greenButton.HubPort = 5;
greenButton.IsHubPortDevice = true;
greenLED.HubPort = 4;
greenLED.IsHubPortDevice = true;
//Subscribe to events
redButton.StateChange += redButton_StateChange;
greenButton.StateChange += greenButton_StateChange;
//Open
redLED.Open(1000);
greenLED.Open(1000);
redButton.Open(1000);
greenButton.Open(1000);
//Creates random number generator
System.Random RNG = new System.Random();
System.Console.WriteLine("Starting game, look at the LEDS.");
System.Threading.Thread.Sleep(2000);
//Loop that keeps game going
while (continueGame)
{
//Generate answer key for this round
sequenceKey.Clear();
for (int i = 0; i < numColors; i++)
{
int randomNumber = RNG.Next(0, 2); //randomly generate either 0 or 1
sequenceKey.Add(randomNumber);
}
//Flash the answer key for user to memorize
for (int i = 0; i < sequenceKey.Count; i++)
{
if (sequenceKey[i] == 0) //0 is assigned to red
{
redLED.State = true;
System.Threading.Thread.Sleep(500);
redLED.State = false;
}
else //1 is assigned to green
{
greenLED.State = true;
System.Threading.Thread.Sleep(500);
greenLED.State = false;
}
System.Threading.Thread.Sleep(500);
}
//reset before accepting answers
numEvents = 0;
userAnswer.Clear();
System.Console.WriteLine("Please enter your answer:");
//Wait for user input
while (numEvents < sequenceKey.Count)
{
System.Threading.Thread.Sleep(150);
}
//Compare user answers to key
for (int i = 0; i < sequenceKey.Count; i++)
{
if (userAnswer[i] != sequenceKey[i])
{
System.Console.WriteLine("Game Over! You reached level : " + (numColors-3));
System.Console.ReadLine();
continueGame = false;
}
}
if (continueGame)
{
System.Console.WriteLine("Congrats! Starting next level...");
System.Threading.Thread.Sleep(2000);
numColors++;
}
}
}
}
}
Write code (Swift)
Copy the code below into a new Swift project. If you need a reminder of how to do this, revisit the Getting Started Course.
Not your programming language? Set your preferences so we can display relevant code examples
Code not available.
Run Your Program
This game requires two players, one will use the red button and one will use the green button. Both LEDs will flash 5 times and then the game will begin! When the green LED is on, press your button as many times as you can to gain points. When the red LED is on, stop pressing your button or you will lose points! First to 100 points wins.
Practice
- Try adding a sound byte to your code that says either "Green Light" or "Red Light" depending on which LED is on. Hint: the RFID Sound Effects project shows how to add audio to your code.
- Try adding another Getting Started Kit to make it a four player game. Hint: the Advanced Lesson: Two or More VINT Hubs shows how to use multiple Getting Started Kits.