but the motor now only goes forward instead of 1sec forward,1sec backwards then waiting 1.8sec before resuming
To help you control the transitions in the operating states, it will be helpful to add some boolean control variables. See if this doesn't give you some ideas to work with.
boolean forward = false;
boolean backward = false;
boolean stopt = false;
Then the initial state and the start time will be set when the condition is called with the button click function
void RuitenwisserInterval()
{
//Alle loops uit zodat er tijdens dat er een andere loop gedaan wordt er zonder
//op de alles uit knop gedrukt kan worden gewisseld kan worden
buttonAllesUitstatus = LOW;
buttonXmaalsnellerstatus = LOW;
buttonSnelheid1status = LOW;
//Start loop voor interval
buttonIntervalstatus = HIGH;
Serial.println("Ruitenwisser gaat met een interval aan");
startMillis = millis();//add intial start time
forward = true;
}
Then the forward/backward/stopt variables will control the timing in the enabled block.
if (buttonIntervalstatus == HIGH) //intial start time and state and was set before entry
{
if (forward == true)
{
digitalWrite(Hbrugaan, HIGH); // zet de H-brug aan
analogWrite(MototAchteruit, 0);
analogWrite(MotorVoorruit, Power);
}
if (forward == true and currentMillis - startMillis > aan )
{
forward = false;
backward = true;
//startMillis = millis();
//motor beweegt achteruit
analogWrite(MotorVoorruit, 0);
analogWrite(MototAchteruit, Power);
}
if (backward == true and currentMillis - startMillis > 2 * aan)
{
backward = false;
stopt = true;
analogWrite(MotorVoorruit, 0);
analogWrite(MototAchteruit, 0);
digitalWrite(Hbrugaan, LOW);
}
if (stopt == true and currentMillis - startMillis > (2 * aan) + wacht)
{
stopt = false;
forward = true;
startMillis = millis();
}
buttonAllesUit.tick();
buttonInterval.tick();
buttonXmaalsneller.tick();
buttonSnelheid1.tick();
delay(10);
}
//Onebuttons aanmaken
#include "OneButton.h" //roept de OneButton library aan zodat deze gebruikt kan worden
OneButton buttonAllesUit(9, true); // OneButton variabelenaam(pinnummer,aan of uit)
OneButton buttonInterval(8, true);
OneButton buttonXmaalsneller(12, true);
OneButton buttonSnelheid1(13, true);
// Constantes
const int Hbrugaan = 2;
const int MotorVoorruit = 10;
const int MototAchteruit = 11;
const unsigned long aan = 1000;
const unsigned long wacht = 1800;
// Variabelen
int Power = 62; //snelheid waarmee de motor rond draait
int buttonAllesUitstatus = 0;
int buttonIntervalstatus = 0;
int buttonXmaalsnellerstatus = 0;
int buttonSnelheid1status = 0;
unsigned long startMillis;
unsigned long currentMillis;
//operating states
boolean forward = false;
boolean backward = false;
boolean stopt = false;
void setup()
{
//Input en output aangeven
pinMode(MotorVoorruit, OUTPUT);
pinMode(MototAchteruit, OUTPUT);
pinMode(Hbrugaan, OUTPUT);
startMillis = millis();//slaat de start tijd op
//Knoppen binnden aan externe functies
buttonAllesUit.attachClick(RuitenwisserUit);
buttonInterval.attachClick(RuitenwisserInterval);
buttonXmaalsneller.attachClick(RuitenwisserXmaalSneller);
buttonSnelheid1.attachClick(RuitenwisserSnelheid1);
Serial.begin(9600);
}
void loop()
{
currentMillis = millis(); //de tijd op dit moment(tijd vanaf het begin van programma)
//controlleert de status van de knoppen
buttonAllesUit.tick();
buttonInterval.tick();
buttonXmaalsneller.tick();
buttonSnelheid1.tick();
delay(10);
//Ruitenwisser met interval code
if (buttonIntervalstatus == HIGH) //intial start time and was set before entry
{
if (forward == true)
{
digitalWrite(Hbrugaan, HIGH); // zet de H-brug aan
analogWrite(MototAchteruit, 0);
analogWrite(MotorVoorruit, Power);
}
if (forward == true and currentMillis - startMillis > aan )
{
forward = false;
backward = true;
//startMillis = millis();
//motor beweegt achteruit
analogWrite(MotorVoorruit, 0);
analogWrite(MototAchteruit, Power);
}
if (backward == true and currentMillis - startMillis > 2 * aan)
{
backward = false;
stopt = true;
analogWrite(MotorVoorruit, 0);
analogWrite(MototAchteruit, 0);
digitalWrite(Hbrugaan, LOW);
}
if (stopt == true and currentMillis - startMillis > (2 * aan) + wacht)
{
stopt = false;
forward = true;
startMillis = millis();
}
buttonAllesUit.tick();
buttonInterval.tick();
buttonXmaalsneller.tick();
buttonSnelheid1.tick();
delay(10);
}
else {
analogWrite(MotorVoorruit, 0);
analogWrite(MototAchteruit, 0);
digitalWrite(Hbrugaan, LOW);
}
}
void RuitenwisserInterval()
{
//Alle loops uit zodat er tijdens dat er een andere loop gedaan wordt er zonder
//op de alles uit knop gedrukt kan worden gewisseld kan worden
buttonAllesUitstatus = LOW;
buttonXmaalsnellerstatus = LOW;
buttonSnelheid1status = LOW;
//Start loop voor interval
buttonIntervalstatus = HIGH;
Serial.println("Ruitenwisser gaat met een interval aan");
startMillis = millis();//add intial start time
forward = true;
}
void RuitenwisserUit()
{
buttonIntervalstatus = LOW;
buttonAllesUitstatus = HIGH;
buttonXmaalsnellerstatus = LOW;
buttonSnelheid1status = LOW;
Serial.println("Ruitenwisser staat nu uit");
}
void RuitenwisserXmaalSneller()
{
buttonAllesUitstatus = LOW;
buttonSnelheid1status = LOW;
buttonIntervalstatus = LOW;
buttonXmaalsnellerstatus = HIGH;
Serial.println("Ruitenwisser gaat nu op en neer maar dan 4.1x zo snel ");
}
void RuitenwisserSnelheid1()
{
buttonAllesUitstatus = LOW;
buttonXmaalsnellerstatus = LOW;
buttonIntervalstatus = LOW;
buttonSnelheid1status = HIGH;
Serial.println("Ruitenwisser gaat nu op en neer met snelheid 1");
}