Timing Circuit/Code for motor/relay control

I made this to workk like if I plug the brown cable, a transistor will give me 12V for 5 seconds even if i keep my cable plugged however when i remove back for some reason the transistor runs again I think it has something to do with the code but i cant figure out whats happening neither on google i find something similar.

The video corresponds to the 2nd IF statement

``````void setup() {

pinMode(5,INPUT);
pinMode(2,INPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
}

void loop() {
{
digitalWrite(3,HIGH);
delay(5000);
do{
digitalWrite(3,LOW);
}
{
digitalWrite(4,HIGH);
delay(5000);
do{
digitalWrite(4,LOW);
}

``````

Circuit:

You must add a resistor in series with the base of each transistor.

Try 220Ω

Wire your switches as S3 is wired in the image below then look for a LOW for a pushed switch.

Use:
pinMode(5,INPUT_PULLUP);
pinMode(2,INPUT_PULLUP);

I forgot to update that circuit, on video i was using 1K resistors of each base

In the Arduino IDE, use Ctrl T or CMD T to format your code then copy the complete sketch.

Use the </> icon from the ‘reply menu’ to attach the copied sketch.

This is the code with the S3 way of switching, but still do the same

``````void setup() {

pinMode(5, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}

void loop() {
{
digitalWrite(3, HIGH);
delay(5000);
do {
digitalWrite(3, LOW);
}
{
digitalWrite(4, HIGH);
delay(5000);
do {
digitalWrite(4, LOW);
}
}

``````

Let’s see your new schematic with the switches wired as S3.

Is the Arduino GND connected to the 12v GND ?

BTW, you should look for a change in the switch not the switches current level.

Yes the ground is all together.
So what is happening is: I "have" a switch like that (picture below), and I need to use it, and what he is going to do is control a dc Motor with time (5000ms in this case) if I put at I it will turn right, if I put II it will turn left, and as I need to use that button, I need to find a way to let him "pressed" at I or II but not turning.

Example:
OH i want to turn right so I put the button at I; then he will move during 5 seconds and stop even if the button is stuck at I

What do you mean?

Is the switch OFF in the center ?

Are you wired like this ?

The only difference is the 220Ohms resistors, I am using 1K

Try this:

``````// Version  YY/MM/DD  Description
// 1.0      21/05/23  Running sketch
//
//

#define OPEN             HIGH
#define CLOSED           LOW

#define MotorON          HIGH
#define MotorOFF         LOW

#define timingEnabled    true
#define timingDisabled   false

bool rightTimingFlag   = timingDisabled;
bool leftTimingFlag    = timingDisabled;

const byte leftSwitch  = 2;
const byte rightSwitch = 5;

const byte leftMotor   = 4;
const byte rightMotor  = 3;

byte lastLeft          = OPEN;
byte lastRight         = OPEN;

unsigned long commonMillis;

//**********************************************************************
void setup()
{
pinMode(rightSwitch, INPUT_PULLUP);
pinMode(leftSwitch, INPUT_PULLUP);

pinMode(rightMotor, OUTPUT);
pinMode(leftMotor, OUTPUT);

} //END of setup()

//**********************************************************************
void loop()
{
byte switchStatus;

//****************************************
if (rightTimingFlag == timingEnabled && millis() - commonMillis >= 5000)
{
//timing disabled
rightTimingFlag = timingDisabled;

//stop the right motor
digitalWrite(rightMotor, MotorOFF);
}

//****************************************
if (leftTimingFlag == timingEnabled && millis() - commonMillis >= 5000)
{
//timing disabled
leftTimingFlag = timingDisabled;

//stop the left motor
digitalWrite(leftMotor, MotorOFF);
}

//****************************************

//did the switch change state ?
if (lastRight != switchStatus)
{
//update to the new state
lastRight = switchStatus;

//if we are not timing, is the right switch pushed ?
if (rightTimingFlag == timingDisabled && leftTimingFlag == timingDisabled && switchStatus == CLOSED)
{
//start the right motor
digitalWrite(rightMotor, MotorON);

//enable TIMER
rightTimingFlag = timingEnabled;

//start the TIMER
commonMillis = millis();
}
}

//****************************************

//did the switch change state ?
if (lastLeft != switchStatus)
{
//update to the new state
lastLeft = switchStatus;

//if we are not timing, is the left switch pushed ?
if (leftTimingFlag == timingDisabled && rightTimingFlag == timingDisabled && switchStatus == CLOSED)
{
//start the right motor
digitalWrite(leftMotor, MotorON);

//enable TIMER
leftTimingFlag = timingEnabled;

//start the TIMER
commonMillis = millis();
}
}

}  //END of loop()

//**********************************************************************
``````

It is working like one time ok on time not ok