Moved to:
http://www.killerbug.net

 

Over the past few weeks, I have posted various bits of Arduino sketches for controlling 7-segment displays and reading thermistors.  This has all been leading up to this release.

So What is a “Hardware Mod Firmware”?  It is a basic sketch that does all the things that most PS3 modders will want to do, while leaving room for other things.  It supports from 1-4 thermistors, and you can use 0, 2, 4, 6, or 8 displays to read out the various temperatures.  It also transmits the 4 temperatures by serial to a PC or other device with a serial monitor; so you can read all 4 temperatures without any 7-segment displays.  Based on the temperatures gathered, the fan speed is set.  I intend to refine the process considerably…right now, it is extremely aggressive in trying to maintain a very small heat range…because of this, the fan sounds a bit like a car revving the engine.  Smoothing this out is just one of several things on my unofficial “to do” list…but if anyone has any other ideas, feel free to post…you might even think up something that I didn’t.

The sketch is highly configurable; supporting ground and hot controlled displays, and being easily adaptable to different thermistors.  The sketch will work fine with any combination of 1-4 thermistors, and 0-8 displays as is; you do not need to modify anything if you are not using sensor(s) or display(s).  The minimum number of thermal sensors is 1, but I recommend at least 2…3 for BC units.  The 4th sensor is completely useless if you do not have all eight of the 7-segment displays as it does not factor into the fan speed calculations…that is another thing I am thinking of adding.

Unofficial “TO DO” List:

-Incorporate intake temperature into fan speed calculations (?maybe?).

-Smooth out fan curve and try to make it change less suddenly.

-Cut size, leaving more room for other things.

-Move some of the stuff from loop() into dedicated functions; to make writing things in loop() easier.

-A few other things I won’t even mention until I figure out if they are theoretically possible…I know one of them is possible with a Teensy 2.0++; but that is a much better chip than the ATmega328p.

-Add fan speed percentage to the serial report and to one of the displays (probably alternating with intake temperature on the same pair of displays).


// This is a script primarly designed for Sony PS3 mods, but designed to be easily
// changable for other applications.
//
// PS3_HW_MOD_FW_KillerBug_Arduino - Version 0.01a
//
// By Killer Bug
//
//
// Features:
// 1.) Reads 4 thermistors, translates reading to degrees celsius.
// -As the script is designed, these are placed as follows:
// -Thermistor 0 is attached to CPU heatsink base
// -Thermistor 1 is attached to GPU heatsink base
// -Thermistor 2 is attached to the northbridge chip, or the emotion engine if equiped.
// -Thermistor 3 is placed at the front, in front of the vents, to get room temperature.
//
// 2.) Displays the 4 thermistor readings on 7-segment displays.
// -Displays are setup in four pairs, and controlled by just two Arduino pins.
// -This script is designed for ground-controlled displays with ground controlled
// decimal points.  It can be converted to work with hot-controlled displays with
// hot-controlled decimal points.  To do this, first make a copy of all the
// instructions between the two sets of long ==== lines elsewhere , as the process
// will destroy the instructions before you are done doing the steps:
// ==========================================================
// Search for each of the first halves of
// the lines below (without the quotes), and
// replace with the second half of the line
// (without the quotes) (these must be done
// in the order shown):
// "gpiotmp |= 1 << 0;"   =   "gp0"
// "gpiotmp |= 1 << 1;"   =   "gp1"
// "gpiotmp |= 1 << 2;"   =   "gp2"
// "gpiotmp |= 1 << 3;"   =   "gp3"
// "gpiotmp |= 1 << 4;"   =   "gp4"
// "gpiotmp |= 1 << 5;"   =   "gp5"
// "gpiotmp |= 1 << 6;"   =   "gp6"
// "gpiotmp |= 1 << 7;"   =   "gp7"
// "gpiotmp &= ~(1 << 0);"   =   "gpiotmp |= 1 << 0;"
// "gpiotmp &= ~(1 << 1);"   =   "gpiotmp |= 1 << 1;"
// "gpiotmp &= ~(1 << 2);"   =   "gpiotmp |= 1 << 2;"
// "gpiotmp &= ~(1 << 3);"   =   "gpiotmp |= 1 << 3;"
// "gpiotmp &= ~(1 << 4);"   =   "gpiotmp |= 1 << 4;"
// "gpiotmp &= ~(1 << 5);"   =   "gpiotmp |= 1 << 5;"
// "gpiotmp &= ~(1 << 6);"   =   "gpiotmp |= 1 << 6;"
// "gpiotmp &= ~(1 << 7);"   =   "gpiotmp |= 1 << 7;"
// "gp0"   =   "gpiotmp &= ~(1 << 0);"
// "gp1"   =   "gpiotmp &= ~(1 << 1);"
// "gp2"   =   "gpiotmp &= ~(1 << 2);"
// "gp3"   =   "gpiotmp &= ~(1 << 3);"
// "gp4"   =   "gpiotmp &= ~(1 << 4);"
// "gp5"   =   "gpiotmp &= ~(1 << 5);"
// "gp6"   =   "gpiotmp &= ~(1 << 6);"
// "gp7"   =   "gpiotmp &= ~(1 << 7);"
// ==========================================================
//
// Circuits for the thermistors:
//
// HOT -> 100K Resistor 0 _____ CPU Thermistor -> Ground
//                          |
//                      Arduino A0
//
// HOT -> 100K Resistor 1 _____ GPU Thermistor -> Ground
//                          |
//                      Arduino A1
//
// HOT -> 100K Resistor 2 _____ Exhaust Thermistor -> Ground
//                          |
//                      Arduino A2
//
// HOT -> 100K Resistor 3 _____ Intake Thermistor -> Ground
//                          |
//                      Arduino A3
//
//
// Pinout for the MCP23008 chips:
//
// IC | PIN | Connection
//----------------------
// All|  1  | Arduino Analog 5
// All|  2  | Arduino Analog 4
// 0  |  3  | GND
// 0  |  4  | GND
// 0  |  5  | GND
// 1  |  3  | GND
// 1  |  4  | GND
// 1  |  5  | 5V
// 2  |  3  | GND
// 2  |  4  | 5V
// 2  |  5  | GND
// 3  |  3  | GND
// 3  |  4  | 5V
// 3  |  5  | 5V
// 4  |  3  | 5V
// 4  |  4  | GND
// 4  |  5  | GND
// 5  |  3  | 5V
// 5  |  4  | GND
// 5  |  5  | 5V
// 6  |  3  | 5V
// 6  |  4  | 5V
// 6  |  5  | GND
// 7  |  3  | 5V
// 7  |  4  | 5V
// 7  |  5  | 5V
// ALL|  6  | 5V
// ALL|  9  | GND
// ALL| 18  | 5V
//
// Pins 10-16 of each device drive the 7 segments, as shown here:
//
//          10
//       ________
//      |        |
//   15 |        | 11
//      |   16   |
//      |________|
//      |        |
//   14 |        | 12
//      |        |
//      |________|
//          13
//
//
//
// This is designed for a specific thermistor, the
// Vishay NTCLE100E3104HB0.  This is a common and
// affordable thermistor, although it is not the
// most accurate available.
//
// If you would like to switch to another
// thermistor because this part number is not
// available in your country, or because you would
// like better accuracy, you will want to find a
// part with the same resistance @ temperature
// ratings, or else you will have to spend a lot
// of time rewriting the main body of the
// "getCelsius" command:
//
//  00C = 340.9 K ohm
//  05C = 263.1 K ohm
//  10C = 204.4 K ohm
//  15C = 160.0 K ohm
//  20C = 126.1 K ohm
//  25C = 100.0 K ohm
//  30C = 79.81 K ohm
//  35C = 64.08 K ohm
//  40C = 51.75 K ohm
//  45C = 42.02 K ohm
//  50C = 34.31 K ohm
//  55C = 28.16 K ohm
//  60C = 23.22 K ohm
//  65C = 19.25 K ohm
//  70C = 16.02 K ohm
//  75C = 13.40 K ohm
//  80C = 11.26 K ohm
//  85C = 9.496 K ohm
//  90C = 8.042 K ohm
//  95C = 6.837 K ohm
// 100C = 5.835 K ohm
//
//
// The MCP23008 datasheet specifies that the maximum current for
// the chip is 125mA.  Because of this, the maximum amperage per
// segment for a 7-digit display with no decimal point should be
// kept at or under 15mA.  If you are using a decimal point, the
// amperage should be kept at or under 12mA.
//

