I have this following code for arduino robot and I want to program a button sensor. As you can see in the code the button sensor is connected to buttonPin = 12
so I want the robot to work when I press that button and stop when I press it again ( like a switch).
the code:
//Light seeker code
// connect motor controller pins to Arduino digital pins
// motor one
const int forcePin = A4;
const int buttonPin = 12;
int enA = 9;
int in1 = 2;
int in2 = 3;
// motor two
int enB = 10;
int in3 = 5;
int in4 = 4;
int sensorPin1 = A3;
int sensorPin2 = A1;
int sensorPinback = A5;
void setup()
{
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPinback, INPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void demoOne()
{
// this function will run the motors in both directions at a fixed speed
// turn on motor A
int reading1 = analogRead(sensorPin1);
reading1 = map(reading1, 1000, 300, 60, 255);
reading1 = constrain(reading1, 60, 200);
int reading2 = analogRead(sensorPin2);
reading2 = map(reading2, 1000 , 300, 60, 255);
reading2 = constrain(reading2, 60, 200);
// print value to Serial monitor
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enA, reading1);
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enB, reading2);
delay(100);
// now change motor directions
}
void demoThree()
{
// this function will run the motors in both directions at a fixed speed
// turn on motor A
int reading1 = analogRead(sensorPin1);
int reading2 = analogRead(sensorPin2);
int reading3 = analogRead(sensorPinback);
if(reading3<reading2 && reading3<reading1)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enA, 200);
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// set speed to 200 out of possible range 0~255
analogWrite(enB, 200);
delay(700);
}
}
void bumpsensor()
{
int reading3 = analogRead(forcePin);
if(reading3>20)
{
Serial.println(reading3); //Print value
// print value to Serial monitor
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// set speed to 200 out of possible range 0~255
analogWrite(enA, 150);
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// set speed to 200 out of possible range 0~255
analogWrite(enB, 150);
delay(3000);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(700);
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
}
}
void loop()
{
int reading1 = analogRead(sensorPin1);
int reading2 = analogRead(sensorPin2);
while(reading1>100 && reading2>100)
{
demoOne();
demoThree();
bumpsensor();
}
}