Salve! Riprendo questo topic poiché sono arrivato ad un buon punto con il mio programma ma, mi ritrovo con una problematica. Praticamente ho impostato un tempo di on fisso e tre tempi di off variabili da tre tasti, il tempo che io imposto dai tasti funziona quello che però dovrebbe essere costante non è il tempo che ho impostato io ma viene sommato al tempo di off lascio in allegato il codice per intero. Grazie.
#define MOTOR_PIN 9
#define BUTTON_PIN 5
#define POTENTIOMETER_PIN A0
#define BOOT_TIME 0
#define MOTOR_ON 8
#define Tasto_1 2
#define Tasto_2 3
#define Tasto_3 4
#define ON_TIME 1000
unsigned long MOTOR_OFF = 0;
int stato = HIGH;
long previousMills = 0;
bool enabled = false;
int lastEnableValue = LOW;
unsigned long startTime = 0;
void setup() {
pinMode(MOTOR_PIN, OUTPUT);
pinMode(MOTOR_ON, OUTPUT);
pinMode(Tasto_1, INPUT);
pinMode(Tasto_2, INPUT);
pinMode(Tasto_3, INPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
if (digitalRead(Tasto_1)) MOTOR_OFF = 1000;
else if (digitalRead(Tasto_2)) MOTOR_OFF = 2000;
else if (digitalRead(Tasto_3)) MOTOR_OFF = 3000;
if (((millis() - (previousMills)) > MOTOR_OFF) && (stato == LOW)) {
previousMills = millis();
stato = HIGH;
digitalWrite(MOTOR_ON, stato);
}
if (((millis() - (previousMills)) > ON_TIME) && (stato == HIGH)) {
previousMills = millis();
stato = LOW;
digitalWrite(MOTOR_ON, stato);
}
{
int enableValue = digitalRead(BUTTON_PIN);
if (enableValue != lastEnableValue && enableValue == HIGH) {
if (!enabled) {
startTime = millis();
}
enabled = !enabled;
}
lastEnableValue = enableValue;
if (enabled) {
if ((millis() - startTime) > BOOT_TIME) {
int motorSpeed = map(analogRead(POTENTIOMETER_PIN), 0, 1023, 70, 255);
analogWrite(MOTOR_PIN, motorSpeed);
} else {
analogWrite(MOTOR_PIN, 255);
}
} else {
analogWrite(MOTOR_PIN, 0);
}
delay(50);
}
}