#include "Wire.h"
#include "Adafruit_TCS34725.h"
#include "Adafruit_Thermal.h"
#include "SoftwareSerial.h"
#include <Wire.h>
#include "RTClib.h"
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE);// SPI
// lcd
// GND - GND
// VCC - 5V
// RS - 10/S
// R/W - 11/MOSI
// E - 13/SCK
// PSB - GND
// BLA - 5V
// BLK - GND
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"MINGGU", "SENIN", "SELASA", "RABU", "KAMIS", "JUM'AT", "SABTU"};
int HOUR = 0, MINUT = 0, SECOND = 0; //Variable to store current time
#define TX_PIN 6 // Arduino transmit YELLOW WIRE labeled RX on printer
#define RX_PIN 5 // Arduino receive GREEN WIRE labeled TX on printer
#define buzzer 3
#define sensor A2
int Countersensor = 0;
int red = 0; // mesin 1
int green = 0;// mesin 2
int blue = 0; // mesin 3
int CounterRed = 0;
int CounterBlue = 0;
int CounterGreen = 0;
int CounterPutih = 0;
int CounterBiru = 0;
int ActiveColor = 0;
int ActiveColor2 = 0;
int jamnow = 0;
unsigned long startTime1 = 0;
unsigned long duration_charge1 = 500;
unsigned long duration_charge2 = 1000;
bool start_count = 0;
String datevalue = "", timevalue = "", counter = "", counterRed = "", counterGreen = "", counterBlue = "";
SoftwareSerial mySerial(RX_PIN, TX_PIN); // Declare SoftwareSerial obj first
Adafruit_Thermal printer(&mySerial); // Pass addr to printer constructor
byte gammatable[256];
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
void draw(void) {
u8g.setFont(u8g_font_6x10);
u8g.drawStr( 0, 9, "MESIN 7 = ");
u8g.drawStr( 0, 20, "MESIN 8 = ");
u8g.drawStr( 0, 31, "MESIN 9 = ");
u8g.drawStr( 0, 64, "JUMLAH = ");
}
void mesin7(void) {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(66, 9);
u8g.print(CounterGreen);
}
void mesin8(void) {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(66, 20);
u8g.print(CounterRed);
}
void mesin9(void) {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(66, 31);
u8g.print(CounterBlue);
}
void jumlah(void) {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(66, 64);
u8g.print(Countersensor);
}
void setup() {
Serial.begin(9600);
Serial.println("Makerblog.at - MuMs Color Sensor");
mySerial.begin(9600); // Initialize SoftwareSerial
pinMode(buzzer, OUTPUT);
pinMode(sensor, INPUT);
if (tcs.begin()) {
// Alles OK
Serial.println("Sensor gefunden");
} else {
// Kein Sensor gefunden. Programm an dieser Stelle einfrieren
Serial.println("TCS34725 nicht gefunden ... Ablauf gestoppt!");
while (1); // Halt!
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
Serial.begin(9600);
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(_DATE_), F(_TIME_)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2018, 4, 27, 23, 40, 0));
}
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255, 255, 255);
}
printer.begin(); // Init printer (same regardless of serial type)
DateTime now = rtc.now();
jamnow = now.hour();
}
void loop() {
// Der Sensor liefert Werte für R, G, B und einen Clear-Wert zurück
uint16_t clearcol, red, green, blue;
float average, r, g, b;
delay(100); // Farbmessung dauert c. 50ms
tcs.getRawData(&red, &green, &blue, &clearcol);
// Mein Versuch einer Farbbestimmung für
// die 5 M&M-Farben Rot, Grün, Blau, Orange und Gelb
// Durchschnitt von RGB ermitteln
average = (red + green + blue) / 3;
// Farbwerte durch Durchschnitt,
// alle Werte bewegen sich jetzt rund um 1
r = red / average;
g = green / average;
b = blue / average;
// Clear-Wert und r,g,b seriell ausgeben zur Kontrolle
// r,g und b sollten sich ca. zwischen 0,5 und 1,5
// bewegen. Sieht der Sensor rot, dann sollte r deutlich über 1.0
// liegen, g und b zwischen 0.5 und 1.0 usw.
Serial.print("\tClear:"); Serial.print(clearcol);
Serial.print("\tRed:"); Serial.print(r);
Serial.print("\tGreen:"); Serial.print(g);
Serial.print("\tBlue:"); Serial.print(b);
// Versuch der Farbfeststellung anhand der r,g,b-Werte.
// Am besten mit Rot, Grün, Blau anfangen die die Schwellenwerte
// mit der seriellen Ausgabe entsprechend anpassen
int val = digitalRead(sensor);
//fungsi di bawah untuk Timer on off sinyal adaya sensor
if (val == LOW) {
startTime1 = millis();
if (!start_count && millis() - startTime1 >= duration_charge1) {
start_count = true;
Countersensor ++;
}
} else {
startTime1 = millis();
if (start_count && millis() - startTime1 >= duration_charge2) {
start_count = false;
}
}
if (start_count) {
//Clear:111 Red:0.95 Green:1.14
if ((clearcol < 600) && (clearcol > 180) && (r < 0.70) && (r > 0.50) && (g < 1.50) && (g > 1.20) && (b < 1.15) && (b > 0.90)) {
Serial.print("\tHijau");
if (ActiveColor != 2)
{
CounterGreen ++;
ActiveColor = 2;
Serial.println(CounterGreen);
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
delay(50);
}
else if ((clearcol < 350) && (clearcol > 80) && (r < 1.80) && (r > 1.25) && (g < 1.00) && (g > 0.60) && (b < 1.00) && (b > 0.65)) {
Serial.print("\tMerah");
if (ActiveColor != 3)
{
CounterRed ++;
ActiveColor = 3;
Serial.println(CounterRed);
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
delay(50);
}
else if ((clearcol < 750) && (clearcol > 140) && (r < 0.95) && (r > 0.60) && (g < 1.20) && (g > 0.95) && (b < 1.25) && (b > 0.80)) {
Serial.print("\tAbu");
if (ActiveColor != 4)
{
CounterBlue ++;
ActiveColor = 4;
Serial.println(CounterBlue);
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
delay(60);
}
else {
Serial.print("\tNTE AYA ");
DateTime now = rtc.now();
timevalue = "JAM:" + String(now.hour()) + ':' + String(now.minute()) + ':' + String(now.second());
Serial.print(timevalue);
}
}
u8g.firstPage();
do {
draw();
mesin7();
mesin8();
mesin9();
jumlah();
}
while ( u8g.nextPage() );
delay(10);
DateTime now = rtc.now();
if (now.hour() != jamnow) {
printer.wake(); // MUST wake() before printing again, even if reset
printer.setDefault(); // Restore printer to defaults
cetak();
jamnow = now.hour();
Countersensor = 0;
CounterRed = 0;
CounterBlue = 0;
CounterGreen = 0;
}
// Zeilenwechsel ausgeben
Serial.println("");
delay(10);
}
void cetak() {
DateTime now = rtc.now();
datevalue = "TANGGAL:" + String(now.day()) + '/' + String(now.month()) + '/' + String(now.year()) + "\t";
timevalue = "JAM:" + String(now.hour()) + ':' + String(now.minute()) + ':' + String(now.second());
//Serial.println(counter);
printer.justify('C');
printer.println("* COUNTER SENSOR ***\n");
printer.justify('L');
printer.setSize('M'); // Set type size, accepts 'S', 'M', 'L'
printer.println("MESIN 7: " + String(CounterGreen));
printer.justify('L');
printer.setSize('M');
printer.println("MESIN 8: " + String(CounterRed));
printer.justify('L');
printer.setSize('M');
printer.println("MESIN 9: " + String(CounterBlue));
printer.println("");
printer.justify('L');
printer.setSize('M');
printer.println("JUMLAH : " + String(Countersensor));
printer.println("");
printer.justify('C');
printer.setSize('S');
printer.println("HARI: " + String(daysOfTheWeek[now.dayOfTheWeek()]));
printer.print(datevalue);
printer.println(timevalue);
printer.println("");
printer.write(10);
printer.write(10);
printer.write(10);
printer.feed(2);
}