//###################################################################################
// Programma di attivazione uscita digitale in base alla frequenza ingresso onda quadra
// includo libreria comunicazione seriale
#include <SPI.h>
// Dichiaro i pin
int outputled = 13;
int inputSensor = 7;
int outpucCsPot = 6;
// dichiaro variabili frequenza
unsigned long frequenza;
unsigned long numeroGiri;
byte posizionePotenziometro = 0; //valore decimale da 0 a 128
//byte posizionePotenziometroKm = 0; //valore decimale da 0 a 128 - Opzionale
void setup()
{
// attivo il led della scheda per segnalare l’attivazione
pinMode(outputled, OUTPUT);
digitalWrite(outputled, HIGH);
// setto il pin contagiri come input
pinMode(inputSensor, INPUT);
// setto il pin di attivazione modifiche potenziometro come output
pinMode(outpucCsPot, OUTPUT);
// metto alto il pin di att. Modifiche pot. Per disattivarle
digitalWrite(outpucCsPot, HIGH);
//Inizializzo la libreria SPI
SPI.begin();
//Inizializzo la porta seriale
Serial.begin(9600);
}
void loop()
{
// Leggo frequenza d’ingresso
frequenza = pulseIn(inputSensor, HIGH);
// calcolo il numero dei giri/minuto
numeroGiri = frequenza*120/4
// Imposto in base alla frequenza le uscite corrette
posizionePotenziometro = 0 // di default 0 per valori fuori scala
// Opzionale contakm resistivo
// Calcolo posizione secondo potenziometro contakm automaticamente
// Formula utilizzata= N°Step potenziometro : Hz massimi * frequenza istantanea
//posizionePotenziometroKm = 0.27428571428*frequenza
If ((numeroGiri > 0) && (numeroGiri <= 250 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 250) && (numeroGiri <= 500 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 500) && (numeroGiri <= 1000 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 1000) && (numeroGiri <= 1500 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 1500) && (numeroGiri <= 2000 )){
posizionePotenziometro = 14
}
If ((numeroGiri > 2000) && (numeroGiri <= 2500 )){
posizionePotenziometro = 52
}
If ((numeroGiri > 2500) && (numeroGiri <= 3000 )){
posizionePotenziometro = 35
}
If ((numeroGiri > 3000) && (numeroGiri <= 3500 )){
posizionePotenziometro = 32
}
If ((numeroGiri > 3500) && (numeroGiri <= 4000 )){
posizionePotenziometro = 43
}
If ((numeroGiri > 4000) && (numeroGiri <= 4500 )){
posizionePotenziometro = 21
}
If ((numeroGiri > 4500) && (numeroGiri <= 5000 )){
posizionePotenziometro = 21
}
If ((numeroGiri > 5000) && (numeroGiri <= 5500 )){
posizionePotenziometro = 28
}
If ((numeroGiri > 5500) && (numeroGiri <= 6000 )){
posizionePotenziometro = 22
}
If ((numeroGiri > 6000) && (numeroGiri <= 6500 )){
posizionePotenziometro = 12
}
If ((numeroGiri > 6500) && (numeroGiri <= 7000 )){
posizionePotenziometro = 21
}
If ((numeroGiri > 7000) && (numeroGiri <= 7500 )){
posizionePotenziometro = 23
}
If ((numeroGiri > 7500) && (numeroGiri <= 8000 )){
posizionePotenziometro = 27
}
If ((numeroGiri > 8000) && (numeroGiri <= 8500 )){
posizionePotenziometro = 22
}
If ((numeroGiri > 8500) && (numeroGiri <= 9000 )){
posizionePotenziometro = 20
}
If ((numeroGiri > 9000) && (numeroGiri <= 9500 )){
posizionePotenziometro = 20
}
If ((numeroGiri > 9500) && (numeroGiri <= 10000 )){
posizionePotenziometro = 21
}
If ((numeroGiri > 10000) && (numeroGiri <= 10500 )){
posizionePotenziometro = 18
}
If ((numeroGiri > 10500) && (numeroGiri <= 11000 )){
posizionePotenziometro = 11
}
If ((numeroGiri > 11000) && (numeroGiri <= 11500 )){
posizionePotenziometro = 16
}
If ((numeroGiri > 11500) && (numeroGiri <= 12000 )){
posizionePotenziometro = 14
}
If ((numeroGiri > 12000) && (numeroGiri <= 12500 )){
posizionePotenziometro = 15
}
If ((numeroGiri > 12500) && (numeroGiri <= 13000 )){
posizionePotenziometro = 12
}
If ((numeroGiri > 13000) && (numeroGiri <= 13500 )){
posizionePotenziometro = 12
}
If ((numeroGiri > 13500) && (numeroGiri <= 14000 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 14000) && (numeroGiri <= 14500 )){
posizionePotenziometro = 0
}
If ((numeroGiri > 14500) && (numeroGiri <= 15000 )){
posizionePotenziometro = 0
}
digitalWrite(outpucCsPot, LOW);
//Invio il primo byte per eseguire una scrittura sul registro Wiper
SPI.transfer(0);
//Invio il valore della posizione dello Wiper valori da 00H a 80H (0-128 in decimale)
SPI.transfer(posizionePotenziometro);
digitalWrite(outpucCsPot, HIGH);
}
//###################################################################################