Table of Contents

Starting Lights by Juan Pardo

It is an Arduino based system. You will find below details for building the device provided by the Author.

Mounting the device

Code

//==============================================================================
// Program:      ZRound.ino
// Author:       Juan Pardo
// Target:       UNO R3, IDE 1.0.5 
// Date:         2013/08/12
// Time:         02:32
// Notes:        
//               Uses Serial I/O
// Reference:    
//==============================================================================
#define VERSION  0.7
 
//=====[ INCLUDE ]==============================================================

 
//=====[ CONSTANTS ]============================================================
#define CMD_START   "$START"
#define CMD_STOP    "$STOP"
#define ANS_GO      "$GO"
#define bSize       64 
#define L_OFF       HIGH
#define L_ON        LOW

//=====[ PINS ]=================================================================
int DebugLed = 13;
 
//=====[ VARIABLES ]============================================================
char Buffer[bSize];        // Serial buffer
char ShadowBuffer[bSize];  // Serial buffer
char Command[10];
byte LightPort[]={4,5,6,7,8,9}; // Last port will be used as green light
byte LIGHTS;
byte GREENLIGHT;

//=====[ ReadSerialCommand ]====================================================
int ReadSerialCommand(void) {
  int BytesCount = -1;
  BytesCount =  Serial.readBytesUntil('\n',Buffer,bSize-1);  
  if (BytesCount  > 0) {
    Buffer[BytesCount]='\0';
  }
  else{
    Buffer[0]='\0';
  } 
  return BytesCount;
}

//=====[ LightsOFF ]=============================================================
void LightsOFF(void) {
  for(int i=0;i<LIGHTS;i++){
    digitalWrite(LightPort[i], L_OFF);	//Switch off lights
  }  
}

//=====[ SETUP ]===============================================================
void setup() {
  LIGHTS = sizeof(LightPort);
  GREENLIGHT = LIGHTS-1;
  for(int i=0;i<LIGHTS;i++){
    pinMode(LightPort[i], OUTPUT );		//Setup lights ports
    digitalWrite(LightPort[i], L_OFF);	//Switch off lights
  }

  Serial.begin(9600); 
  // Switchoff lights
  LightsOFF(); 
}


//=====[ LOOP ]===============================================================
void loop() {
 
  if(ReadSerialCommand()>0){
   
    strcpy(ShadowBuffer,Buffer);        
    strcpy(Command,strtok(ShadowBuffer,","));        
    
    if(strcmp(Command, CMD_START)==0){
      LightsOFF();
      for(int i=0;i<LIGHTS-1;i++){
        digitalWrite(LightPort[i], L_ON);	//Switch on lights
        delay(1000);
      }
      // Send GO to PC
      Serial.print(ANS_GO);	  
      Serial.print('\n');
      Serial.flush();

      LightsOFF();
      digitalWrite(LightPort[GREENLIGHT], L_ON);	//Switch on Green light
    }
    else{
      if(strcmp(Command, CMD_STOP)==0){
        LightsOFF();
        // Red lights blinking during 1 minute
        for(int i=0;i<60;i++){
          for(int j=0;j<LIGHTS-1;j++){
            digitalWrite(LightPort[j], L_ON);
          }
          delay(500);
          for(int j=0;j<LIGHTS-1;j++){
            digitalWrite(LightPort[j], L_OFF);
          }	
          delay(500);	
        }
        LightsOFF();
      }
    }
  }    
}