Advertisement
AlexShu

pH Meter Hack Code

Apr 8th, 2015
33,414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.05 KB | None | 0 0
  1. /*
  2. Cheap DX pH meter hack by AlexShu
  3. Hardware: http://overskill.alexshu.com/cheap-ph-meter-hack-for-arduino/
  4. */
  5.  
  6. int latchPin = 3;
  7. int dataPin = 4;
  8. int clockPin = 2;
  9. int pH_1=0;
  10. float pH_2=0;
  11. float pH=0;
  12.  
  13. byte switchVar1 = 0;
  14. byte switchVar2 = 0;
  15.  
  16. void setup() {
  17.   Serial.begin(9600);
  18.  
  19.   pinMode(latchPin, OUTPUT);
  20.   pinMode(clockPin, OUTPUT);
  21.   pinMode(dataPin, INPUT);
  22.  
  23. }
  24.  
  25. void loop() {
  26.  
  27.   digitalWrite(latchPin,1);
  28.   delayMicroseconds(20);
  29.   digitalWrite(latchPin,0);
  30.  
  31.   switchVar1 = shiftIn(dataPin, clockPin);
  32.   switchVar2 = shiftIn(dataPin, clockPin);
  33.  
  34.  // Serial.println(switchVar1, BIN);
  35. //Serial.println(switchVar2, BIN);
  36.  
  37. // Translating the first two digits
  38.   switch (switchVar1) {
  39.   case B00000110:
  40.     pH_1=1;
  41.     break;
  42.   case B01011011:
  43.     pH_1=2;
  44.     break;
  45.   case B01001111:
  46.     pH_1=3;
  47.     break;
  48.   case B01100110:
  49.     pH_1=4;
  50.     break;    
  51.   case B01101101:
  52.     pH_1=5;
  53.     break;        
  54.   case B01111101:
  55.     pH_1=6;
  56.     break;    
  57.   case B00000111:
  58.     pH_1=7;
  59.     break;    
  60.     case B01111111:
  61.     pH_1=8;
  62.     break;    
  63.     case B01101111:
  64.     pH_1=9;
  65.     break;    
  66.     case B00111111:
  67.     pH_1=0;
  68.     break;    
  69.         case B10111111:
  70.     pH_1=10;
  71.     break;  
  72.       case B10000110:
  73.     pH_1=11;
  74.     break;
  75.   case B11011011:
  76.     pH_1=12;
  77.     break;
  78.   case B11001111:
  79.     pH_1=13;
  80.     break;
  81.   case B11100110:
  82.     pH_1=14;
  83.     break;    
  84.   case B11101101:
  85.     pH_1=15;
  86.     break;        
  87.   case B11111101:
  88.     pH_1=16;
  89.     break;    
  90.   case B10000111:
  91.     pH_1=17;
  92.     break;    
  93.     case B11111111:
  94.     pH_1=18;
  95.     break;    
  96.     case B11101111:
  97.     pH_1=19;
  98.   default:
  99.     pH_1=-1;
  100.   }
  101.  
  102. // Translating the digit after the decimal
  103.  switch (switchVar2) {
  104.     case B00000110:
  105.     pH_2=0.1;
  106.     break;
  107.   case B01011011:
  108.     pH_2=0.2;
  109.     break;
  110.   case B01001111:
  111.     pH_2=0.3;
  112.     break;
  113.   case B01100110:
  114.     pH_2=0.4;
  115.     break;    
  116.   case B01101101:
  117.     pH_2=0.5;
  118.     break;        
  119.   case B01111101:
  120.     pH_2=0.6;
  121.     break;    
  122.   case B00000111:
  123.     pH_2=0.7;
  124.     break;    
  125.     case B01111111:
  126.     pH_2=0.8;
  127.     break;    
  128.     case B01101111:
  129.     pH_2=0.9;
  130.     break;    
  131.     case B00111111:
  132.     pH_2=0.0;
  133.     break;  
  134.   default:
  135.     pH_2=-1;
  136.   }
  137.  
  138. // Calculating pH  
  139. pH = pH_1+pH_2;
  140. // Avoiding garbage
  141. if (pH>0){
  142. Serial.print("pH Integer:  ");  
  143. Serial.print(pH_1);  
  144. Serial.print("     pH Decimal:  ");  
  145. Serial.print(pH_2);
  146. Serial.print("          pH Measured:  ");  
  147. Serial.println(pH,1);
  148. } else {
  149.   pH = 0;
  150. }
  151. delay(100);
  152. }
  153.  
  154. byte shiftIn(int myDataPin, int myClockPin) {
  155.   int i;
  156.   int temp = 0;
  157.   int pinState;
  158.   byte myDataIn = 0;
  159.  
  160.   pinMode(myClockPin, OUTPUT);
  161.   pinMode(myDataPin, INPUT);
  162.  
  163.   for (i=7; i>=0; i--)
  164.   {
  165.     digitalWrite(myClockPin, 0);
  166.    delayMicroseconds(10);
  167.     temp = digitalRead(myDataPin);
  168.     if (temp) {
  169.       pinState = 1;
  170.       myDataIn = myDataIn | (1 << i);
  171.     }
  172.     else {
  173.       pinState = 0;
  174.     }
  175.     digitalWrite(myClockPin, 1);
  176.   }
  177.   return myDataIn;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement