project uts (copy) — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by s160425043.

Components

Sketch code

#include 
#include 
#include 
#include 
#include 

// --- PIN DEFINITIONS ---
#define DHTPIN 2
#define DHTTYPE DHT11
#define PIR_PIN 3
#define BUZZER_PIN 4
#define LED_RED 5
#define LED_GREEN 6

// Setup Keypad
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Setup LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

// Setup DHT
DHT dht(DHTPIN, DHTTYPE);

bool systemArmed = true; // Status awal sistem aktif (ARMED)

void setup() {
  lcd.begin(16, 2);
  dht.begin();

  pinMode(PIR_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);

  // Inisialisasi Buzzer dan LED
  noTone(BUZZER_PIN);
  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_GREEN, HIGH);

  lcd.setCursor(0, 0);
  lcd.print("Sistem Siap");
  delay(1000);
  lcd.clear();
}

void loop() {
  char key = keypad.getKey();

  // Cek jika tombol keypad ditekan untuk toggle ARM/DISARM
  if (key) {
    if (key == 'A') {
      systemArmed = true;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("System ARMED");
      delay(1000);
    } else if (key == 'B') {
      systemArmed = false;
      noTone(BUZZER_PIN);
      digitalWrite(LED_RED, LOW);
      digitalWrite(LED_GREEN, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("System DISARMED");
      delay(1000);
    }
  }

  // Pembacaan Sensor
  float temp = dht.readTemperature();
  int pirStatus = digitalRead(PIR_PIN);

  // Baris 1 LCD: Tampilkan Suhu
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  if (!isnan(temp)) {
    lcd.print(temp, 1);
    lcd.print("C   ");
  } else {
    lcd.print("Err    ");
  }

  // Baris 2 LCD & Logika Bahaya jika Sistem Aktif (ARMED)
  if (systemArmed) {
    if (temp > 38.0) { // Kondisi Bahaya: Suhu melebihi 38 derajat
      digitalWrite(LED_RED, HIGH);
      digitalWrite(LED_GREEN, LOW);
      tone(BUZZER_PIN, 1000); // Bunyikan Buzzer

      lcd.setCursor(0, 1);
      lcd.print("BAHAYA:PANAS!   "); // Keterangan khusus suhu tinggi
    } 
    else if (pirStatus == HIGH) { // Kondisi Bahaya: Ada Gerakan PIR
      digitalWrite(LED_RED, HIGH);
      digitalWrite(LED_GREEN, LOW);
      tone(BUZZER_PIN, 1000);

      lcd.setCursor(0, 1);
      lcd.print("ALARM: GERAKAN! ");
    } 
    else { // Kondisi Aman
      digitalWrite(LED_RED, LOW);
      digitalWrite(LED_GREEN, HIGH);
      noTone(BUZZER_PIN);

      lcd.setCursor(0, 1);
      lcd.print("Status: Aman    ");
    }
  } else {
    // Jika sistem dalam status DISARM
    noTone(BUZZER_PIN);
    digitalWrite(LED_RED, LOW);
    digitalWrite(LED_GREEN, HIGH);
    
    lcd.setCursor(0, 1);
    lcd.print("Status: DISARM  ");
  }

  delay(200);
}

More projects by s160425043