Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Arduino-based Boost Gauge v3
- // Uses a SSCDRRN030PDAA5 Honeywell Pressure Sensor connected to an Arduino Uno
- #include <LiquidTWI.h>
- #include <Wire.h>
- int analogInPin = A0; // Analog input pin that the sensor is attached to
- int sensorValue = 0; // value read from the sensor
- int boost = 0; // boost value in psi
- int boostgraph = 0; // boost graph value
- int calibrationint = 124; // map boost to ECU MAP sensor
- int maxvalue = 0; //peak boost encountered since last reset
- int minvalue = 0; //peak vacuum encountered since last reset
- boolean minmax = false; //flag for boost graph or max and min boost
- // Connect via i2c, default address #0 (A0-A2 not jumpered)
- LiquidTWI lcd(0);
- void setup() {
- // set up the LCD's number of columns and rows:
- lcd.begin(16, 2);
- // initialize the serial communications:
- Serial.begin(9600);
- }
- void loop() {
- //backlight on
- lcd.setBacklight(HIGH);
- // read the analog-in value:
- sensorValue = analogRead(analogInPin);
- // map sensorValue to boost with calibration
- boost = map(sensorValue, 0, 1023, -3000, 3000) * calibrationint / 1000;
- // create boost bar graph value
- if (boost < 0) {
- boostgraph = map(boost, -150, 0, 0, 7);
- }
- else {
- boostgraph = map(boost, 0, 200, 7, 15);
- }
- // compute max and min
- if (max(maxvalue, boost) > maxvalue) {
- maxvalue = boost;
- }
- if (min(minvalue, boost) < minvalue) {
- minvalue = boost;
- }
- //set cursor and print first line to LCD, keeping decimal point in same place
- lcd.setCursor(0, 0);
- if (boost > 150) {
- lcd.print(" WARNING!!! ");
- lcd.setCursor(0,1);
- lcd.print("DANGERTOMANIFOLD");
- }
- else {
- lcd.print("Boost:");
- if (boost < -99) {
- lcd.print("");
- }
- else if (boost < 0) {
- lcd.print(" ");
- }
- else if (boost < 100) {
- lcd.print(" ");
- }
- else {
- lcd.print(" ");
- }
- lcd.print(boost / 10);
- lcd.print(".");
- int deci = boost % 10;
- lcd.print(abs(deci));
- lcd.print(" psi "); //extra space to clear any extra characters
- // set cursor to second line on LCD
- lcd.setCursor(0,1);
- if (minmax == true) {
- // print max and min boost
- lcd.print(maxvalue / 10);
- lcd.print(".");
- int maxdeci = maxvalue % 10;
- lcd.print(abs(maxdeci));
- lcd.print(", ");
- lcd.print(minvalue / 10);
- lcd.print(".");
- int mindeci = minvalue % 10;
- lcd.print(abs(mindeci));
- lcd.print(" "); // extra space to clear any extra characters
- }
- else {
- // print boost graph
- for (int cursorpos = 0; cursorpos < boostgraph; cursorpos++) {
- lcd.setCursor(cursorpos, 1);
- lcd.print((char)255);
- }
- for (int cursorpos = (int)boostgraph; cursorpos < 17; cursorpos++) {
- lcd.setCursor(cursorpos, 1);
- lcd.print("-");
- }
- }
- }
- // wait 2 milliseconds before the next loop
- // for the analog-to-digital converter to settle
- // after the last reading:
- delay(2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement