Here is part 1 of my final project.
Below is the code and working display of my project. A lot of the live demonstration of my project can't be done due to the risk. I won't drive unsafely or get into an accident in order to show how the project works. I will give written examples of how the project works but like I said, I won't put mine or anyone's safety at risk for any project. If this will effect the outcome of my project, I am good with that.
Here is the code I used for the GPS Speedometer and the CO sensor:
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
// Red = Ground
// Black = 3v3
#define TFT_CS        10 // Yellow
#define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin Orange
#define TFT_DC         8 // White
#define TFT_MOSI 11  // Data out Blue
#define TFT_SCLK 13  // Clock out Green
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
float lat, lon, lat2, lon2; // create variable for latitude and longitude object
SoftwareSerial gpsSerial(3, 4); //rx,tx
TinyGPS gps;
// Push button setup
const int buttonPin1 = 5;
const int buttonPin2 = 6;
const int buttonPin3 = 7;
int buttonState1 = LOW;
int buttonState2 = LOW;
int buttonState3 = LOW;
int x = 0;
int y = 0;
int z = 0;
int a = 0;
int b = 0;
int c = 0;
double kmh = 0;
void setup(void) {
  Serial.begin(9600);
  gpsSerial.begin(9600);
  pinMode(2, OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  // Use this initializer if using a 1.8" TFT screen:
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  // Screen size 128x160
  // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
  // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
  // may end up with a black screen some times, or all the time.
  //tft.setSPISpeed(40000000);
  tft.fillScreen(ST77XX_BLACK);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(30, 40);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println("Just");
  tft.setCursor(30, 60);
  tft.println("Encase");
  tft.setCursor(30, 80);
  tft.println("Design");
  tft.setCursor(30, 100);
  tft.println("Challenge !!");
  delay(1500);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(30, 40);
  tft.println("Winter");
  tft.setCursor(30, 60);
  tft.println("Driving");
  tft.setCursor(30, 80);
  tft.println("Safety!! ");
  delay(1500);
  tft.fillScreen(ST77XX_BLACK);
}
void loop() {
  // Set current road conditions
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 20);
    tft.println("What are the current");
    tft.setCursor(0, 40);
    tft.println("road Conditions?");
    tft.setCursor(0, 80);
    tft.println("Press A for Clear");
    tft.setCursor(0, 100);
    tft.println("Press B for Snow");
    tft.setCursor(0, 120);
    tft.println("Press C for Icy");
   do {
    buttonState1 = digitalRead(5);
    buttonState2 = digitalRead(6);
    buttonState3 = digitalRead(7);
    if (buttonState1 == HIGH) {
      x = 1;
    }
    if (buttonState2 == HIGH) {
      y = 1;
    }
    if (buttonState3 == HIGH) {
      z = 1;
    }
  }while (x == 0 & y == 0 & z == 0);
  tft.fillScreen(ST77XX_BLACK);
  buttonState1 = 0;
  buttonState2 = 0;
  buttonState3 = 0;
// Set driving area
do {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 20);
    tft.println("Driving area?");
    tft.setCursor(0, 40);
    tft.println("Press A for in Town");
    tft.setCursor(0, 80);
    tft.println("Press B for Highway");
    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    if (buttonState1 == HIGH) {
      a = 1;
    }
    if (buttonState2 == HIGH) {
      b = 1;
    }
  }while (a == 0 & b == 0); 
  tft.fillScreen(ST77XX_BLACK);
  while (x == 1) {
    includeAllClear();
    
  }
  while (y == 1) {
    includeAllSnow();
    
  }
  while (z == 1) {
    includeAllIcy();
    
  }
}
//Clear Road Condition
void includeAllClear() {
  //Start and display CO levels
  tft.setTextColor(ST77XX_GREEN);
  int sensorValue = analogRead(A3);
  tft.setCursor(0, 0);
  tft.println("CO Levels: ");
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  delay(1);
  //Get GPS information
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat, &lon); // get latitude and longitude
    }
  }
  delay(5000);
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat2, &lon2); // get latitude and longitude
    }
  }
  double kmh = acos(cos(radians(90 - (lat, 6))) * cos(radians(90 - (lat2, 6))) + sin(radians(90 - (lat, 6))) * sin(radians(90 - (lat2, 6))) * cos(radians((lon, 6) - (lon2, 6)))) * 6371 * 60 * 12;
  tft.setTextSize(1);
  tft.setCursor(0, 60);
  tft.println("Speed Km/h:");
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
  if (a = 1 && kmh > 60) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  if (b = 1 && kmh > 100) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  delay(2000);
  //Clear displayed information
  tft.setTextColor(ST77XX_BLACK);
  tft.setTextSize(1);
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
}
//Snow Road Condition
void includeAllSnow() {
  //Start and display CO levels
  tft.setTextColor(ST77XX_GREEN);
  int sensorValue = analogRead(A3);
  tft.setCursor(0, 0);
  tft.println("CO Levels: ");
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  delay(1);
  //Get GPS information
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat, &lon); // get latitude and longitude
    }
  }
  delay(5000);
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat2, &lon2); // get latitude and longitude
    }
  }
  double kmh = acos(cos(radians(90 - (lat, 6))) * cos(radians(90 - (lat2, 6))) + sin(radians(90 - (lat, 6))) * sin(radians(90 - (lat2, 6))) * cos(radians((lon, 6) - (lon2, 6)))) * 6371 * 60 * 12;
  tft.setTextSize(1);
  tft.setCursor(0, 60);
  tft.println("Speed Km/h:");
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
  if (a = 1 && kmh > 45) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  if (b = 1 && kmh > 80) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  delay(2000);
  
  //Clear displayed information
  tft.setTextColor(ST77XX_BLACK);
  tft.setTextSize(1);
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
}
// Icy Road Condition
void includeAllIcy() {
  //Start and display CO levels
  tft.setTextColor(ST77XX_RED);
  int sensorValue = analogRead(A3);
  tft.setCursor(0, 0);
  tft.println("CO Levels: ");
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  delay(1);
  //Get GPS information
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat, &lon); // get latitude and longitude
    }
  }
  delay(5000);
  while (gpsSerial.available()) { // check for gps data
    if (gps.encode(gpsSerial.read())) // encode gps data
    {
      gps.f_get_position(&lat2, &lon2); // get latitude and longitude
    }
  }
  double kmh = acos(cos(radians(90 - (lat, 6))) * cos(radians(90 - (lat2, 6))) + sin(radians(90 - (lat, 6))) * sin(radians(90 - (lat2, 6))) * cos(radians((lon, 6) - (lon2, 6)))) * 6371 * 60 * 12;
  tft.setTextSize(1);
  tft.setCursor(0, 60);
  tft.println("Speed Km/h:");
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
  if (a = 1 && kmh > 40) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  if (b = 1 && kmh > 75) {
    tft.setTextColor(ST77XX_RED);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
    delay(2000);
    tft.setTextColor(ST77XX_BLACK);
    tft.setCursor(0, 120);
    tft.println("Slow Down!!");
  }
  delay(2000);
  
  //Clear displayed information
  tft.setTextColor(ST77XX_BLACK);
  tft.setTextSize(1);
  tft.setCursor(60, 0);
  tft.println(sensorValue / 10);
  tft.setCursor(0, 100);
  tft.println(kmh, 1);
}
Accelerometer and Weather Station Code:
#include <Wire.h>
#include "i2c.h"
#include <LiquidCrystal.h>
#include "i2c_BMP280.h"
#include "ADXL335.h"
BMP280 bmp280;
float pascalhigh;
float pascallow;
float pressurerise;
float pressuredrop;
float pascaldiff;
float pascaldiff1;
float hg;
float hg2;
ADXL335 accelerometer;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Connect BMP280 sensor to SDA (Y):20 SCL (B):21
// Connect Accel Sensor to O-A1, G-A2, Y-A3
void setup()
{
    Serial.begin(115200);
    lcd.begin(16, 2);
    accelerometer.begin();
    
    Serial.print("Probe BMP280: ");
    if (bmp280.initialize()) Serial.println("Sensor found");
    else
    {
        Serial.println("Sensor missing");
        while (1) {}
    }
   // onetime-measure:
    bmp280.setEnabled(0);
    bmp280.triggerMeasurement();
    float pascal;
    bmp280.getPressure(pascal);
    pascalhigh = 0;
    pascallow = 2000000;
    pascaldiff1 = 0;
    hg2 = pascal;
}
void loop()
{
  int x,y,z;
  accelerometer.getXYZ(&x,&y,&z);
  float ax,ay,az;
  accelerometer.getAcceleration(&ax,&ay,&az);
  Serial.println("accleration of X/Y/Z: ");
  Serial.print(ax);
  Serial.println(" g");
  Serial.print(ay);
  Serial.println(" g");
  Serial.print(az);
  Serial.println(" g");
 if ((ax+ay+az)>19){
  Serial.println("Danger, Slow Down");
  lcd.setCursor(0,1);
  lcd.print("Slow Down!!");
  delay(1000);
 }
 
    bmp280.awaitMeasurement();
    float temperature;
    bmp280.getTemperature(temperature);
    float pascal;
    bmp280.getPressure(pascal);
    hg = pascal / 3386.389;
    static float meters, metersold;
    bmp280.getAltitude(meters);
    metersold = (metersold * 10 + meters)/11;
    bmp280.triggerMeasurement();
    Serial.print("- Altitude: ");
    Serial.print(metersold);
    Serial.print(" - Temp ");
    Serial.print(temperature);
    Serial.println(" °C ");
    
    
    if(pascal>100914.3 && pascal<102269.0)
    {
      Serial.print(hg);
      Serial.print(" Hg; ");
      Serial.print(": Change");
      lcd.setCursor(0,0);
      lcd.print("Weather Change");
    }
    
    if(pascal<100914.4 && pascal > 97000.00)
    {
      Serial.print(hg);
      Serial.print(" Hg; ");
      Serial.print(": Rain/Snow");
      lcd.setCursor(0,0);
      lcd.print("Rain/Snow");
    }
    
    if(pascal<97000.1)
    {
      Serial.print(hg);
      Serial.print(" Hg; ");
      Serial.print(": Stormy");
      lcd.setCursor(0,0);
      lcd.print("Stormy");
    }
    
    if(pascal>102268.9 && pascal<105000.0)
    {
      Serial.print(hg);
      Serial.print(" Hg; ");
      Serial.print(": Fair");
      lcd.setCursor(0,0);
      lcd.print("Fair");
    }
    
    if(pascal>104999.9)
    {
      Serial.print(hg);
      Serial.print(" Hg; ");
      Serial.print(": Dry");
      lcd.setCursor(0,0);
      lcd.print("Dry");
    }
    
    if(hg2 > (hg-.05)or hg2 < (hg+.05))
    {
      Serial.print(" : No Change ");
      lcd.setCursor(0,1);
      lcd.print("No Change");
    }
    
    else if(hg2 > (hg-.15))
    {
      Serial.print(" : Weather to Improve ");
      lcd.setCursor(0,1);
      lcd.print("Weather Improve");
    }
    
    else if(hg2 < (hg+.15))
    {
      Serial.print(" : Weather to Decline ");
      lcd.setCursor(0,1);
      lcd.print("Weather Decline");
    }
    
    if(pascalhigh < pascal)
    {
      pascalhigh = pascal;
    }
    
    if(pascallow > pascal)
    {
      pascallow = pascal;
    }
    
   
  }
Here are pictures of the Speedometer/CO Sensor Output:
The first screen is where you set the current road conditions:

This screen is where you enter where you will be driving:


More to come tomorrow!!
Dale Winhold