#include <Wire.h>
#include <avr/pgmspace.h>
#include <WProgram.h>

int thermPin0 = A0; //Arduino Analog pin 0 = CPU Temp
int thermPin1 = A1; //Arduino Analog pin 1 = GPU Temp
int thermPin2 = A2; //Arduino Analog pin 2 = Northbridge/EE Temp
int thermPin3 = A3; //Arduino Analog pin 3 = Intake Temp
int PWMpin = 10;    //Sets digital pin 10 as the PWM control for the fan.

short maxTempC = 50; //Sets the temperature where the fan goes to full speed.

short yyyy;
short rawThermTMP000;
short rawThermTMP001;
short rawThermTMP002;
short rawThermTMP003;
short rawThermTMP;
short cThermTMP;
short therm0C;
short therm1C;
short therm2C;
short therm3C;
short rawThermTMP00;
short rawThermTMP01;
short rawThermTMP02;
short rawThermTMP03;
short rawThermTMP04;
short rawThermTMP05;
short rawThermTMP06;
short rawThermTMP07;
short rawThermTMP08;
short rawThermTMP09;
short rawThermTMP10;
short rawThermTMP11;
short rawThermTMP12;
short rawThermTMP13;
short rawThermTMP14;
short rawThermTMP15;
short rawThermTMP16;
short rawThermTMP17;
short rawThermTMP18;
short rawThermTMP19;
short rawThermTMP20;
short rawThermTMP21;
short rawThermTMP22;
short rawThermTMP23;
short rawThermTMP24;
short rawThermTMP25;
short rawThermTMP26;
short rawThermTMP27;
short cccc;
short highestReading;

uint8_t gpio000 = 0xFF; //These will always contain the last signal
uint8_t gpio001 = 0xFF; //sent to each respective display, or the
uint8_t gpio002 = 0xFF; //signal being sent to that display as part
uint8_t gpio003 = 0xFF; //of the running command.
uint8_t gpio004 = 0xFF; //
uint8_t gpio005 = 0xFF; //
uint8_t gpio006 = 0xFF; //
uint8_t gpio007 = 0xFF; //

uint8_t gpiotmp = 0xFF;

void setup(){
pinMode(PWMpin, OUTPUT); //sets the PWM Fan Control pin as an output.

startUp(0x20);  //These
startUp(0x21);  //start
startUp(0x22);  //each
startUp(0x23);  //of
startUp(0x24);  //the
startUp(0x25);  //eight
startUp(0x26);  //digits
startUp(0x27);  //

digitWrite (0, 10);  // If you want a digit to start with
digitWrite (1, 10);  // a certain number, you can change
digitWrite (2, 10);  // it here.  Removing these lines
digitWrite (3, 10);  // for any chip will make them start
digitWrite (4, 10);  // with "8".
digitWrite (5, 10);  //
digitWrite (6, 10);  //
digitWrite (7, 10);  //

decPointWrite (0, 0); // If you are using a decimal point,
decPointWrite (1, 0); // or if you are using that pin for
decPointWrite (2, 0); // some other function, and you want
decPointWrite (3, 0); // that decimal point or function to
decPointWrite (4, 0); // start by default, just remove the
decPointWrite (5, 0); // line from here and it will start
decPointWrite (6, 0); // by default.
decPointWrite (7, 0); //

Serial.begin(9600); //Starts the serial communication
}

