3. led Studio v2.1.1 — Arduino Nano simulation

Update minor prubahan tampilan pada menu 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
// - V2.1.1
// =====================================================


// =====================================================
// 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 but

More projects by aripaintco