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