void loop(){
getTemps();
if ((therm0C >= therm1C) && (therm0C >= therm2C)) (highestReading = therm0C);
if ((therm1C >= therm0C) && (therm1C >= therm2C)) (highestReading = therm1C);
if ((therm2C >= therm0C) && (therm2C >= therm1C)) (highestReading = therm2C);

if (highestReading >= maxTempC)        (analogWrite(PWMpin, 254));
if (highestReading == (maxTempC - 1))  (analogWrite(PWMpin, 234));
if (highestReading == (maxTempC - 2))  (analogWrite(PWMpin, 213));
if (highestReading == (maxTempC - 3))  (analogWrite(PWMpin, 193));
if (highestReading == (maxTempC - 4))  (analogWrite(PWMpin, 172));
if (highestReading == (maxTempC - 5))  (analogWrite(PWMpin, 152));
if (highestReading == (maxTempC - 6))  (analogWrite(PWMpin, 132));
if (highestReading == (maxTempC - 7))  (analogWrite(PWMpin, 111));
if (highestReading == (maxTempC - 8))  (analogWrite(PWMpin, 91));
if (highestReading == (maxTempC - 9))  (analogWrite(PWMpin, 70));
if (highestReading <= (maxTempC - 10))  (analogWrite(PWMpin, 50));

if ((therm0C >= 0) && (therm0C <= 9)){
digitWrite (1, 0); // Write a "0" on chip 1
if (therm0C == 0) (digitWrite (0, 0));
if (therm0C == 1) (digitWrite (0, 1));
if (therm0C == 2) (digitWrite (0, 2));
if (therm0C == 3) (digitWrite (0, 3));
if (therm0C == 4) (digitWrite (0, 4));
if (therm0C == 5) (digitWrite (0, 5));
if (therm0C == 6) (digitWrite (0, 6));
if (therm0C == 7) (digitWrite (0, 7));
if (therm0C == 8) (digitWrite (0, 8));
if (therm0C == 9) (digitWrite (0, 9));
}

if ((therm0C >= 10) && (therm0C <= 19)){
digitWrite (1, 1);
if (therm0C == 10) (digitWrite (0,0));
if (therm0C == 11) (digitWrite (0,1));
if (therm0C == 12) (digitWrite (0,2));
if (therm0C == 13) (digitWrite (0,3));
if (therm0C == 14) (digitWrite (0,4));
if (therm0C == 15) (digitWrite (0,5));
if (therm0C == 16) (digitWrite (0,6));
if (therm0C == 17) (digitWrite (0,7));
if (therm0C == 18) (digitWrite (0,8));
if (therm0C == 19) (digitWrite (0,9));
}

if ((therm0C >= 20) && (therm0C <= 29)){
digitWrite (1, 2);
if (therm0C == 20) (digitWrite (0,0));
if (therm0C == 21) (digitWrite (0,1));
if (therm0C == 22) (digitWrite (0,2));
if (therm0C == 23) (digitWrite (0,3));
if (therm0C == 24) (digitWrite (0,4));
if (therm0C == 25) (digitWrite (0,5));
if (therm0C == 26) (digitWrite (0,6));
if (therm0C == 27) (digitWrite (0,7));
if (therm0C == 28) (digitWrite (0,8));
if (therm0C == 29) (digitWrite (0,9));
}

if ((therm0C >= 30) && (therm0C <= 39)){
digitWrite (1, 3);
if (therm0C == 30) (digitWrite (0,0));
if (therm0C == 31) (digitWrite (0,1));
if (therm0C == 32) (digitWrite (0,2));
if (therm0C == 33) (digitWrite (0,3));
if (therm0C == 34) (digitWrite (0,4));
if (therm0C == 35) (digitWrite (0,5));
if (therm0C == 36) (digitWrite (0,6));
if (therm0C == 37) (digitWrite (0,7));
if (therm0C == 38) (digitWrite (0,8));
if (therm0C == 39) (digitWrite (0,9));
}

if ((therm0C >= 40) && (therm0C <= 49)){
digitWrite (1, 4);
if (therm0C == 40) (digitWrite (0,0));
if (therm0C == 41) (digitWrite (0,1));
if (therm0C == 42) (digitWrite (0,2));
if (therm0C == 43) (digitWrite (0,3));
if (therm0C == 44) (digitWrite (0,4));
if (therm0C == 45) (digitWrite (0,5));
if (therm0C == 46) (digitWrite (0,6));
if (therm0C == 47) (digitWrite (0,7));
if (therm0C == 48) (digitWrite (0,8));
if (therm0C == 49) (digitWrite (0,9));
}

if ((therm0C >= 50) && (therm0C <= 59)){
digitWrite (1, 5);
if (therm0C == 50) (digitWrite (0,0));
if (therm0C == 51) (digitWrite (0,1));
if (therm0C == 52) (digitWrite (0,2));
if (therm0C == 53) (digitWrite (0,3));
if (therm0C == 54) (digitWrite (0,4));
if (therm0C == 55) (digitWrite (0,5));
if (therm0C == 56) (digitWrite (0,6));
if (therm0C == 57) (digitWrite (0,7));
if (therm0C == 58) (digitWrite (0,8));
if (therm0C == 59) (digitWrite (0,9));
}

if ((therm0C >= 60) && (therm0C <= 69)){
digitWrite (1, 6);
if (therm0C == 60) (digitWrite (0,0));
if (therm0C == 61) (digitWrite (0,1));
if (therm0C == 62) (digitWrite (0,2));
if (therm0C == 63) (digitWrite (0,3));
if (therm0C == 64) (digitWrite (0,4));
if (therm0C == 65) (digitWrite (0,5));
if (therm0C == 66) (digitWrite (0,6));
if (therm0C == 67) (digitWrite (0,7));
if (therm0C == 68) (digitWrite (0,8));
if (therm0C == 69) (digitWrite (0,9));
}

if ((therm0C >= 70) && (therm0C <= 79)){
digitWrite (1, 7);
if (therm0C == 70) (digitWrite (0,0));
if (therm0C == 71) (digitWrite (0,1));
if (therm0C == 72) (digitWrite (0,2));
if (therm0C == 73) (digitWrite (0,3));
if (therm0C == 74) (digitWrite (0,4));
if (therm0C == 75) (digitWrite (0,5));
if (therm0C == 76) (digitWrite (0,6));
if (therm0C == 77) (digitWrite (0,7));
if (therm0C == 78) (digitWrite (0,8));
if (therm0C == 79) (digitWrite (0,9));
}

if ((therm0C >= 80) && (therm0C <= 89)){
digitWrite (1, 8);
if (therm0C == 80) (digitWrite (0,0));
if (therm0C == 81) (digitWrite (0,1));
if (therm0C == 82) (digitWrite (0,2));
if (therm0C == 83) (digitWrite (0,3));
if (therm0C == 84) (digitWrite (0,4));
if (therm0C == 85) (digitWrite (0,5));
if (therm0C == 86) (digitWrite (0,6));
if (therm0C == 87) (digitWrite (0,7));
if (therm0C == 88) (digitWrite (0,8));
if (therm0C == 89) (digitWrite (0,9));
}

if ((therm0C >= 90) && (therm0C <= 99)){
digitWrite (1, 9);
if (therm0C == 90) (digitWrite (0,0));
if (therm0C == 91) (digitWrite (0,1));
if (therm0C == 92) (digitWrite (0,2));
if (therm0C == 93) (digitWrite (0,3));
if (therm0C == 94) (digitWrite (0,4));
if (therm0C == 95) (digitWrite (0,5));
if (therm0C == 96) (digitWrite (0,6));
if (therm0C == 97) (digitWrite (0,7));
if (therm0C == 98) (digitWrite (0,8));
if (therm0C == 99) (digitWrite (0,9));
}

if ((therm1C >= 0) && (therm1C <= 9)){
digitWrite (3, 0);
if (therm1C == 0) (digitWrite (2,0));
if (therm1C == 1) (digitWrite (2,1));
if (therm1C == 2) (digitWrite (2,2));
if (therm1C == 3) (digitWrite (2,3));
if (therm1C == 4) (digitWrite (2,4));
if (therm1C == 5) (digitWrite (2,5));
if (therm1C == 6) (digitWrite (2,6));
if (therm1C == 7) (digitWrite (2,7));
if (therm1C == 8) (digitWrite (2,8));
if (therm1C == 9) (digitWrite (2,9));
}

if ((therm1C >= 10) && (therm1C <= 19)){
digitWrite (3, 1);
if (therm1C == 10) (digitWrite (2,0));
if (therm1C == 11) (digitWrite (2,1));
if (therm1C == 12) (digitWrite (2,2));
if (therm1C == 13) (digitWrite (2,3));
if (therm1C == 14) (digitWrite (2,4));
if (therm1C == 15) (digitWrite (2,5));
if (therm1C == 16) (digitWrite (2,6));
if (therm1C == 17) (digitWrite (2,7));
if (therm1C == 18) (digitWrite (2,8));
if (therm1C == 19) (digitWrite (2,9));
}

if ((therm1C >= 20) && (therm1C <= 29)){
digitWrite (3, 2);
if (therm1C == 20) (digitWrite (2,0));
if (therm1C == 21) (digitWrite (2,1));
if (therm1C == 22) (digitWrite (2,2));
if (therm1C == 23) (digitWrite (2,3));
if (therm1C == 24) (digitWrite (2,4));
if (therm1C == 25) (digitWrite (2,5));
if (therm1C == 26) (digitWrite (2,6));
if (therm1C == 27) (digitWrite (2,7));
if (therm1C == 28) (digitWrite (2,8));
if (therm1C == 29) (digitWrite (2,9));
}

if ((therm1C >= 30) && (therm1C <= 39)){
digitWrite (3, 3);
if (therm1C == 30) (digitWrite (2,0));
if (therm1C == 31) (digitWrite (2,1));
if (therm1C == 32) (digitWrite (2,2));
if (therm1C == 33) (digitWrite (2,3));
if (therm1C == 34) (digitWrite (2,4));
if (therm1C == 35) (digitWrite (2,5));
if (therm1C == 36) (digitWrite (2,6));
if (therm1C == 37) (digitWrite (2,7));
if (therm1C == 38) (digitWrite (2,8));
if (therm1C == 39) (digitWrite (2,9));
}

if ((therm1C >= 40) && (therm1C <= 49)){
digitWrite (3, 4);
if (therm1C == 40) (digitWrite (2,0));
if (therm1C == 41) (digitWrite (2,1));
if (therm1C == 42) (digitWrite (2,2));
if (therm1C == 43) (digitWrite (2,3));
if (therm1C == 44) (digitWrite (2,4));
if (therm1C == 45) (digitWrite (2,5));
if (therm1C == 46) (digitWrite (2,6));
if (therm1C == 47) (digitWrite (2,7));
if (therm1C == 48) (digitWrite (2,8));
if (therm1C == 49) (digitWrite (2,9));
}

if ((therm1C >= 50) && (therm1C <= 59)){
digitWrite (3, 5);
if (therm1C == 50) (digitWrite (2,0));
if (therm1C == 51) (digitWrite (2,1));
if (therm1C == 52) (digitWrite (2,2));
if (therm1C == 53) (digitWrite (2,3));
if (therm1C == 54) (digitWrite (2,4));
if (therm1C == 55) (digitWrite (2,5));
if (therm1C == 56) (digitWrite (2,6));
if (therm1C == 57) (digitWrite (2,7));
if (therm1C == 58) (digitWrite (2,8));
if (therm1C == 59) (digitWrite (2,9));
}

if ((therm1C >= 60) && (therm1C <= 69)){
digitWrite (3, 6);
if (therm1C == 60) (digitWrite (2,0));
if (therm1C == 61) (digitWrite (2,1));
if (therm1C == 62) (digitWrite (2,2));
if (therm1C == 63) (digitWrite (2,3));
if (therm1C == 64) (digitWrite (2,4));
if (therm1C == 65) (digitWrite (2,5));
if (therm1C == 66) (digitWrite (2,6));
if (therm1C == 67) (digitWrite (2,7));
if (therm1C == 68) (digitWrite (2,8));
if (therm1C == 69) (digitWrite (2,9));
}

if ((therm1C >= 70) && (therm1C <= 79)){
digitWrite (3, 7);
if (therm1C == 70) (digitWrite (2,0));
if (therm1C == 71) (digitWrite (2,1));
if (therm1C == 72) (digitWrite (2,2));
if (therm1C == 73) (digitWrite (2,3));
if (therm1C == 74) (digitWrite (2,4));
if (therm1C == 75) (digitWrite (2,5));
if (therm1C == 76) (digitWrite (2,6));
if (therm1C == 77) (digitWrite (2,7));
if (therm1C == 78) (digitWrite (2,8));
if (therm1C == 79) (digitWrite (2,9));
}

if ((therm1C >= 80) && (therm1C <= 89)){
digitWrite (3, 8);
if (therm1C == 80) (digitWrite (2,0));
if (therm1C == 81) (digitWrite (2,1));
if (therm1C == 82) (digitWrite (2,2));
if (therm1C == 83) (digitWrite (2,3));
if (therm1C == 84) (digitWrite (2,4));
if (therm1C == 85) (digitWrite (2,5));
if (therm1C == 86) (digitWrite (2,6));
if (therm1C == 87) (digitWrite (2,7));
if (therm1C == 88) (digitWrite (2,8));
if (therm1C == 89) (digitWrite (2,9));
}

if ((therm1C >= 90) && (therm1C <= 99)){
digitWrite (3, 9);
if (therm1C == 90) (digitWrite (2,0));
if (therm1C == 91) (digitWrite (2,1));
if (therm1C == 92) (digitWrite (2,2));
if (therm1C == 93) (digitWrite (2,3));
if (therm1C == 94) (digitWrite (2,4));
if (therm1C == 95) (digitWrite (2,5));
if (therm1C == 96) (digitWrite (2,6));
if (therm1C == 97) (digitWrite (2,7));
if (therm1C == 98) (digitWrite (2,8));
if (therm1C == 99) (digitWrite (2,9));
}

if ((therm2C >= 0) && (therm2C <= 9)){
digitWrite (5, 0);
if (therm2C == 0) (digitWrite (4,0));
if (therm2C == 1) (digitWrite (4,1));
if (therm2C == 2) (digitWrite (4,2));
if (therm2C == 3) (digitWrite (4,3));
if (therm2C == 4) (digitWrite (4,4));
if (therm2C == 5) (digitWrite (4,5));
if (therm2C == 6) (digitWrite (4,6));
if (therm2C == 7) (digitWrite (4,7));
if (therm2C == 8) (digitWrite (4,8));
if (therm2C == 9) (digitWrite (4,9));
}

if ((therm2C >= 10) && (therm2C <= 19)){
digitWrite (5, 1);
if (therm2C == 10) (digitWrite (4,0));
if (therm2C == 11) (digitWrite (4,1));
if (therm2C == 12) (digitWrite (4,2));
if (therm2C == 13) (digitWrite (4,3));
if (therm2C == 14) (digitWrite (4,4));
if (therm2C == 15) (digitWrite (4,5));
if (therm2C == 16) (digitWrite (4,6));
if (therm2C == 17) (digitWrite (4,7));
if (therm2C == 18) (digitWrite (4,8));
if (therm2C == 19) (digitWrite (4,9));
}

if ((therm2C >= 20) && (therm2C <= 29)){
digitWrite (5, 2);
if (therm2C == 20) (digitWrite (4,0));
if (therm2C == 21) (digitWrite (4,1));
if (therm2C == 22) (digitWrite (4,2));
if (therm2C == 23) (digitWrite (4,3));
if (therm2C == 24) (digitWrite (4,4));
if (therm2C == 25) (digitWrite (4,5));
if (therm2C == 26) (digitWrite (4,6));
if (therm2C == 27) (digitWrite (4,7));
if (therm2C == 28) (digitWrite (4,8));
if (therm2C == 29) (digitWrite (4,9));
}

if ((therm2C >= 30) && (therm2C <= 39)){
digitWrite (5, 3);
if (therm2C == 30) (digitWrite (4,0));
if (therm2C == 31) (digitWrite (4,1));
if (therm2C == 32) (digitWrite (4,2));
if (therm2C == 33) (digitWrite (4,3));
if (therm2C == 34) (digitWrite (4,4));
if (therm2C == 35) (digitWrite (4,5));
if (therm2C == 36) (digitWrite (4,6));
if (therm2C == 37) (digitWrite (4,7));
if (therm2C == 38) (digitWrite (4,8));
if (therm2C == 39) (digitWrite (4,9));
}

if ((therm2C >= 40) && (therm2C <= 49)){
digitWrite (5, 4);
if (therm2C == 40) (digitWrite (4,0));
if (therm2C == 41) (digitWrite (4,1));
if (therm2C == 42) (digitWrite (4,2));
if (therm2C == 43) (digitWrite (4,3));
if (therm2C == 44) (digitWrite (4,4));
if (therm2C == 45) (digitWrite (4,5));
if (therm2C == 46) (digitWrite (4,6));
if (therm2C == 47) (digitWrite (4,7));
if (therm2C == 48) (digitWrite (4,8));
if (therm2C == 49) (digitWrite (4,9));
}

if ((therm2C >= 50) && (therm2C <= 59)){
digitWrite (5, 5);
if (therm2C == 50) (digitWrite (4,0));
if (therm2C == 51) (digitWrite (4,1));
if (therm2C == 52) (digitWrite (4,2));
if (therm2C == 53) (digitWrite (4,3));
if (therm2C == 54) (digitWrite (4,4));
if (therm2C == 55) (digitWrite (4,5));
if (therm2C == 56) (digitWrite (4,6));
if (therm2C == 57) (digitWrite (4,7));
if (therm2C == 58) (digitWrite (4,8));
if (therm2C == 59) (digitWrite (4,9));
}

if ((therm2C >= 60) && (therm2C <= 69)){
digitWrite (5, 6);
if (therm2C == 60) (digitWrite (4,0));
if (therm2C == 61) (digitWrite (4,1));
if (therm2C == 62) (digitWrite (4,2));
if (therm2C == 63) (digitWrite (4,3));
if (therm2C == 64) (digitWrite (4,4));
if (therm2C == 65) (digitWrite (4,5));
if (therm2C == 66) (digitWrite (4,6));
if (therm2C == 67) (digitWrite (4,7));
if (therm2C == 68) (digitWrite (4,8));
if (therm2C == 69) (digitWrite (4,9));
}

if ((therm2C >= 70) && (therm2C <= 79)){
digitWrite (5, 7);
if (therm2C == 70) (digitWrite (4,0));
if (therm2C == 71) (digitWrite (4,1));
if (therm2C == 72) (digitWrite (4,2));
if (therm2C == 73) (digitWrite (4,3));
if (therm2C == 74) (digitWrite (4,4));
if (therm2C == 75) (digitWrite (4,5));
if (therm2C == 76) (digitWrite (4,6));
if (therm2C == 77) (digitWrite (4,7));
if (therm2C == 78) (digitWrite (4,8));
if (therm2C == 79) (digitWrite (4,9));
}

if ((therm2C >= 80) && (therm2C <= 89)){
digitWrite (5, 8);
if (therm2C == 80) (digitWrite (4,0));
if (therm2C == 81) (digitWrite (4,1));
if (therm2C == 82) (digitWrite (4,2));
if (therm2C == 83) (digitWrite (4,3));
if (therm2C == 84) (digitWrite (4,4));
if (therm2C == 85) (digitWrite (4,5));
if (therm2C == 86) (digitWrite (4,6));
if (therm2C == 87) (digitWrite (4,7));
if (therm2C == 88) (digitWrite (4,8));
if (therm2C == 89) (digitWrite (4,9));
}

if ((therm2C >= 90) && (therm2C <= 99)){
digitWrite (5, 9);
if (therm2C == 90) (digitWrite (4,0));
if (therm2C == 91) (digitWrite (4,1));
if (therm2C == 92) (digitWrite (4,2));
if (therm2C == 93) (digitWrite (4,3));
if (therm2C == 94) (digitWrite (4,4));
if (therm2C == 95) (digitWrite (4,5));
if (therm2C == 96) (digitWrite (4,6));
if (therm2C == 97) (digitWrite (4,7));
if (therm2C == 98) (digitWrite (4,8));
if (therm2C == 99) (digitWrite (4,9));
}

if ((therm3C >= 0) && (therm3C <= 9)){
digitWrite (7, 0);
if (therm3C == 0) (digitWrite (6,0));
if (therm3C == 1) (digitWrite (6,1));
if (therm3C == 2) (digitWrite (6,2));
if (therm3C == 3) (digitWrite (6,3));
if (therm3C == 4) (digitWrite (6,4));
if (therm3C == 5) (digitWrite (6,5));
if (therm3C == 6) (digitWrite (6,6));
if (therm3C == 7) (digitWrite (6,7));
if (therm3C == 8) (digitWrite (6,8));
if (therm3C == 9) (digitWrite (6,9));
}

if ((therm3C >= 10) && (therm3C <= 19)){
digitWrite (7, 1);
if (therm3C == 10) (digitWrite (6,0));
if (therm3C == 11) (digitWrite (6,1));
if (therm3C == 12) (digitWrite (6,2));
if (therm3C == 13) (digitWrite (6,3));
if (therm3C == 14) (digitWrite (6,4));
if (therm3C == 15) (digitWrite (6,5));
if (therm3C == 16) (digitWrite (6,6));
if (therm3C == 17) (digitWrite (6,7));
if (therm3C == 18) (digitWrite (6,8));
if (therm3C == 19) (digitWrite (6,9));
}

if ((therm3C >= 20) && (therm3C <= 29)){
digitWrite (7, 2);
if (therm3C == 20) (digitWrite (6,0));
if (therm3C == 21) (digitWrite (6,1));
if (therm3C == 22) (digitWrite (6,2));
if (therm3C == 23) (digitWrite (6,3));
if (therm3C == 24) (digitWrite (6,4));
if (therm3C == 25) (digitWrite (6,5));
if (therm3C == 26) (digitWrite (6,6));
if (therm3C == 27) (digitWrite (6,7));
if (therm3C == 28) (digitWrite (6,8));
if (therm3C == 29) (digitWrite (6,9));
}

if ((therm3C >= 30) && (therm3C <= 39)){
digitWrite (7, 3);
if (therm3C == 30) (digitWrite (6,0));
if (therm3C == 31) (digitWrite (6,1));
if (therm3C == 32) (digitWrite (6,2));
if (therm3C == 33) (digitWrite (6,3));
if (therm3C == 34) (digitWrite (6,4));
if (therm3C == 35) (digitWrite (6,5));
if (therm3C == 36) (digitWrite (6,6));
if (therm3C == 37) (digitWrite (6,7));
if (therm3C == 38) (digitWrite (6,8));
if (therm3C == 39) (digitWrite (6,9));
}

if ((therm3C >= 40) && (therm3C <= 49)){
digitWrite (7, 4);
if (therm3C == 40) (digitWrite (6,0));
if (therm3C == 41) (digitWrite (6,1));
if (therm3C == 42) (digitWrite (6,2));
if (therm3C == 43) (digitWrite (6,3));
if (therm3C == 44) (digitWrite (6,4));
if (therm3C == 45) (digitWrite (6,5));
if (therm3C == 46) (digitWrite (6,6));
if (therm3C == 47) (digitWrite (6,7));
if (therm3C == 48) (digitWrite (6,8));
if (therm3C == 49) (digitWrite (6,9));
}

if ((therm3C >= 50) && (therm3C <= 59)){
digitWrite (7, 5);
if (therm3C == 50) (digitWrite (6,0));
if (therm3C == 51) (digitWrite (6,1));
if (therm3C == 52) (digitWrite (6,2));
if (therm3C == 53) (digitWrite (6,3));
if (therm3C == 54) (digitWrite (6,4));
if (therm3C == 55) (digitWrite (6,5));
if (therm3C == 56) (digitWrite (6,6));
if (therm3C == 57) (digitWrite (6,7));
if (therm3C == 58) (digitWrite (6,8));
if (therm3C == 59) (digitWrite (6,9));
}

if ((therm3C >= 60) && (therm3C <= 69)){
digitWrite (7, 6);
if (therm3C == 60) (digitWrite (6,0));
if (therm3C == 61) (digitWrite (6,1));
if (therm3C == 62) (digitWrite (6,2));
if (therm3C == 63) (digitWrite (6,3));
if (therm3C == 64) (digitWrite (6,4));
if (therm3C == 65) (digitWrite (6,5));
if (therm3C == 66) (digitWrite (6,6));
if (therm3C == 67) (digitWrite (6,7));
if (therm3C == 68) (digitWrite (6,8));
if (therm3C == 69) (digitWrite (6,9));
}

if ((therm3C >= 70) && (therm3C <= 79)){
digitWrite (7, 7);
if (therm3C == 70) (digitWrite (6,0));
if (therm3C == 71) (digitWrite (6,1));
if (therm3C == 72) (digitWrite (6,2));
if (therm3C == 73) (digitWrite (6,3));
if (therm3C == 74) (digitWrite (6,4));
if (therm3C == 75) (digitWrite (6,5));
if (therm3C == 76) (digitWrite (6,6));
if (therm3C == 77) (digitWrite (6,7));
if (therm3C == 78) (digitWrite (6,8));
if (therm3C == 79) (digitWrite (6,9));
}

if ((therm3C >= 80) && (therm3C <= 89)){
digitWrite (7, 8);
if (therm3C == 80) (digitWrite (6,0));
if (therm3C == 81) (digitWrite (6,1));
if (therm3C == 82) (digitWrite (6,2));
if (therm3C == 83) (digitWrite (6,3));
if (therm3C == 84) (digitWrite (6,4));
if (therm3C == 85) (digitWrite (6,5));
if (therm3C == 86) (digitWrite (6,6));
if (therm3C == 87) (digitWrite (6,7));
if (therm3C == 88) (digitWrite (6,8));
if (therm3C == 89) (digitWrite (6,9));
}

if ((therm3C >= 90) && (therm3C <= 99)){
digitWrite (7, 9);
if (therm3C == 90) (digitWrite (6,0));
if (therm3C == 91) (digitWrite (6,1));
if (therm3C == 92) (digitWrite (6,2));
if (therm3C == 93) (digitWrite (6,3));
if (therm3C == 94) (digitWrite (6,4));
if (therm3C == 95) (digitWrite (6,5));
if (therm3C == 96) (digitWrite (6,6));
if (therm3C == 97) (digitWrite (6,7));
if (therm3C == 98) (digitWrite (6,8));
if (therm3C == 99) (digitWrite (6,9));
}

Serial.print("CPU = ");
Serial.print(therm0C);
Serial.print("C / ");

Serial.print("GPU = ");
Serial.print(therm1C);
Serial.print("C / ");

Serial.print("Northbridge = "); //Change this to EE if you have a BC PS3.
Serial.print(therm2C);
Serial.print("C / ");

Serial.print("Intake = ");
Serial.print(therm3C);
Serial.println("C");
delay(500);
}

