2. led Studio v2.1 — Arduino Nano simulation

perubahan pada klik pemilhan menu tidak lagi double klik, dan perubahan tampilan interface pada color kelvin

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

Components

Sketch code

#include <Wire.h>
#include <EEPROM.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// =====================================================
// ARISTUDIO - LED STUDIO CONTROLLER
// Arduino Nano + OLED 128x32 + Rotary Encoder
//
// OPERASI BARU:
// - STANDBY: putar rotary langsung mengatur BRIGHTNESS
// - Klik 1x: masuk menu COLOR TEMP
// - COLOR TEMP: putar rotary memilih Kelvin
// - Klik 1x: SET warna + kembali STANDBY
// - Hold 1 detik: ON/OFF lampu dari mode apa pun
// - Brightness: 0-100%
// - Color Temp: 3000-6500K
// - PWM 20 kHz
// - Anti-flicker
// - Soft Start
// - EEPROM
// =====================================================


// =====================================================
// OLED
// =====================================================

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
#define OLED_ADDRESS 0x3C

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  OLED_RESET
);


// =====================================================
// PIN ARDUINO NANO
// =====================================================

#define ENCODER_CLK 2
#define ENCODER_DT  3
#define ENCODER_SW  4

#define LED_WARM 9
#define LED_COOL 10


// =====================================================
// PWM 20 kHz
// Arduino Nano ATmega328P
// Timer1 Phase Correct PWM, TOP = 400
// =====================================================

#define PWM_TOP 400


// =====================================================
// MODE UI
// =====================================================

#define MODE_STANDBY 0
#define MODE_COLOR   1

byte uiMode = MODE_STANDBY;


// =====================================================
// SETTING
// =====================================================

int brightness = 5;
int colorTemp = 4500;
bool lampOn = true;

// Nilai Kelvin sementara saat memilih warna.
// Belum dianggap "set" sampai tombol diklik.
int selectedColorTemp = 4500;


// =====================================================
// EEPROM
// =====================================================

#define EEPROM_BRIGHTNESS 0
#define EEPROM_COLOR      2
#define EEPROM_LAMP       4
#define EEPROM_MARKER     5

#define EEPROM_OK 123

bool settingsChanged = false;
unsigned long lastSettingChange = 0;
const unsigned long EEPROM_DELAY = 2000;


// =====================================================
// STANDBY / UI TIMEOUT
// =====================================================

unsigned long lastActivityTime = 0;
const unsigned long STANDBY_TIMEOUT = 5000;


// =====================================================
// ROTARY ENCODER
// =====================================================

byte encoderState = 0;
int encoderPosition = 0;

const int8_t encoderTable[16] = {
   0, -1,  1,  0,
   1,  0,  0, -1,
  -1,  0,  0,  1,
   0,  1, -1,  0
};


// =====================================================
// BUTTON
// =====================================================

bool lastButtonState = HIGH;
bool buttonWasPresse

More projects by aripaintco