ho provato anche ad inserire un ciclo for ma continua a ripeterlo da 0 a speed senza interrompersi mentre vorrei che una volta arrivato a speed mantenesse la velocità
#define dir_1 46
#define pwm_1 3
#define dir_2 47
#define pwm_2 2
#define ant1 23
#define post1 22
int val1 = 0;
int vval1 = 0; //PWMMAX 256
int val3 = 0;
int vval3 = 0;
int stato1 = 0;
byte speed = 80;
int pwm_value=0;
void setup() {
Serial.begin(9600);
pinMode(ant1, INPUT);
pinMode(post1, INPUT);
pinMode(pwm_1,OUTPUT);
pinMode(dir_1,OUTPUT);
pinMode(pwm_2,OUTPUT);
pinMode(dir_2,OUTPUT);
}
void loop() {
val1 = digitalRead(ant1);
val3 = digitalRead (post1);
//SWITCH1
if ((val1 == HIGH) && (vval1 == LOW)){
stato1 = 1 - stato1;
// attesa di 15 millisecondi
}
vval1 = val1; // ricordiamo il valore precedente di val
if (stato1 == 1) {
for (pwm_value=0; pwm_value<speed; pwm_value=pwm_value+5){
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,pwm_value);
analogWrite(pwm_1,pwm_value);
delay(100);
}
digitalWrite(dir_1,LOW);
digitalWrite(dir_2,HIGH);
analogWrite(pwm_1,speed);
analogWrite(pwm_2,speed);
}
else {
digitalWrite(dir_1,HIGH);
digitalWrite(dir_2,LOW);
analogWrite(pwm_1,speed);
analogWrite(pwm_2,speed);
}
//SWITCH3
if ((val3 == HIGH) && (vval3 == LOW)){
stato1 = 1 - stato1;
// attesa di 15 millisecondi
}
vval3 = val3; // ricordiamo il valore precedente di val
if (stato1 == 1) {
digitalWrite(dir_1,LOW);
digitalWrite(dir_2,HIGH);
analogWrite(pwm_1,speed);
analogWrite(pwm_2,speed);
}
else {
digitalWrite(dir_1,HIGH);
digitalWrite(dir_2,LOW);
analogWrite(pwm_1,speed);
analogWrite(pwm_2,speed);
}
}