//
// Below here are the various functions; I put everything right in the sketch...I only
// like to use libraries built into Arduino, as it makes copying the sketch into
// arduino easier when you don't have to install libraries.
//
// Functions & Useage:
// -------------------
// celsiusConvert(X);    //Where "X" is 0-3, for the three thermistors; this function
//                       //is not usually used by itself, but instead by the "getTemps"
//                       //function.  If you are using a different thermistor, this is
//                       //the only area you must change.
//
// getTemps();           //This function will read all 4 sensors, 4 times each.  It
//                       //will then average the raw readings, and will call the
//                       //celsiusConvert function for each of the raw averages.
//                       //The outputs are "therm0C", "therm1C", "therm2C", & "therm3C".
//
// startUp (X);          //This command is only used to start the MCP23008 chips which
//                       //control the 7-segment displays.  "X" can be 0, 1, 2, or 3.
//
// decPointWrite (X, Y); //This command is used to turn the decimal points on and off.
//                       // X = 0-7; for the display number.
//                       // Y = 0 or 1. 0=Off, 1=On
//
// digitWrite (X, Y);    //This command writes individual digits to individual displays.
//                       //X = 0-7      - the digit being set
//                       //Y = 0-9, 10  - the number that will be displayed on the digit.
//                       //               0-9 are available.  "10" displays nothing.

