// Definizione dei pin
//#define SENSOR_PIN 2 // Pin collegato al sensore della ruota fonica
// Variabili globali
volatile unsigned long impulsi = 0;
unsigned long tempoPrecedente = 0;
const float cmPerImpulso = 870.0; // cm ad impulso
const int pinPWM = 5; // Pin PWM
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(pinPWM, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), contaImpulsi, RISING);
}
void loop() {
unsigned long tempoAttuale = millis();
if (tempoAttuale - tempoPrecedente >= 100) { // Calcola la velocità ogni 0,1 secondi
detachInterrupt(digitalPinToInterrupt(2));
float velocità = (impulsi * cmPerImpulso) / 10.0; // Converti cm/s a m/s
velocità = velocità * 0.036; // Converti cm/s a km/h (1 cm/s = 0.036 km/h)
Serial.print("Velocità: ");
Serial.print(velocità);
Serial.println(" km/h");
// Mappa la velocità da 0-250 km/h a 0-255 (valore PWM)
//int valorePWM = map(velocità, 0, 250, 0, 255);
int valorePWM = map(velocità, 0, 6, 0, 255);
analogWrite(pinPWM, valorePWM);
impulsi = 0;
tempoPrecedente = tempoAttuale;
attachInterrupt(digitalPinToInterrupt(2), contaImpulsi, RISING);
}
}
void contaImpulsi() {
impulsi++;
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6