Menu
CoddyTech

Jam NeoPixel: Menggabungkan Jarum

Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 23 dari 24.

Jarum jam berwarna merah. Tampilan jam menunjukkan 12 jam, jadi posisi jam adalah (now / 3600) % 12: 0 hingga 11, dengan 0 berarti pukul 12. Itu sudah merupakan nomor piksel.

Sekarang jarum-jarum bisa bertemu. Pada pukul 10:24:52, jarum detik berada di piksel 10, tepat di atas jarum jam. Jika digambar satu per satu, jarum yang digambar belakangan menutupi jarum sebelumnya dan satu jarum menghilang.

Cahaya bisa dicampur sebagai gantinya. Beri tiap jarum bagian warnanya sendiri (merah untuk jam, hijau untuk menit, biru untuk detik), lalu bentuk setiap piksel dari jarum-jarum yang ada di sana:

for (int i = 0; i < pixelCount; i++) {
  int r = 0;
  int g = 0;
  int b = 0;
  if (i == hourPixel) {
    r = 255;
  }
  if (i == minutePixel) {
    g = 255;
  }
  if (i == secondPixel) {
    b = 255;
  }
  ring.setPixelColor(i, ring.Color(r, g, b));
}

Saat jarum-jarum bertemu, bagian warnanya dijumlahkan: merah dan biru menghasilkan magenta, hijau dan biru menghasilkan cyan, merah dan hijau menghasilkan kuning. Setiap piksel diatur pada setiap putaran, jadi perulangan ini juga menggantikan ring.clear().

challenge icon

Tantangan

Sulit

Tambahkan jarum jam dan campurkan jarum-jarumnya:

  • jam adalah (now / 3600) % 12, digambar pada piksel tersebut
  • bangun setiap piksel dalam perulangan for: merah 255 jika jarum jam berada di sana, hijau 255 untuk jarum menit, biru 255 untuk jarum detik

Tekan Jalankan: jam dimulai pada 10:24:50 dengan jarum detik dan jarum jam bercampur. Lalu tekan Periksa.

Coba sendiri

#include <Adafruit_NeoPixel.h>

const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);

// Waktu awal jam, dalam detik sejak tengah malam: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;

void setup() {
  ring.begin();
}

void loop() {
  unsigned long now = startTime + millis() / 1000;  // waktu saat ini, dalam detik
  int seconds = now % 60;
  int minutes = (now / 60) % 60;

  ring.clear();
  ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255));  // jarum detik: biru
  ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0));  // jarum menit: hijau
  ring.show();
  delay(100);  // gambar ulang sepuluh kali per detik
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Proyek

Latihan sendiri: Playground Arduino