[csharp] scs
Viewer
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
- /*spray disinfektan dan UV otomatis yang akan menyala ketika barang masuk ke box khusus
- yang di lengkapi suhu optimation di 30 derajat celcius tampilkan kondisi di OLED*/
- #include <Wire.h>
- #include <Adafruit_SSD1306.h>
- #include <Adafruit_GFX.h>
- #include <DHT.h>
- #include <Servo.h>
- // Definisikan parameter layar OLED
- #define LEBAR_LAYAR 128 // Ukuran OLED
- #define TINGGI_LAYAR 64
- #define OLED_RESET -1
- #define ALAMAT_I2C_OLED 0x3C
- Adafruit_SSD1306 display(LEBAR_LAYAR, TINGGI_LAYAR, &Wire, OLED_RESET);
- #define PIN_DHT 6
- #define JENIS_DHT DHT22
- DHT dht(PIN_DHT, JENIS_DHT);
- #define PIN_LED A3
- #define PIN_PIR 5
- #define PIN_SERVO 4
- Servo servo;
- bool gerakanTerakhirTerdeteksi = false;
- unsigned long ledStartTime = 0;
- const unsigned long ledDuration = 5000; // Durasi nyala LED
- void setup() {
- Serial.begin(9600); // Mengatur komunikasi Serial
- pinMode(PIN_LED, OUTPUT); // Pin mode
- pinMode(PIN_PIR, INPUT);
- digitalWrite(PIN_LED, LOW);
- servo.attach(PIN_SERVO);
- servo.write(0);
- Wire.begin();
- if (!display.begin(SSD1306_SWITCHCAPVCC, ALAMAT_I2C_OLED)) { // Memulai komunikasi I2C
- Serial.println(F("Gagal inisialisasi SSD1306"));
- for (;;) ;
- }
- display.clearDisplay(); // Mempersiapkan OLED
- dht.begin(); // Mempersiapkan sensor
- }
- void loop() {
- float suhu = dht.readTemperature(); // Membaca suhu
- bool gerakanTerdeteksi = digitalRead(PIN_PIR); // Mendeteksi gerakan
- Serial.print(F("Suhu: ")); // Menampilkan informasi suhu
- Serial.println(suhu);
- Serial.print(F("Gerakan Terdeteksi: ")); // Status gerakan pada serial monitor.
- Serial.println(gerakanTerdeteksi);
- perbaruiDisplay(suhu, gerakanTerdeteksi);
- if (gerakanTerdeteksi != gerakanTerakhirTerdeteksi) { // Mengaktifkan jika ada gerakan
- if (gerakanTerdeteksi) {
- aktifkanSprayDanUV(suhu);
- }
- gerakanTerakhirTerdeteksi = gerakanTerdeteksi;
- }
- // Periksa apakah sudah waktunya mematikan LED
- if (millis() - ledStartTime >= ledDuration) {
- digitalWrite(PIN_LED, LOW);
- }
- delay(50);
- }
- void perbaruiDisplay(float suhu, bool gerakanTerdeteksi) {
- display.clearDisplay(); // Membersihkan layar OLED
- display.setTextSize(1);
- display.setTextColor(SSD1306_WHITE);
- if (isnan(suhu)) { // Menampilkan informasi suhu
- display.setCursor(0, 0);
- display.print(F("Sensor Error"));
- } else {
- display.setCursor(0, 0);
- display.print(F("Suhu: "));
- display.print(suhu);
- display.print(F(" C"));
- display.setCursor(0, 16);
- display.print(suhu >= 30.0 ? F("Suhu Tinggi") : F("Suhu Rendah"));
- }
- display.setCursor(0, 32); // Status spray
- display.print(F("Spray: "));
- display.print(gerakanTerdeteksi && (suhu >= 29.5 && suhu <= 30.5) ? F("ON") : F("OFF"));
- display.setCursor(0, 48); // Status UV
- display.print(F("UV: "));
- display.print(gerakanTerdeteksi ? F("ON") : F("OFF"));
- display.display();
- }
- void aktifkanSprayDanUV(float suhu) {
- digitalWrite(PIN_LED, HIGH); // Mengaktifkan LED
- ledStartTime = millis(); // Catat waktu saat LED dinyalakan
- display.setCursor(0, 32);
- display.print(F("Spray: ")); // Menampilkan status spray
- display.print(suhu >= 29.5 && suhu <= 30.5 ? F("ON") : F("OFF"));
- display.setCursor(0, 48); // Menampilkan UV pada layar OLED
- display.print(F("UV: ON"));
- display.display();
- if (suhu >= 29.5 && suhu <= 30.5) {
- for (int i = 0; i < 3; i++) {
- servo.write(90);
- delay(500); // Menggerakkan servo ke posisi 90 derajat dan menunggu setengah detik
- servo.write(0);
- delay(500); // Mengembalikan servo ke posisi 0 derajat dan menunggu setengah detik
- }
- }
- }
Editor
You can edit this paste and save as new: