// Version for ESP8266
int P_FET_Q1 = 4; //D2
int N_FET_Q4 = 0; //D3
int P_FET_Q3 = 13; // D7
int N_FET_Q2 = 15; // D8
const int switch1 = 5; //7
int switchval1 = 1;
unsigned long previousMillis = 0; // will store last time updated
const long interval = 2000; // interval at which to run muss 15000 sein
bool clockwiseval = true;
void setup() {
Serial.begin(115200);
pinMode(switch1, INPUT);
pinMode(P_FET_Q1, OUTPUT); //der linke Mosfet oben
pinMode(N_FET_Q2, OUTPUT); //der linke Mosfet unten
pinMode(P_FET_Q3, OUTPUT); //der rechte Mosfet oben
pinMode(N_FET_Q4, OUTPUT); //der rechte Mosfet unten
}
void loop() {
switchval1 = digitalRead(switch1);
// Serial.println(switchval1);
counterclockwise();
clockwise();
if ( switchval1 == 0 ) {
Serial.println("Switch 1 aktiviert");
}
}
void counterclockwise()
{
if ( switchval1 != 0) {
digitalWrite(N_FET_Q4, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q1, LOW);
//delay(1000);
digitalWrite(N_FET_Q2, HIGH); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q3, HIGH);
// delay(4000);
}
else
{
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
clockwiseval = false;
}
}
void clockwise()
{
if (clockwiseval == false) {
unsigned long currentMillis = millis();
// save the last time you blinked the LED
// if ((currentMillis - previousMillis) > interval) {
if (currentMillis - previousMillis <= interval) {
Serial.println("clockwise while started");
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
//delay(1000);
digitalWrite(N_FET_Q4, HIGH); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q1, HIGH);
// delay(4000);
previousMillis = currentMillis;
}
else
{
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
digitalWrite(N_FET_Q4, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q1, LOW);
Serial.println("clockwise end");
clockwiseval = true;
}
}
}
as soon as I activate the switch it should go to clockwise() to move the DC motor clockwise for to seconds (interval).
I have some mistake in this code. It just execute this part as soon as the switch is activated and not for just 2 seconds...
The reason it doesn't stop after 2 seconds is because you are setting previousMillis to currentMillis every time and therefore you never execute the else code block. You should set previousMillis when you read the switch. Try the following version. I couldn't compile or test myself.
// Version for ESP8266
int P_FET_Q1 = 4; //D2
int N_FET_Q4 = 0; //D3
int P_FET_Q3 = 13; // D7
int N_FET_Q2 = 15; // D8
const int switch1 = 5; //7
int switchval1 = 1;
unsigned long previousMillis = 0; // will store last time updated
const long interval = 2000; // interval at which to run muss 15000 sein
bool clockwiseval = true;
void setup() {
Serial.begin(115200);
pinMode(switch1, INPUT);
pinMode(P_FET_Q1, OUTPUT); //der linke Mosfet oben
pinMode(N_FET_Q2, OUTPUT); //der linke Mosfet unten
pinMode(P_FET_Q3, OUTPUT); //der rechte Mosfet oben
pinMode(N_FET_Q4, OUTPUT); //der rechte Mosfet unten
}
void loop() {
switchval1 = digitalRead(switch1);
// Serial.println(switchval1);
counterclockwise();
clockwise();
if ( switchval1 == 0 ) {
Serial.println("Switch 1 aktiviert");
}
}
void counterclockwise()
{
if ( switchval1 != 0) {
digitalWrite(N_FET_Q4, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q1, LOW);
//delay(1000);
digitalWrite(N_FET_Q2, HIGH); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q3, HIGH);
// delay(4000);
}
else
{
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
clockwiseval = false;
previousMillis = millis();
}
}
void clockwise()
{
if (clockwiseval == false) {
unsigned long currentMillis = millis();
// save the last time you blinked the LED
// if ((currentMillis - previousMillis) > interval) {
if (currentMillis - previousMillis <= interval) {
Serial.println("clockwise while started");
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
//delay(1000);
digitalWrite(N_FET_Q4, HIGH); //beide Mosfets von aktionsbereich 2 werden deaktiviert
digitalWrite(P_FET_Q1, HIGH);
// delay(4000);
}
else
{
digitalWrite(N_FET_Q2, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q3, LOW);
digitalWrite(N_FET_Q4, LOW); //beide Mosfets von aktionsbereich 1 werden deaktiviert
digitalWrite(P_FET_Q1, LOW);
Serial.println("clockwise end");
clockwiseval = true;
}
}
}
Most switches will be connected or not. When not connected the input is floating unless there is a pull up or pull down resistor. I believe on the ESP8266 you can use pin mode INPUT_PULLUP to enable the internal pullup resistor then you won't need an external resistor. However, I'm not an ESP8266 expert.