const int I_SX = 6; // Pin collegato al lato sinistro dell'interruttore
const int I_DX = 7; // Pin collegato al lato destro dell'interruttore
const int Pot = A0; // Pin del potenziometro
const int R_PWM = 3; // Controlla velocità verso destra (PWM)
const int L_PWM = 5; // Controlla velocità verso sinistra (PWM)
const int R_EN = 2; // Abilita direzione destra
const int L_EN = 4; // Abilita direzione sinistra
const float coeff = 40.14; // Coefficiente per calcolo RPM
void setup() {
pinMode(I_SX, INPUT_PULLUP);
pinMode(I_DX, INPUT_PULLUP);
pinMode(R_EN, OUTPUT);
pinMode(L_EN, OUTPUT);
pinMode(R_PWM , OUTPUT);
pinMode(L_PWM, OUTPUT);
digitalWrite(R_EN, HIGH);
digitalWrite(L_EN, HIGH);
Serial.begin(115200);
}
void loop() {
bool sinistra = !digitalRead(I_SX); // Invertiamo perché il pull-up rende HIGH di default
bool destra = !digitalRead(I_DX); // Invertiamo perché il pull-up rende HIGH di default
int potValue = analogRead(Pot);
int motorSpeed = map(potValue, 0, 1023, 0, 255); // Mappa il valore del potenziometro a un valore PWM
int rpm = motorSpeed * coeff; // Calcolo degli RPM
if (sinistra) {
analogWrite(R_PWM , 0); // Assicuriamoci che RPWM sia spento
analogWrite(L_PWM, motorSpeed);
}
else if (destra) {
analogWrite(L_PWM, 0); // Assicuriamoci che LPWM sia spento
analogWrite(R_PWM , motorSpeed);
}
else {
analogWrite(R_PWM , 0);
analogWrite(L_PWM, 0);
rpm = 0; // Se il motore è fermo, gli RPM sono zero
}
Serial.print("Sx: "); Serial.print(sinistra);
Serial.print(" - Dx: "); Serial.print(destra);
Serial.print(" - Vel: "); Serial.print(motorSpeed);
Serial.print(" - RPM: "); Serial.println(rpm);
delay(100);
} |