buongiorno
da poco più di due settimane ho acquistato la mia prima scheda arduino uno rev3
premetto che sono partito da 0 con la programmazione software, non avevo mai fatto niente di simile prima
in ogni caso essendo io un meccanico mi piacerebbe riuscire a creare per iniziare una centralina di accensione motore, e poi magari aggiungere gestione iniettori eccetera
per il momento ho attaccato una piccola calamita a una ventola per pc che leggo con un sensore di hall, e in corrispondenza della calamita c'è un piccolo adesivo bianco su una pala che viene illuminato dal led ad alta luminosità creando in questo modo una luce stroboscopica, io posso capire se il led viene acceso al momento giusto perchè vedo il piccolo adesivo, se anticipo o ritardo lo vedo spostarsi
con davvero tanti sforzi sono riuscito a creare questo codice (ho provato un sacco di soluzioni ma come ho detto per me è veramente materia sconosciuta)
con il codice sotto sfrutto il fatto che pulsein blocca il codice per il tempo della misurazione della calamita, poi me lo sblocca (e io interpreto la fine della calamita come puntozero per il mio ritardo), io faccio i mieie calcoli, attendo il tempo che devo attendere e accendo il led (so che la calamita è 50 gradi da misurazioni precedenti confrontanto la durata di pulsein low e di pulsein high)
ora io per attendere uso i delay perchè non riesco assolutamente a usare micros in modo che non funzionino, qualcuno può aiutarmi?
so che il codice fa pena probabilmente ma devo imparare
int hall = 2 ;
int ledpin=13;int durataon=100;
int gradidente=50;unsigned long misuradente;
void setup( )
{
Serial.begin(9600);
pinMode(hall, INPUT);
pinMode(ledpin, OUTPUT);}
void loop( )
{misuradente = pulseIn(hall, LOW);
long tgiro= (misuradente/gradidente)*360;
long rpm=(1000000/tgiro)*60;
int gradiritardo=map(rpm, 600, 2000, 5, 20);
int ritardo=(tgiro/360)*gradiritardo;delayMicroseconds(ritardo);
digitalWrite(ledpin, HIGH);
delayMicroseconds(durataon);digitalWrite(ledpin, LOW);
Serial.print("rpm ");
Serial.print(rpm);
Serial.print(" / ");
Serial.print("ritardo ");
Serial.println(gradiritardo);}