i am trying to run a program which runs a traffic light program and the example servo knob simultaneously. it worked perfectly until i pressed the pushbutton, when it disconnected from my computer and restarted the program. i doubt it could be a wiring problem so this is my code
byte red_led = 6;
byte yellow_led = 5;
byte green_led = 4;
byte switch_pin = 2;
byte pedestrian_red = 8;
byte pedestrian_green = 7;
byte waiting = 9;
unsigned long red_start_time = 0;
unsigned long red_duration = 5000;
unsigned long yellow_start_time = 0;
unsigned long yellow_duration = 3000;
unsigned long green_start_time = 0;
unsigned long green_duration = 5000;
unsigned long current_time = 0;
unsigned long both_start_time = 0;
unsigned long both_duration = 3000;
int button = 0;
int i = 0;
#include <Servo.h>
Servo myservo;
int potpin = 0;
int val;
void setup()
{
pinMode (red_led, OUTPUT);
pinMode (yellow_led, OUTPUT);
pinMode (green_led, OUTPUT);
pinMode (switch_pin, INPUT);
pinMode (pedestrian_red, OUTPUT);
pinMode (pedestrian_green, OUTPUT);
digitalWrite (switch_pin, HIGH);
current_time = millis();
Serial.begin(9600);
myservo.attach(10);
}
void loop()
{
if (button == 0)
{
current_time = millis();
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, HIGH);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(48);
green_start_time = current_time;
while ((current_time - green_start_time) <= green_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
if
(digitalRead (switch_pin) == LOW)
{
button = 1;
digitalWrite (waiting, HIGH);
}
}
current_time = millis();
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(58);
yellow_start_time = current_time;
while ((current_time - yellow_start_time) <= yellow_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
if (digitalRead (switch_pin) == LOW)
{
button = 1;
digitalWrite (waiting, HIGH);
}
}
current_time = millis();
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(68);
red_start_time = current_time;
while ((current_time - red_start_time) <= red_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
if (digitalRead (switch_pin) == LOW)
{
button = 1;
digitalWrite (waiting, HIGH);
}
}
current_time = millis();
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(568);
both_start_time = current_time;
while ((current_time - both_start_time) <= both_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
if (digitalRead (switch_pin) == LOW)
{
button = 1;
digitalWrite (waiting, HIGH);
}
}
}
current_time = millis();
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, HIGH);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(48);
green_start_time = current_time;
while ((current_time - green_start_time) <= green_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
if (digitalRead (switch_pin) == LOW)
{
button = 1;
digitalWrite (waiting, HIGH);
}
}
if (button == 1)
{
current_time = millis();
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
Serial.println(57);
yellow_start_time = current_time;
while ((current_time - yellow_start_time) <= yellow_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
}
current_time = millis();
digitalWrite (waiting, LOW);
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, LOW);
digitalWrite (pedestrian_green, HIGH);
Serial.println(67);
red_start_time = current_time;
while ((current_time - red_start_time) <= red_duration)
{
current_time = millis();
val = analogRead(potpin);
val = map(val, 0, 1023, 1, 179);
myservo.write(val);
}
current_time = millis();
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, LOW);
digitalWrite (pedestrian_green, HIGH);
Serial.println(57);
while (i < 10)
{
red_start_time = current_time;
while ((current_time - red_start_time) <= 400)
{
}
if(yellow_led == HIGH)
{
digitalWrite (yellow_led, LOW);
digitalWrite (pedestrian_green, LOW);
}
else
{
digitalWrite (yellow_led, HIGH);
digitalWrite (pedestrian_green, HIGH);
}
current_time = millis();
i++;
}
button = 0;
i = 0;
}
}