#include <SPI.h> //Library SPI
#include <Wire.h> //Library Wire
#include <Adafruit_GFX.h> //Library GFX
#include <Adafruit_SSD1306.h> //Library OLED SSD1306
#define SCREEN_WIDTH 128 //Panjang LCD OLED
#define SCREEN_HEIGHT 64 //Tinggi LCD OLED
#define OLED_RESET -1 //Pin reset terhubung dengan arduino
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
double i1 = 0;
double i2 = 0;
double i3 = 0;
double a = millis();
double b = millis();
double c = millis();
double current;
double x, y, z;
int start = 0;
int lap1 = 0;
int lap2 = 0;
int lap3 = 0;
double ia1 = 0;
double ia2 = 0;
double ia3 = 0;
double ia11 = 0;
double ia22 = 0;
double ia33 = 0;
double ia111 = 0;
double ia222 = 0;
double ia333 = 0;
float dis =0;
float abc;
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { //Alamat OLED
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
pinMode(4, INPUT);
digitalWrite(4, HIGH);
}
display.clearDisplay();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("CAR01 CAR02 CAR03");
display.display();
}
void TimeLap(){
display.clearDisplay();
delay(10);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("CAR01 CAR02 CAR03");
if(digitalRead(2) == LOW)
{
x = millis();
i1 = (x - a) / 1000;
if(i1 > 1)
{
lap1++;
Serial.print("Lap1: ");
Serial.print(lap1);
Serial.print("\t\t");
Serial.println(i1);
a = millis();
}
}
if(digitalRead(3) == LOW)
{
y = millis();
i2 = (y - b) / 1000;
if(i2 > 1)
{
lap2++;
Serial.print("Lap2: ");
Serial.print(lap2);
Serial.print("\t\t");
Serial.println(i2);
b = millis();
}
}
if(digitalRead(4) == LOW)
{
z = millis();
i3 = (z - c) / 1000;
if(i3 > 1)
{
lap3++;
Serial.print("Lap3: ");
Serial.print(lap3);
Serial.print("\t\t");
Serial.println(i3);
c = millis();
}
}
if(lap1==0){
abc = millis()-current;
dis = abc/1000;
//ia1=dis-current;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,14);
ia1=dis;
display.print(dis);
}
if(lap2==0){
abc = millis()-current;
dis = abc/1000;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,14);
display.print(dis);
ia2=dis;
}
if(lap3==0){
abc = millis()-current;
dis = abc/1000;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,14);
display.print(dis);
ia3=dis;
}
if(lap1==1){
abc = millis()-ia1-current;
dis = abc/1000;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,14);
display.print(ia1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.print(dis-ia1);
}
if(lap2==1){
abc = millis()-ia2-current;
dis = abc/1000;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,14);
display.print(ia2);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,28);
display.print(dis-ia2);
}
if(lap3==1){
abc = millis()-ia3-current;
dis = abc/1000;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,14);
display.print(ia3);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,28);
display.print(dis-ia3);
}
if(lap1==2){
ia11=i1;
abc = millis()-ia1-current;
dis = abc/1000;
ia111=dis-ia1-ia11;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,14);
display.print(ia1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.print(ia11);
display.setTextColor(WHITE);
display.setCursor(0,42);
display.print(ia111);
}
if(lap2==2){
ia22=i2;
abc = millis()-ia2-current;
dis = abc/1000;
ia222=dis-ia2-ia22;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,14);
display.print(ia2);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,28);
display.print(ia22);
display.setTextColor(WHITE);
display.setCursor(48,42);
display.print(ia222);
}
if(lap3==2){
ia33=i3;
abc = millis()-ia3-current;
dis = abc/1000;
ia333=dis-ia3-ia33;
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,14);
display.print(ia3);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,28);
display.print(ia33);
display.setTextColor(WHITE);
display.setCursor(96,42);
display.print(ia333);
}
if(lap1==3){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,14);
display.print(ia1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.print(ia11);
display.setTextColor(WHITE);
display.setCursor(0,42);
display.print(ia111);
}
if(lap2==3){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,14);
display.print(ia2);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,28);
display.print(ia22);
display.setTextColor(WHITE);
display.setCursor(48,42);
display.print(ia222);
}
if(lap3==3){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,14);
display.print(ia3);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,28);
display.print(ia33);
display.setTextColor(WHITE);
display.setCursor(96,42);
display.print(ia333);
}
if(lap1==3)
{
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,57);
display.print(ia1+ia11+ia111);
}
if(lap2==3)
{
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,57);
display.print(ia2+ia22+ia222);
}
if(lap3==3)
{
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(96,57);
display.print(ia3+ia33+ia333);
}
if(lap1==3 && lap2==3 && lap3==3){
display.display();
exit(0);
}
display.display();
}
void loop() {
if(digitalRead(2) == LOW or digitalRead(3) == LOW or digitalRead(4) == LOW){
start++;
if(start==1){
current=millis();
}
}
if(start>0){
TimeLap();
Serial.println(start);
}
}