/*
https://www.facebook.com/photo.php?fbid=10207546406244684&set=a.3625799690043.2130107.1425549170&type=3&theater
*/
int latchPin = 3;
int dataPin = 4;
int clockPin = 2;
int pH_1=0;
float pH_2=0;
float pH=0;
byte switchVar1 = 0;
byte switchVar2 = 0;
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
}
void loop() {
digitalWrite(latchPin,1);
delayMicroseconds(20);
digitalWrite(latchPin,0);
switchVar1 = shiftIn(dataPin, clockPin);
switchVar2 = shiftIn(dataPin, clockPin);
// Serial.println(switchVar1, BIN);
//Serial.println(switchVar2, BIN);
// Translating the first two digits
switch (switchVar1) {
case B00000110:
pH_1=1;
break;
case B01011011:
pH_1=2;
break;
case B01001111:
pH_1=3;
break;
case B01100110:
pH_1=4;
break;
case B01101101:
pH_1=5;
break;
case B01111101:
pH_1=6;
break;
case B00000111:
pH_1=7;
break;
case B01111111:
pH_1=8;
break;
case B01101111:
pH_1=9;
break;
case B00111111:
pH_1=0;
break;
case B10111111:
pH_1=10;
break;
case B10000110:
pH_1=11;
break;
case B11011011:
pH_1=12;
break;
case B11001111:
pH_1=13;
break;
case B11100110:
pH_1=14;
break;
case B11101101:
pH_1=15;
break;
case B11111101:
pH_1=16;
break;
case B10000111:
pH_1=17;
break;
case B11111111:
pH_1=18;
break;
case B11101111:
pH_1=19;
default:
pH_1=-1;
}
// Translating the digit after the decimal
switch (switchVar2) {
case B00000110:
pH_2=0.1;
break;
case B01011011:
pH_2=0.2;
break;
case B01001111:
pH_2=0.3;
break;
case B01100110:
pH_2=0.4;
break;
case B01101101:
pH_2=0.5;
break;
case B01111101:
pH_2=0.6;
break;
case B00000111:
pH_2=0.7;
break;
case B01111111:
pH_2=0.8;
break;
case B01101111:
pH_2=0.9;
break;
case B00111111:
pH_2=0.0;
break;
default:
pH_2=-1;
}
// Calculating pH
pH = pH_1+pH_2;
// Avoiding garbage
if (pH>0){
Serial.print("pH Integer: ");
Serial.print(pH_1);
Serial.print(" pH Decimal: ");
Serial.print(pH_2);
Serial.print(" pH Measured: ");
Serial.println(pH,1);
} else {
pH = 0;
}
delay(100);
}
byte shiftIn(int myDataPin, int myClockPin) {
int i;
int temp = 0;
int pinState;
byte myDataIn = 0;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, INPUT);
for (i=7; i>=0; i--)
{
digitalWrite(myClockPin, 0);
delayMicroseconds(10);
temp = digitalRead(myDataPin);
if (temp) {
pinState = 1;
myDataIn = myDataIn | (1 << i);
}
else {
pinState = 0;
}
digitalWrite(myClockPin, 1);
}
return myDataIn;
}
Comments