void celsiusConvert(short yyyy){
if (yyyy == 0) (rawThermTMP = rawThermTMP000);
if (yyyy == 1) (rawThermTMP = rawThermTMP001);
if (yyyy == 2) (rawThermTMP = rawThermTMP002);
if (yyyy == 3) (rawThermTMP = rawThermTMP003);

if (rawThermTMP <= 58) (cThermTMP = 99);
if ((rawThermTMP >= 59) && (rawThermTMP <= 60)) (cThermTMP = 98);
if ((rawThermTMP >= 61) && (rawThermTMP <= 62)) (cThermTMP = 97);
if ((rawThermTMP >= 63) && (rawThermTMP <= 64)) (cThermTMP = 96);
if ((rawThermTMP >= 65) && (rawThermTMP <= 66)) (cThermTMP = 95);
if ((rawThermTMP >= 67) && (rawThermTMP <= 68)) (cThermTMP = 94);
if ((rawThermTMP >= 69) && (rawThermTMP <= 70)) (cThermTMP = 93);
if ((rawThermTMP >= 71) && (rawThermTMP <= 72)) (cThermTMP = 92);
if ((rawThermTMP >= 73) && (rawThermTMP <= 74)) (cThermTMP = 91);
if ((rawThermTMP >= 75) && (rawThermTMP <= 76)) (cThermTMP = 90);
if ((rawThermTMP >= 77) && (rawThermTMP <= 79)) (cThermTMP = 89);
if ((rawThermTMP >= 80) && (rawThermTMP <= 81)) (cThermTMP = 88);
if ((rawThermTMP >= 82) && (rawThermTMP <= 84)) (cThermTMP = 87);
if ((rawThermTMP >= 85) && (rawThermTMP <= 86)) (cThermTMP = 86);
if ((rawThermTMP >= 87) && (rawThermTMP <= 89)) (cThermTMP = 85);
if ((rawThermTMP >= 90) && (rawThermTMP <= 92)) (cThermTMP = 84);
if ((rawThermTMP >= 93) && (rawThermTMP <= 95)) (cThermTMP = 83);
if ((rawThermTMP >= 96) && (rawThermTMP <= 98)) (cThermTMP = 82);
if ((rawThermTMP >= 99) && (rawThermTMP <= 101)) (cThermTMP = 81);
if ((rawThermTMP >= 102) && (rawThermTMP <= 104)) (cThermTMP = 80);
if ((rawThermTMP >= 105) && (rawThermTMP <= 108)) (cThermTMP = 79);
if ((rawThermTMP >= 109) && (rawThermTMP <= 111)) (cThermTMP = 78);
if ((rawThermTMP >= 112) && (rawThermTMP <= 115)) (cThermTMP = 77);
if ((rawThermTMP >= 116) && (rawThermTMP <= 118)) (cThermTMP = 76);
if ((rawThermTMP >= 119) && (rawThermTMP <= 122)) (cThermTMP = 75);
if ((rawThermTMP >= 123) && (rawThermTMP <= 126)) (cThermTMP = 74);
if ((rawThermTMP >= 127) && (rawThermTMP <= 130)) (cThermTMP = 73);
if ((rawThermTMP >= 131) && (rawThermTMP <= 134)) (cThermTMP = 72);
if ((rawThermTMP >= 135) && (rawThermTMP <= 138)) (cThermTMP = 71);
if ((rawThermTMP >= 139) && (rawThermTMP <= 142)) (cThermTMP = 70);
if ((rawThermTMP >= 143) && (rawThermTMP <= 147)) (cThermTMP = 69);
if ((rawThermTMP >= 148) && (rawThermTMP <= 152)) (cThermTMP = 68);
if ((rawThermTMP >= 153) && (rawThermTMP <= 157)) (cThermTMP = 67);
if ((rawThermTMP >= 158) && (rawThermTMP <= 162)) (cThermTMP = 66);
if ((rawThermTMP >= 163) && (rawThermTMP <= 167)) (cThermTMP = 65);
if ((rawThermTMP >= 168) && (rawThermTMP <= 173)) (cThermTMP = 64);
if ((rawThermTMP >= 174) && (rawThermTMP <= 178)) (cThermTMP = 63);
if ((rawThermTMP >= 179) && (rawThermTMP <= 184)) (cThermTMP = 62);
if ((rawThermTMP >= 185) && (rawThermTMP <= 189)) (cThermTMP = 61);
if ((rawThermTMP >= 190) && (rawThermTMP <= 195)) (cThermTMP = 60);
if ((rawThermTMP >= 196) && (rawThermTMP <= 201)) (cThermTMP = 59);
if ((rawThermTMP >= 202) && (rawThermTMP <= 208)) (cThermTMP = 58);
if ((rawThermTMP >= 209) && (rawThermTMP <= 214)) (cThermTMP = 57);
if ((rawThermTMP >= 215) && (rawThermTMP <= 221)) (cThermTMP = 56);
if ((rawThermTMP >= 222) && (rawThermTMP <= 227)) (cThermTMP = 55);
if ((rawThermTMP >= 228) && (rawThermTMP <= 235)) (cThermTMP = 54);
if ((rawThermTMP >= 236) && (rawThermTMP <= 242)) (cThermTMP = 53);
if ((rawThermTMP >= 243) && (rawThermTMP <= 249)) (cThermTMP = 52);
if ((rawThermTMP >= 250) && (rawThermTMP <= 257)) (cThermTMP = 51);
if ((rawThermTMP >= 258) && (rawThermTMP <= 265)) (cThermTMP = 50);
if ((rawThermTMP >= 266) && (rawThermTMP <= 273)) (cThermTMP = 49);
if ((rawThermTMP >= 274) && (rawThermTMP <= 281)) (cThermTMP = 48);
if ((rawThermTMP >= 282) && (rawThermTMP <= 289)) (cThermTMP = 47);
if ((rawThermTMP >= 290) && (rawThermTMP <= 298)) (cThermTMP = 46);
if ((rawThermTMP >= 299) && (rawThermTMP <= 306)) (cThermTMP = 45);
if ((rawThermTMP >= 307) && (rawThermTMP <= 315)) (cThermTMP = 44);
if ((rawThermTMP >= 316) && (rawThermTMP <= 325)) (cThermTMP = 43);
if ((rawThermTMP >= 326) && (rawThermTMP <= 334)) (cThermTMP = 42);
if ((rawThermTMP >= 335) && (rawThermTMP <= 343)) (cThermTMP = 41);
if ((rawThermTMP >= 344) && (rawThermTMP <= 353)) (cThermTMP = 40);
if ((rawThermTMP >= 354) && (rawThermTMP <= 363)) (cThermTMP = 39);
if ((rawThermTMP >= 364) && (rawThermTMP <= 373)) (cThermTMP = 38);
if ((rawThermTMP >= 374) && (rawThermTMP <= 384)) (cThermTMP = 37);
if ((rawThermTMP >= 385) && (rawThermTMP <= 394)) (cThermTMP = 36);
if ((rawThermTMP >= 395) && (rawThermTMP <= 404)) (cThermTMP = 35);
if ((rawThermTMP >= 405) && (rawThermTMP <= 415)) (cThermTMP = 34);
if ((rawThermTMP >= 416) && (rawThermTMP <= 426)) (cThermTMP = 33);
if ((rawThermTMP >= 427) && (rawThermTMP <= 437)) (cThermTMP = 32);
if ((rawThermTMP >= 438) && (rawThermTMP <= 448)) (cThermTMP = 31);
if ((rawThermTMP >= 449) && (rawThermTMP <= 459)) (cThermTMP = 30);
if ((rawThermTMP >= 460) && (rawThermTMP <= 471)) (cThermTMP = 29);
if ((rawThermTMP >= 472) && (rawThermTMP <= 483)) (cThermTMP = 28);
if ((rawThermTMP >= 484) && (rawThermTMP <= 494)) (cThermTMP = 27);
if ((rawThermTMP >= 495) && (rawThermTMP <= 505)) (cThermTMP = 26);
if ((rawThermTMP >= 506) && (rawThermTMP <= 517)) (cThermTMP = 25);
if ((rawThermTMP >= 518) && (rawThermTMP <= 529)) (cThermTMP = 24);
if ((rawThermTMP >= 530) && (rawThermTMP <= 541)) (cThermTMP = 23);
if ((rawThermTMP >= 542) && (rawThermTMP <= 552)) (cThermTMP = 22);
if ((rawThermTMP >= 553) && (rawThermTMP <= 564)) (cThermTMP = 21);
if ((rawThermTMP >= 565) && (rawThermTMP <= 576)) (cThermTMP = 20);
if ((rawThermTMP >= 577) && (rawThermTMP <= 588)) (cThermTMP = 19);
if ((rawThermTMP >= 589) && (rawThermTMP <= 600)) (cThermTMP = 18);
if ((rawThermTMP >= 601) && (rawThermTMP <= 612)) (cThermTMP = 17);
if ((rawThermTMP >= 613) && (rawThermTMP <= 623)) (cThermTMP = 16);
if ((rawThermTMP >= 624) && (rawThermTMP <= 635)) (cThermTMP = 15);
if ((rawThermTMP >= 636) && (rawThermTMP <= 647)) (cThermTMP = 14);
if ((rawThermTMP >= 648) && (rawThermTMP <= 658)) (cThermTMP = 13);
if ((rawThermTMP >= 659) && (rawThermTMP <= 670)) (cThermTMP = 12);
if ((rawThermTMP >= 671) && (rawThermTMP <= 681)) (cThermTMP = 11);
if ((rawThermTMP >= 682) && (rawThermTMP <= 692)) (cThermTMP = 10);
if ((rawThermTMP >= 693) && (rawThermTMP <= 703)) (cThermTMP = 9);
if ((rawThermTMP >= 704) && (rawThermTMP <= 714)) (cThermTMP = 8);
if ((rawThermTMP >= 715) && (rawThermTMP <= 725)) (cThermTMP = 7);
if ((rawThermTMP >= 726) && (rawThermTMP <= 736)) (cThermTMP = 6);
if ((rawThermTMP >= 737) && (rawThermTMP <= 746)) (cThermTMP = 5);
if ((rawThermTMP >= 747) && (rawThermTMP <= 756)) (cThermTMP = 4);
if ((rawThermTMP >= 757) && (rawThermTMP <= 766)) (cThermTMP = 3);
if ((rawThermTMP >= 767) && (rawThermTMP <= 776)) (cThermTMP = 2);
if ((rawThermTMP >= 777) && (rawThermTMP <= 786)) (cThermTMP = 1);
if (rawThermTMP >= 786) (cThermTMP = 0);

if (yyyy == 0) (therm0C = cThermTMP);
if (yyyy == 1) (therm1C = cThermTMP);
if (yyyy == 2) (therm2C = cThermTMP);
if (yyyy == 3) (therm3C = cThermTMP);
}

