// TCS230 or TCS3200 pins wiring to Arduino
#define S0 8
#define S1 9
#define S2 10
#define S3 11
#define sensorOut 12
int Li = 17;
int Lii = 1;
int Ri = -1;
int Rii = -1;
//LCD Library
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Library LCD I2C
LiquidCrystal_I2C lcd(0x27,16,2); //Alamat I2C
int screenWidth = 16;
int screenHeight = 2;
// ini text untuk scrolling
String line1 = "Ini scrolling text bro";
int stringStart, stringStop = 0;
int scrollCursor = screenWidth;
// Stores frequency read by the photodiodes
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
// Stores the red. green and blue colors
int redColor = 0;
int greenColor = 0;
int blueColor = 0;
void setup() {
//Setting LCD
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
lcd.backlight();
// Setting the outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(sensorOut, INPUT);
// Setting frequency scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Begins serial communication
Serial.begin(9600);
//Tampilan Awal LCD
lcd.clear();
for (int i = 0; i <= 13; i++) {
lcd.setCursor(0, 0);
lcd.print(Scroll_LCD_Right(" Alat Uji "));
delay(200);
}
for (int i = 0; i <= 50; i++) {
lcd.setCursor(0, 1);
lcd.print(Scroll_LCD_Left("Kualitas Air Minum Menggunakan Arduino Uno & TCS2300"));
delay(200);
}
/*
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Alat Uji Kualitas Air Minum ");
for (int positionCounter = 0; positionCounter <= 19; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(350);
}
delay(300);
*/
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Dibuat Oleh: ");
delay(1000);
lcd.setCursor(0,1);
lcd.print("ASRIN AINUN");
delay(3000);
}
void loop() {
// Setting RED (R) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
redFrequency = pulseIn(sensorOut, LOW);
redColor = redFrequency;
// Remaping the value of the RED (R) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// redColor = map(redFrequency, 70, 120, 255,0);
// redColor = map(redFrequency, 39, 103, 255,0);
// Printing the RED (R) value
Serial.print("R = ");
Serial.print(redFrequency);
delay(100);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
greenFrequency = pulseIn(sensorOut, LOW);
greenColor = greenFrequency;
// Remaping the value of the GREEN (G) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// greenColor = map(greenFrequency, 100, 199, 255, 0);
// greenColor = map(greenFrequency, 61, 109, 255, 0);
// Printing the GREEN (G) value
Serial.print(" G = ");
Serial.print(greenFrequency);
delay(100);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
blueFrequency = pulseIn(sensorOut, LOW);
blueColor= blueFrequency;
// Remaping the value of the BLUE (B) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// blueColor = map(blueFrequency, 38, 84, 255, 0);
//blueColor = map(blueFrequency, 38, 125, 255, 0);
// Printing the BLUE (B) value
Serial.print(" B = ");
Serial.print(blueFrequency);
delay(100);
Serial.println();
if((redColor >=170 && redColor <=202 ) && (greenColor >=170 && greenColor <=201) && (blueColor >=120 && blueColor <=142)){
Serial.println("Masukkan Sample Air Minum ! ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Masukkan Sample Air Minum!");
for (int positionCounter = 0; positionCounter <= 19; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(450);
}
}
if((redColor >=240 && redColor <=291 ) && (greenColor >=250 && greenColor <=306) && (blueColor >=210 && blueColor <=231)){
Serial.println("PH RENDAH");
phrendah();
}
if((redColor >=290 && redColor <320 ) && (greenColor >=300 && greenColor <=330) && (blueColor >=200 && blueColor <=230)){
Serial.println("PH NORMAL");
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PH Normal");
lcd.setCursor(0,1);
lcd.print("Kualitas Air Bagus");
for (int positionCounter = 7; positionCounter > 0; positionCounter--) {
lcd.scrollDisplayLeft();
delay(500);
}
delay(500);
}
if((redColor >=310 && redColor <=360 ) && (greenColor >=330 && greenColor <=350) && (blueColor >=220 && blueColor <=240)){
Serial.println("PH TINGGI");
phtinggi();
}
}
//----------------------------------
String Scroll_LCD_Left(String StrDisplay){
String result;
String StrProcess = " " + StrDisplay + " ";
result = StrProcess.substring(Li,Lii);
Li++;
Lii++;
if (Li>StrProcess.length()){
Li=16;
Lii=0;
}
return result;
}
void Clear_Scroll_LCD_Left(){
Li=16;
Lii=0;
}
//----------------------------------
String Scroll_LCD_Right(String StrDisplay){
String result;
String StrProcess = " " + StrDisplay + " ";
if (Rii<1){
Ri = StrProcess.length();
Rii = Ri-16;
}
result = StrProcess.substring(Rii,Ri);
Ri--;
Rii--;
return result;
}
void Clear_Scroll_LCD_Right(){
Ri=-1;
Rii=-1;
}
void phtinggi(){
lcd.clear();
lcd.print(" PH Tinggi ");
delay(100);
for (int i = 0; i <= 157; i++) {
lcd.setCursor(0, 1);
lcd.print(Scroll_LCD_Left("Jika dikomsumsi rutin dalam jangka waktu yang lama dapat menyebabkan : Kerang Otot, Kesemutan, Nyeri Dada, Sesak Nafas, Demam, Muntah-muntah dan berkeringat"));
delay(200);
}
delay (2000);
}
void phrendah(){
lcd.clear();
lcd.print(" PH Rendah ");
delay (100);
for (int i = 0; i <= 129; i++) {
lcd.setCursor(0, 1);
lcd.print(Scroll_LCD_Left("Jika dikomsumsi rutin dalam jangka waktu yang lama dapat menyebabkan : Kelelahan, sakit kepala, mengantuk, kulit melepuh, alergi"));
delay(200);
}
delay (2000);
}
Comments