Hi all,
Trying to get a program to run once a hardware switch (set to pin 2) is set to high. A servo (handServo) with a small arm connected then turns the switch back off. Below is my code. For some reason there is a delay of anywhere between 3 and 15 seconds between the switch getting turned by me until the program executes. Any thoughts?
#include <Servo.h>
Servo doorServo;
Servo handServo;
int switch_pin = 2; //set switch on pin 2
int pos = 0;
int selectedMove = 0; //move selector
int Testmove = 0; //test mode: set to move number to test only one selected move
//(set to Zero to run normally i.e: roundrobbin on all moves)
boolean randomize = true; // if true, the box will do movers randomly, if set to false then the moves will be done sequencially from 1 to 10
void setup()
{
Serial.begin(9600);
pinMode(switch_pin, INPUT);
doorServo.attach(9); //set door servo on Pin 9 pwm
handServo.attach(10); //set hand servo on Pin 10 pwm
doorServo.write(60); //set door to hiding position
handServo.write(0); //set hand to hiding position
}
void loop()
{
//if the switch is on, then move door and hand to switch it off...
if(digitalRead(switch_pin) == HIGH)
{
if (Testmove == 0)
{
if(randomize == false)
{
if (selectedMove > 10)
{
selectedMove = 0; //when all moves are played, repeat the moves from beginning
}
}
else
{
selectedMove = random(5);
}
}
else
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
if (selectedMove == 0) { switchoff(); }
else if (selectedMove == 1) { switchoff(); }
else if (selectedMove == 2) { switchoffbitaraddod(); }
else if (selectedMove == 3) { crazydoor(); }
else if (selectedMove == 4) { crazyslow(); }
if (Testmove == 0 && randomize == false) {
selectedMove++; //swith to next move if not in test mode
}
}
}
// Library of moves
// basic move
void switchoff()
{
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 115; pos += 4)
{
handServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 115; pos>=0; pos-=4)
{
handServo.write(pos);
delay(15);
}
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
}
// move 2: open and wait, then move hand and wait, then switch of and hide
void switchoffbitaraddod()
{
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
delay(800);
//Moving hand
for(pos = 0; pos < 90; pos += 4)
{
handServo.write(pos);
delay(15);
}
delay(1000);
for(pos = 90; pos < 115; pos += 4)
{
handServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 115; pos>=0; pos-=5)
{
handServo.write(pos);
delay(15);
}
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
}
//move 3: open door then close it many times, wait, then quickly reoprn a nd switch off and hide.
void crazydoor()
{
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
delay(700);
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
delay(700);
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
//----of switch of----//
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 115; pos += 4)
{
handServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 115; pos>=0; pos-=4)
{
handServo.write(pos);
delay(15);
}
//hiding door
for(pos = 0; pos<=60; pos+=3)
{
doorServo.write(pos);
delay(15);
}
}
// move 4: open door, then move hand very slowly forward and back to hiding very slowly, then quickly close door
void crazyslow()
{
//Moving door
for(pos = 60; pos > 0; pos -= 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 115; pos += 5)
{
handServo.write(pos);
delay(30);
}
//hiding hand
for(pos = 115; pos>=0; pos-=1)
{
handServo.write(pos);
delay(30);
}
//hiding door
for(pos = 0; pos<=20; pos+=1)
{
doorServo.write(pos);
delay(30);
}
delay(100);
for(pos = 20; pos<=80; pos+=4)
{
doorServo.write(pos);
delay(15);
}
}