void getTemps(){
rawThermTMP00 = analogRead(thermPin0);
rawThermTMP01 = analogRead(thermPin1);
rawThermTMP02 = analogRead(thermPin2);
rawThermTMP03 = analogRead(thermPin3);
delay(50);
rawThermTMP04 = analogRead(thermPin0);
rawThermTMP05 = analogRead(thermPin1);
rawThermTMP06 = analogRead(thermPin2);
rawThermTMP07 = analogRead(thermPin3);
delay(50);
rawThermTMP08 = analogRead(thermPin0);
rawThermTMP09 = analogRead(thermPin1);
rawThermTMP10 = analogRead(thermPin2);
rawThermTMP11 = analogRead(thermPin3);
delay(50);
rawThermTMP12 = analogRead(thermPin0);
rawThermTMP13 = analogRead(thermPin1);
rawThermTMP14 = analogRead(thermPin2);
rawThermTMP15 = analogRead(thermPin3);
delay(50);
rawThermTMP16 = (rawThermTMP00 + rawThermTMP04);
rawThermTMP17 = (rawThermTMP08 + rawThermTMP12);

rawThermTMP18 = (rawThermTMP01 + rawThermTMP05);
rawThermTMP19 = (rawThermTMP09 + rawThermTMP13);

rawThermTMP20 = (rawThermTMP02 + rawThermTMP06);
rawThermTMP21 = (rawThermTMP10 + rawThermTMP14);

rawThermTMP22 = (rawThermTMP03 + rawThermTMP07);
rawThermTMP23 = (rawThermTMP11 + rawThermTMP15);

rawThermTMP24 = (rawThermTMP16 + rawThermTMP17);
rawThermTMP25 = (rawThermTMP18 + rawThermTMP19);
rawThermTMP26 = (rawThermTMP20 + rawThermTMP21);
rawThermTMP27 = (rawThermTMP22 + rawThermTMP23);

rawThermTMP000 = (rawThermTMP24 / 4);
rawThermTMP001 = (rawThermTMP25 / 4);
rawThermTMP002 = (rawThermTMP26 / 4);
rawThermTMP003 = (rawThermTMP27 / 4);

celsiusConvert(0);
celsiusConvert(1);
celsiusConvert(2);
celsiusConvert(3);
}

