MAX7219 8-Digital Segment Digital LED Display ARDUINO

PSI Pressure Sensor display on 8 Digit Segment Display

Parts:

Arduino UNO

Pressure Transducer Pressure Sender

AUTEX 1 pc 200 Psi Stainless Steel Pressure Transducer Pressure Sender Pressure Transmitter Sensor compatible with Oil Fuel Air Water Diesel Gas Amazon.com: AUTEX 1 pc 200 Psi Stainless Steel Pressure Transducer Pressure Sender Pressure Transmitter Sensor compatible with Oil Fuel Air Water Diesel Gas : Automotive

#include <SPI.h>
#define CSpin 2

unsigned long counterValue = 0;
byte digits[8];

void displayCounter();

void setup() {
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);

  digitalWrite(CSpin, HIGH);
  pinMode(CSpin, OUTPUT);
  SPI.begin();

  digitalWrite(CSpin, LOW);//come out of shutdown
  SPI.transfer(0x0C);
  SPI.transfer(0x01);
  digitalWrite(CSpin, HIGH);


  digitalWrite(CSpin, LOW);//decode 8 digits
  SPI.transfer(0x09);
  SPI.transfer(0x0F); //Code B decode for digits 3–0 No decode for digits 7–4. Was 0xFF
  digitalWrite(CSpin, HIGH);

  for (int i = 1; i < 9; i++) {//set all digits OFF
    digitalWrite(CSpin, LOW);//digit 0
    SPI.transfer(i);
    SPI.transfer(0x0F);
    digitalWrite(CSpin, HIGH);
  }

  digitalWrite(CSpin, LOW);//intensity MIN
  SPI.transfer(0x0A);
  SPI.transfer(0x00);
  digitalWrite(CSpin, HIGH);

  digitalWrite(CSpin, LOW);//scan limit - all 8
  SPI.transfer(0x0B);
  SPI.transfer(0x07); //was 0x07 for all 8
  digitalWrite(CSpin, HIGH);


        digitalWrite(CSpin, LOW);//digit 0
        SPI.transfer(0x08);
        SPI.transfer(0x67); //P
        digitalWrite(CSpin, HIGH);
        delay(150);

        digitalWrite(CSpin, LOW);//digit 0
        SPI.transfer(0x07);
        SPI.transfer(0x5B); //S
        digitalWrite(CSpin, HIGH);
        delay(150);

        digitalWrite(CSpin, LOW);//digit 0
        SPI.transfer(0x06);
        SPI.transfer(0x06); //I  30 / 06
        digitalWrite(CSpin, HIGH);
        delay(150);
        
       //digitalWrite(CSpin, LOW);//digit 0
       //SPI.transfer(0x05);
       //SPI.transfer(0x01);
       //digitalWrite(CSpin, HIGH);
       //delay(500);        
}

void loop() {
  
//Serial.begin(9600);

int sensorVal=analogRead(A1);

float voltage = (sensorVal*5.0)/1024.0;

  float pressure_pascal = (3.0*((float)voltage-0.47))*1000000.0;
  float pressure_bar = pressure_pascal/10e5;
  int pressure_psi=pressure_bar*14.5038; //was float


    //Serial.print("BARS = ");
    //Serial.print(pressure_bar);
    //Serial.println(" bars");
    //Serial.print("PSI = ");
    //Serial.println(pressure_psi);
   // Serial.print("Pressure = ");  
  
    //delay(100);
/*===============================================================*/
    
  displayCounter();
  
  if(pressure_psi >= 1){
    counterValue=pressure_psi;
  }else{
    counterValue=1;
  }


  
//    for (byte num = 0; num < 10; num++) {
//      for (byte i = 1; i < 9; i++) {
//        digitalWrite(CSpin, LOW);//digit 0
//        SPI.transfer(i);
//        SPI.transfer(num);
//        digitalWrite(CSpin, HIGH);
//        delay(1);
//      }
//      delay(500);
//    }
        
}

void displayCounter() {

  
  unsigned long digitsCounter = counterValue;

  for (int i = 0; i < 4; i++) {
    
    digits[i] = digitsCounter % 10;

    if(counterValue< pow(10,i))// 1, 10, 100, 1000....
      digits[i] = 0x0F;
      digitsCounter /= 10;
      
      //PORTD &= ~(1<<CSpin);
      //SPI.transfer(0x05);
      //SPI.transfer(0x01);
      //PORTD |= (1<<CSpin);
      //delay(150);

      PORTD &= ~(1<<CSpin);
      SPI.transfer(0x05);
      SPI.transfer(0x01); // -
      PORTD |= (1<<CSpin);
      delay(500);

      PORTD &= ~(1<<CSpin);
      SPI.transfer(0x05);
      SPI.transfer(0x00); // blank
      PORTD |= (1<<CSpin);
      delay(500);
      
      PORTD &= ~(1<<CSpin);
      SPI.transfer(i + 1);
      SPI.transfer(digits[i]);
      PORTD |= (1<<CSpin);
      delay(150);
      
  } //delay(150);


}