Red Light, Green Light

Use your Getting Started Kit to create a Red Light, Green Light game!

Prerequisites

This project assumes you are familiar with the following

Setup

All you need for this project is the Getting Started Kit.

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

  1. 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.
  2. 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.

What are Phidgets?

Phidgets are programmable USB sensors. Simply plug in your sensor, write code in your favorite language and go!

Phidgets have been used by STEM professionals for over 20 years and are now available to students.

Learn more

Set your preferences

Windows

Mac OS

Raspberry Pi

Java

Python

C#

Swift

NetBeans

Processing

Eclipse

Thonny

PyCharm

PyScripter

Visual Studio

Xcode

Setting your preferred operating system, programming language and environment lets us display relevant code samples for the Getting Started Tutorial, Device Tutorials and Projects

Done