void digitWrite (uint8_t aaaa, uint8_t bbbb){
if (aaaa == 0) (cccc = 0x20);
if (aaaa == 0) (cccc = 0x20);
if (aaaa == 1) (cccc = 0x21);
if (aaaa == 2) (cccc = 0x22);
if (aaaa == 3) (cccc = 0x23);
if (aaaa == 4) (cccc = 0x24);
if (aaaa == 5) (cccc = 0x25);
if (aaaa == 6) (cccc = 0x26);
if (aaaa == 7) (cccc = 0x27);
if (aaaa == 0) (gpiotmp = gpio000);
if (aaaa == 1) (gpiotmp = gpio001);
if (aaaa == 2) (gpiotmp = gpio002);
if (aaaa == 3) (gpiotmp = gpio003);
if (aaaa == 4) (gpiotmp = gpio004);
if (aaaa == 5) (gpiotmp = gpio005);
if (aaaa == 6) (gpiotmp = gpio006);
if (aaaa == 7) (gpiotmp = gpio007);

if (bbbb == 0){
gpiotmp |= 1 << 6;     //Set output 1 as hot
gpiotmp &= ~(1 << 0);  //Set output 0 as ground
gpiotmp &= ~(1 << 3);  //Set output 2 as ground
gpiotmp &= ~(1 << 5);  //Set output 3 as ground
gpiotmp &= ~(1 << 1);  //Set output 4 as ground
gpiotmp &= ~(1 << 4);  //Set output 5 as ground
gpiotmp &= ~(1 << 2);  //Set output 6 as ground
}

if (bbbb == 1){
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 2);
gpiotmp |= 1 << 0;
gpiotmp |= 1 << 6;
gpiotmp |= 1 << 3;
gpiotmp |= 1 << 5;
gpiotmp |= 1 << 4;
}

