#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // pixel ความกว้าง
#define SCREEN_HEIGHT 64 // pixel ความสูง
// กำหนดขาต่อ I2C กับจอ OLED
#define OLED_RESET -1 //ขา reset เป็น -1 ถ้าใช้ร่วมกับขา Arduino reset
Adafruit_SSD1306 OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int var = 0; // ตัวแปรสำหรับทดสอบแสดงผล
float Vread;
float Vmin=20;
float Vmax=0;
float Vavg = 0;
float Vtot = 0;
int VCounter = 0;
unsigned long Time_PlusTH;
unsigned long TH = 500; //Threshold for next cycle
float Sread;
float Savg = 0;
float Stot = 0;
int SCounter = 0;
int DisplayMode = 0;
unsigned long T_Button_press;
unsigned long T_Debounce = 300; //Button debounce time = 300 mS.
unsigned long T_Button_ready;
#define BUTTON_PIN 10
#define PIN_TRIG 3
#define PIN_ECHO 2
//////////////////////////////////////////////////////////////////////////////////
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);
OLED.setRotation(3); //rotates text on OLED 1=90 degrees, 2=180 degrees
pinMode(PIN_TRIG, OUTPUT); //Trigger
pinMode(PIN_ECHO, INPUT); //Echo
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Serial.begin(115200);
delay(2000); //delay 2sec before start recording
// Serial.begin(115200);
}
//////////////////////////////////////////////////////////////////////////////////
void loop() {
Vread = analogRead(A0);
Vread = (Vread*20)/1023;
if (Vread > Vmax) {Vmax = Vread;}
if (Vread < Vmin) {Vmin = Vread;}
Vtot += Vread;
VCounter++;
if (millis() >= Time_PlusTH)
{ Time_PlusTH = millis() + TH; //Define time for next cycle.
Vavg = Vtot/VCounter;
// Savg = Stot/SCounter;
// Start a new distance measurement:
// delay (80); //minimum measurement cycle of ultrasonic sensor = 60 ms.
digitalWrite(PIN_TRIG, HIGH); //Trigger
delayMicroseconds(20); //minimum 10 ms.
digitalWrite(PIN_TRIG, LOW);
// Read the result:
//int duration = pulseIn(PIN_ECHO, HIGH);
float duration = pulseIn(PIN_ECHO, HIGH); //Echo
Sread = (duration / 58 /100); //Distance in cm.
// if (Sread > 4.0) {Sread = 4.0;}
// Stot += Sread;
// SCounter++;
OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
OLED.setTextColor(WHITE, BLACK); //กำหนดข้อความสีขาว ฉากหลังสีดำ
OLED.setCursor(0, 0); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
//OLED.print(Vread); // แสดงผลข้อความ ALL
OLED.print(Vavg); // แสดงผลข้อความ ALL
OLED.println (" V");
// OLED.setTextSize(2);
// OLED.print("Max: ");
// OLED.println(Vmax);
// OLED.print("Min: ");
// OLED.println(Vmin);
OLED.setTextSize(2);
// OLED.setTextColor(BLACK, WHITE);
String TextOut = (String(Vmin) );
OLED.println(TextOut);
TextOut = (String(Vmax) + "," + String(VCounter*2) );
OLED.println(TextOut);
// OLED.setTextSize(1);
// TextOut = (" Ctr:" + String(VCounter));
// OLED.print (TextOut);
OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
// OLED.setTextColor(WHITE, BLACK);
if (Sread > 3.9) {OLED.print (">>>>");} else {OLED.print(Sread);} // แสดงผลข้อความ ALL
OLED.println (" m.");
OLED.display(); // สั่งให้จอแสดงผล
Vtot = 0;
VCounter = 0;
Stot = 0;
SCounter = 0;
}
}