Men - tanken slog rot och jag har just köpt en Arduino. Nu gäller det att plocka fram 40 år gamla programmeringskunskaper.
En enkel varvräknare får det bli till att börja med. Bara en rad lysdioder som visar några valda varvtal (marschvarv, maxvarv och några nivåer till).
Här är förslag på kod. Kommentarer mottages tacksamt:
Kod: Markera allt
/*
UNO board.
Takes rpm samples via ADC pin, and shows the value on LEDs.
*/
// revmeter, pulse input on pin 2 ----------------------------------------------
int ledR1 = 3; //the number of the pin red LED
int ledR2 = 4; //yellow
int ledR3 = 5; //green
int ledR4 = 6; //green
int ledR5 = 7; //green
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
unsigned long result = 0;
int pin13 = 13;
void setup()
{
// revmeter setup --------------------------------------------------------------------
pinMode(ledR1, OUTPUT); //LED array
pinMode(ledR2, OUTPUT);
pinMode(ledR3, OUTPUT);
pinMode(ledR4, OUTPUT);
pinMode(ledR5, OUTPUT);
attachInterrupt (0, inputPulse, RISING); //pulse imput from rev sensor
}
void loop()
{
// revmeter loop ------------------------------------------------------------
if (result > (60000 / 2500)) //2500 rpm (max rpm)
digitalWrite(ledR1, HIGH);
else
digitalWrite(ledR1, LOW);
if (result > (60000 / 2000)) //2000 rpm (cruising speed)
digitalWrite(ledR2, HIGH);
else
digitalWrite(ledR2, LOW);
if (result > (60000 / 1500)) //1500 rpm
digitalWrite(ledR3, HIGH);
else
digitalWrite(ledR3, LOW);
if (result > (60000 / 1000)) //1000 rpm
digitalWrite(ledR4, HIGH);
else
digitalWrite(ledR4, LOW);
if (result > (60000 / 700)) //700 rpm (idle)
digitalWrite(ledR5, HIGH);
else
digitalWrite(ledR5, LOW);
}
// revmeter interrupt ----------------------------------------------------------
void inputPulse()
{
currentMillis = millis(); //read millis
result = currentMillis - previousMillis; //calculate time
previousMillis = currentMillis; //save last pulse and prepare for next pulse
}