if (bbbb == 2){
gpiotmp &= ~(1 << 0);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 3);
gpiotmp |= 1 << 5;
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 4);
gpiotmp |= 1 << 2;
}

if (bbbb == 3){
gpiotmp &= ~(1 << 3);
gpiotmp &= ~(1 << 2);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 0);
gpiotmp |= 1 << 5;
gpiotmp |= 1 << 4;
}

if (bbbb == 4){
gpiotmp &= ~(1 << 2);
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 5);
gpiotmp |= 1 << 0;
gpiotmp |= 1 << 3;
gpiotmp |= 1 << 4;
}

if (bbbb == 5){
gpiotmp &= ~(1 << 3);
gpiotmp &= ~(1 << 2);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 5);
gpiotmp &= ~(1 << 0);
gpiotmp |= 1 << 1;
gpiotmp |= 1 << 4;
}

if (bbbb == 6){
gpiotmp &= ~(1 << 0);
gpiotmp &= ~(1 << 5);
gpiotmp &= ~(1 << 4);
gpiotmp &= ~(1 << 3);
gpiotmp &= ~(1 << 2);
gpiotmp &= ~(1 << 6);
gpiotmp |= 1 << 1;
}

if (bbbb == 7){
gpiotmp &= ~(1 << 0);
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 2);
gpiotmp |= 1 << 6;
gpiotmp |= 1 << 3;
gpiotmp |= 1 << 5;
gpiotmp |= 1 << 4;
}

if (bbbb == 8){
gpiotmp &= ~(1 << 0);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 3);
gpiotmp &= ~(1 << 5);
gpiotmp &= ~(1 << 1);
gpiotmp &= ~(1 << 4);
gpiotmp &= ~(1 << 2);
}

if (bbbb == 9){
gpiotmp &= ~(1 << 0);
gpiotmp &= ~(1 << 6);
gpiotmp &= ~(1 << 3);
gpiotmp &= ~(1 << 5);
gpiotmp &= ~(1 << 1);
gpiotmp |= 1 << 4;
gpiotmp &= ~(1 << 2);
}

if (bbbb == 10){
gpiotmp |= 1 << 0;
gpiotmp |= 1 << 6;
gpiotmp |= 1 << 3;
gpiotmp |= 1 << 5;
gpiotmp |= 1 << 1;
gpiotmp |= 1 << 4;
gpiotmp |= 1 << 2;
}

if (aaaa == 0) (gpio000 = gpiotmp);
if (aaaa == 1) (gpio001 = gpiotmp);
if (aaaa == 2) (gpio002 = gpiotmp);
if (aaaa == 3) (gpio003 = gpiotmp);
if (aaaa == 4) (gpio004 = gpiotmp);
if (aaaa == 5) (gpio005 = gpiotmp);
if (aaaa == 6) (gpio006 = gpiotmp);
if (aaaa == 7) (gpio007 = gpiotmp);

Wire.beginTransmission(cccc);
Wire.send(0x09);
Wire.send(gpiotmp);
Wire.endTransmission();
}

void decPointWrite (short dddd, short eeee){
if (dddd == 0) (gpiotmp = gpio000);  //Devices are numbered 0-7.
if (dddd == 1) (gpiotmp = gpio001);
if (dddd == 2) (gpiotmp = gpio002);
if (dddd == 3) (gpiotmp = gpio003);
if (dddd == 4) (gpiotmp = gpio004);
if (dddd == 5) (gpiotmp = gpio005);
if (dddd == 6) (gpiotmp = gpio006);
if (dddd == 7) (gpiotmp = gpio007);

if (eeee == 0) (gpiotmp |= 1 << 7);
if (eeee == 1) (gpiotmp &= ~(1 << 7));

if (dddd == 0) (gpio000 = gpiotmp);
if (dddd == 1) (gpio001 = gpiotmp);
if (dddd == 2) (gpio002 = gpiotmp);
if (dddd == 3) (gpio003 = gpiotmp);
if (dddd == 4) (gpio004 = gpiotmp);
if (dddd == 5) (gpio005 = gpiotmp);
if (dddd == 6) (gpio006 = gpiotmp);
if (dddd == 7) (gpio007 = gpiotmp);

Wire.beginTransmission(dddd);
Wire.send(0x09);
Wire.send(gpiotmp);
Wire.endTransmission();
}

void startUp(uint8_t X){
Wire.begin();
Wire.beginTransmission(X);
Wire.send(0x00);
Wire.send(0xFF);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.endTransmission();

Wire.beginTransmission(X);
Wire.send(0x00);
Wire.send(0x00);
Wire.endTransmission();
}