//PROGRAM LED RUNNING KONTROL BLUETOOTH//
/* Codingan ini dirancang untuk fungsi sebagai berikut :
1. Saat Kunci Motor di ON Kan
* - maka LED Strip Running Animasi dengan Effect 220 Mode menyala secara otomatis
* - Animasi bisa disesuaikan sesuai selera nu make tina HP pake Koneksi Bluetooth, pake HP sorangan ulah nginyem ka Tatangga
2. Fungsi Utama Selain Mempercantik wajah yang bawa, eh salah nu bener nu dibawa (Motor) hehehehe
* 1. Fungsi Sein Kiri 2. Fungsi Sein Kanan 3. Fungsi Hazard, bisi teu apal hazard nyaeta Sein Kiri dan Kanan ngiceup bareng 4. Fungsi Mode Rem/Strobo
NB : Gunakan sein dengan bijak, jangan menyalakan sein kiri tapi belok ke kanan
- Hanya Codingan tanpa Modul pake mahar 100k bebas lisensi
- Modul + LED Strip depan dan belakang fullset tinggal pasang 500k
*/
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 16
#define PIN 2 // Lampu SeinKiri
#define PIN1 3 // Lampu SeinKanan
#define RELAY1 6 // Relay pin untuk Lampu SeinKiri
#define RELAY2 7 // Relay pin untuk Lampu SeinKanan
int BTKiri = A0; // Tombol SeinKiri
int BTKanan = A1; // Tombol SeinKanan
int BTHazard = A2; // Tombol Hazard
int BTRem = A3; // Tombol Rem
int BTAnimasi = A4; // Tombol Animasi
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, PIN1, NEO_GRB + NEO_KHZ800);
char hold0 = 0;
char hold1 = 0;
char hold2 = 0;
char hold3 = 0;
char hold4 = 0;
char data0, data1, data2, data3, data4;
void setup() {
pinMode(BTKiri, INPUT_PULLUP);
pinMode(BTKanan, INPUT_PULLUP);
pinMode(BTHazard, INPUT_PULLUP);
pinMode(BTRem, INPUT_PULLUP);
pinMode(BTAnimasi, INPUT_PULLUP);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
strip.begin();
strip.show(); // Inisialisasi semua pixel ke 'off'
strip1.begin();
strip1.show(); // Inisialisasi semua pixel ke 'off'
}
void loop() {
key();
}
// Fungsi untuk membaca tombol dan mengaktifkan fungsi lampu yang sesuai
void key(){
data0 = digitalRead(BTKiri);
data1 = digitalRead(BTKanan);
data2 = digitalRead(BTHazard);
data3 = digitalRead(BTRem);
data4 = digitalRead(BTAnimasi);
if (data0 == LOW) {
if(hold0 == 0) {
hold0 = 0;
digitalWrite(RELAY1, HIGH);
SeinKiriAction();
}
} else {
digitalWrite(RELAY1, LOW);
hold0 = 0;
}
if (data1 == LOW) {
if(hold1 == 0) {
hold1 = 0;
digitalWrite(RELAY2, HIGH);
SeinKananAction();
}
} else {
digitalWrite(RELAY2, LOW);
hold1 = 0;
}
if (data2 == LOW) {
if(hold2 == 0) {
hold2 = 0;
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
HazardAction();
}
} else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
hold2 = 0;
}
if (data3 == LOW) {
if(hold3 == 0) {
hold3 = 0;
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
RemAction();
}
} else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
hold3 = 0;
}
if (data4 == LOW) {
if(hold4 == 0) {
hold4 = 0;
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
Animasi(5);
}
} else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
hold4 = 0;
}
}
// Fungsi untuk menyalakan lampu SeinKiri dengan animasi
void SeinKiriAction(){
SeinKiri(strip.Color(255, 255, 0), 10); // Kuning
SeinKiri(strip.Color(0, 0, 0), 10); // Mati
}
// Fungsi untuk mengatur warna dan animasi lampu SeinKiri
void SeinKiri(uint32_t c, uint8_t wait) {
for(uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
// Fungsi untuk menyalakan lampu SeinKanan dengan animasi
void SeinKananAction(){
SeinKanan(strip1.Color(255, 255, 0), 10); // Kuning
SeinKanan(strip1.Color(0, 0, 0), 10); // Mati
}
// Fungsi untuk mengatur warna dan animasi lampu SeinKanan
void SeinKanan(uint32_t c, uint8_t wait) {
for(uint16_t i = 0; i < strip1.numPixels(); i++) {
strip1.setPixelColor(i, c);
strip1.show();
delay(wait);
}
}
// Fungsi untuk menyalakan lampu hazard dengan animasi
void HazardAction(){
Hazard(strip.Color(255, 255, 0), 10); // Kuning
Hazard(strip.Color(0, 0, 0), 10); // Mati
}
// Fungsi untuk mengatur warna dan animasi lampu hazard
void Hazard(uint32_t c, uint8_t wait) {
for(uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
strip1.setPixelColor(i, c);
strip1.show();
delay(wait);
}
}
// Fungsi untuk menyalakan lampu Rem dengan animasi
void RemAction(){
Rem(strip.Color(255, 0, 0), 10);
Rem(strip.Color(0, 0, 0), 10);
Rem(strip.Color(255, 0, 0), 10);
Rem(strip.Color(0, 0, 0), 10);
Rem(strip.Color(0, 0, 255), 10);
Rem(strip.Color(0, 0, 0), 10);
Rem(strip.Color(255, 0, 0), 2); // Merah
Rem(strip.Color(0, 0, 0), 2); // Mati
Rem(strip.Color(0, 255, 0), 2); // Biru
Rem(strip.Color(0, 0, 0), 2); // Mati
}
// Fungsi untuk mengatur warna dan animasi lampu Rem
void Rem(uint32_t c, uint8_t wait) {
for(uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
strip1.setPixelColor(i, c);
strip1.show();
delay(wait);
}
}
// Fungsi untuk menampilkan animasi pelangi
void Animasi(uint8_t wait) {
for(uint16_t j = 0; j < 256 * 1; j++) { // 5 siklus dari semua warna pada roda warna
for(uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
strip1.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
strip1.show();
delay(wait);
}
}
// Fungsi untuk menghasilkan warna pelangi
uint32_t Wheel(byte WheelPos) {
if(WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}