This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Allarmi vari temperature e pressioni
Grazie di nuovo :chessygrin:.

Ho dato un'occhiata a come usarla, ma credo che non faccia al caso mio perché non riesco a inserirla "a interrupt".
Mi spiego meglio: la rilevazione dei giri deve essere asincrona rispetto al resto del programma, perchè il task principale è quello di "accendere luci" e non posso bloccare in attesa di input.

Ecco qualche estratto (setup, loop e funzione interrupt).

[CODE]void setup() {
//Setup Seriale : per leggere via USB cosa succede
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

//Imposto ingressi e uscite
pinMode(H2O_IN, INPUT);
pinMode(OIL_IN, INPUT);
pinMode(RPM_IN, INPUT);
pinMode(FAULT, OUTPUT);
pinMode(OIL_G, OUTPUT);
pinMode(OIL_R, OUTPUT);
pinMode(RPM_Y, OUTPUT);
pinMode(RPM_R, OUTPUT);
pinMode(H2O_G, OUTPUT);
pinMode(H2O_R, OUTPUT);


//Mi assicuro che non ci sia pullup sugli ingressi analogici
digitalWrite(H2O_IN,LOW);
digitalWrite(OIL_IN,LOW);

// Attach interrupt
attachInterrupt(1, rpm_count, RISING);
}


void loop() {
resetLed(); // Tutti a LOW


H2O_TEMP = analogRead(H2O_IN); //Leggo sensore temperatura acqua
delay(50); //Per evitare Jitter sul pin di fianco
OIL_PRES = analogRead(OIL_IN); //Leggo sensore pressione olio
updateRPM(); //Aggiorno la media delle ultime 5 letture


//Accendo e spengo i led di output
updatedisplay();


delay(50);
}


void updateRPM() {
noInterrupts(); //precauzionale: così time non cambia valore durante il calcolo di RPM
if(time > 0)
{
//Medio 5 letture per normalizzare la lettura
rpm_array[0] = rpm_array[1];
rpm_array[1] = rpm_array[2];
rpm_array[2] = rpm_array[3];
rpm_array[3] = rpm_array[4];
rpm_array[4] = 60*(1000000/time); //time è il periodo in micros(): qui lo converto in frequenza e in minuti
//Media delle ultime 5 letture
RPM = (rpm_array[0] + rpm_array[1] + rpm_array[2] + rpm_array[3] + rpm_array[4]) / 5;
}
interrupts();
}



//RPM interrupt function
void rpm_count() {
time = (micros() - time_last);
time_last = micros();
}
[/CODE]

Confusedmiley:
La Gatta : 2003 NBFL 1.8 Sport http://www.mx5italia.com/showthread.php?19520-La-Gatta
Team Ciocapiàt pResident Evil

Bisso Ha scritto:se poi si arriva a fare il solito discorso: "ne vale la pena?" non se ne viene più fuori...
l'importante è pensare bene a cosa si fa, a cosa si vuole fare e a cosa si vuole ottenere...
  Cita messaggio


Messaggi in questa discussione
Allarmi vari temperature e pressioni - da fracrist - 21-01-2013, 13:54
Allarmi vari temperature e pressioni - da MaD - 23-01-2013, 13:20
Allarmi vari temperature e pressioni - da MaD - 23-01-2013, 13:37
Allarmi vari temperature e pressioni - da MaD - 23-01-2013, 14:35

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [NA] Strumenti Temperature liquidi Pee Tee 11 6,028 10-11-2017, 22:13
Ultimo messaggio: Pee Tee
  Rimappatura Centralina dopo vari lavoretti.... :) Giova636 18 2,977 12-05-2013, 23:35
Ultimo messaggio: Giova636
  sostituire Parrot CK3100 con MKI9100. Dubbi vari... jeby 5 6,802 30-09-2011, 08:58
Ultimo messaggio: FoggyZ
  pulsanti e connettori vari sotto al volante yuza 15 3,885 28-09-2011, 15:35
Ultimo messaggio: yellowmiatait
  radio rubata e connettori vari ratto 7 2,558 17-07-2010, 21:54
Ultimo messaggio: nippe



Utenti che stanno guardando questa discussione: 1 Ospite(i)