Världens minsta Turbotryckmätare ?

Eftersom jag har lite kapacitet kvar på Arduinokortet för Hel och Halvljuset så blev det en liten tryckmätare.
Med en programsnutt ifrån Arduino.cc hemsida. Det enda jag behövde ändra var utgångarna.
0-5 volt ingång stämmer också perfekt för värdena ifrån MAP sensorn. 
Det enda jag ska föröka göra är att den visar peakvärdet och uppdaterar den 1ggr/sek.

(Dioden högst upp visar när Halvljus-automatiken har tänt halvljuset.)

1 diod = -0,75 bar
4 dioder = 0 bar
6 dioder = 0,5 bar
8 dioder = 1 bar
9 dioder = 1,25 bar


2015-04: Ändrat i mjukvara så att tiden nollas så länge maxtrycket uppdateras
Det innebär att maxtrycket visas i 10sek. efter att det uppnåtts.
Vet inte varför jag inte gjort den här förändringen tidigare....

Koden med Max. visning i 10 sek.:

// these constants won't change:
const int analogPin = A0;   // the pin that the potentiometer is attached to
const int ledCount = 10;    // the number of LEDs in the bar graph 
int ledMax = 0;
long previousMillis = 0;
long interval = 10000;           // interval at which to blink (milliseconds)

    int ledPins[] = {
      4, 5, 6, 7,8,9,10,11,12,13 };   // TURBO an array of pin numbers to which LEDs are attached
void setup() {
  // TURBO loop over the pin array and set them all to output:
   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
     pinMode(ledPins[thisLed], OUTPUT);
  }       //diodtest snurra
      for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      digitalWrite(ledPins[thisLed], HIGH);
      delay(100);   
      digitalWrite(ledPins[thisLed], LOW);
  }
}
void loop() {
 //  TURBO tryckmätaren
    unsigned long currentMillis = millis();   // flyttad 2015-04  
int sensorReading = analogRead(analogPin);  // 0-5 volt
   // mapsensor värden: 0,75bar=3,3volt ; 0,5=2,8; 0,25=2,4; 0=1,9; -0,5=0,95; -0,75=0,48
   int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
      if (ledLevel > ledMax) {
          ledMax = ledLevel;     // läser av maxvärdet  flyttad 20115-04
          ledMax = ledLevel;   } 
/*
      Alt. om den bara skall visa en diod för aktuellt tryck.
 for (int thisLed = 0; thisLed < ledCount; thisLed++) {    // loop over the LED array:
       digitalWrite(ledPins[thisLed], LOW);     // släcker alla dioder
       digitalWrite(ledPins[ledLevel], HIGH);  //tänder bara den dioden för aktuellt värde
       digitalWrite(ledPins[ledMax-1], HIGH);  // visar max nivån under en viss tid.
    */
  // loop over the LED array:
   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
     if (thisLed > sensorReading) {
       ledMax == ledLevel;
     }// if the array element's index is less than ledLevel,
     // turn the pin for this element on:
     if (thisLed < ledLevel) {
       digitalWrite(ledPins[thisLed], HIGH);
      digitalWrite(ledPins[ledMax], HIGH);
     }    
      // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[ledMax-1], HIGH);
      digitalWrite(ledPins[thisLed], LOW);
    }
      // flyttad unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > interval) {
     // save the last time you blinked the LED
    // flyttad previousMillis = currentMillis;  
    ledMax = 0;
     }
  }
}

Inga kommentarer:

Skicka en kommentar