/*
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// # # # # # ###### ####### ####### # #######
// ## ## # # ## # # # # # # # # #
// # # # # # # # # # # # # # # # # #
// # # # # # # # # # # # # # # # #####
// # # ####### # # # # # # # # ####### #
// # # # # # ## # # # # # # # #
// # # # # # # ###### ####### ####### # # #
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_GFX.h>
#define PIN 5
int lebar = 20;
int tinggi = 54;
int i_led = 0;
int cahaya =250;
int speed_1 = 300;
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
tinggi, lebar, PIN,
NEO_MATRIX_TOP +
NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS +
NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800
);
uint16_t biru = matrix.Color(0, 0, 255);
uint16_t orange = matrix.Color(255, 40, 0);
unsigned long waktu_1 = 0;
unsigned long waktu_2 = 0;
bool change_color = false;
void setup() {
Serial.begin(115200);
Serial.println("MZF_WaterTank");
Serial.println("by MANDOZAF");
matrix.begin();
matrix.setBrightness(cahaya);
}
void loop() {
// matrix.fillRect(0, 0, tinggi, 10, biru);
// matrix.fillRect(0, 10, tinggi, 10, orange);
// matrix.show();
if (change_color) {
wipe_solid_out(biru);
} else {
wipe_solid_out(orange);
}
}
void wipe_solid(int warna) {
if (millis() > waktu_1 + speed_1) {
waktu_1 = millis();
Serial.print("i_led = ");
Serial.println(i_led);
matrix.fillRect(0, 0 + i_led, tinggi, 1, warna);
matrix.show();
i_led++;
}
if (i_led >= lebar) {
i_led = 0;
change_color = !change_color;
}
}
void wipe_solid_reverse(int warna) {
if (millis() > waktu_1 + speed_1) {
waktu_1 = millis();
Serial.print("i_led = ");
Serial.println(i_led);
matrix.fillRect(0, 0 + (lebar - i_led-1), tinggi, 1, warna);
matrix.show();
i_led++;
}
if (i_led >= lebar) {
i_led = 0;
change_color = !change_color;
}
}
void wipe_solid_in(int warna) {
if (millis() > waktu_1 + speed_1) {
waktu_1 = millis();
Serial.print("i_led = ");
Serial.println(i_led);
matrix.fillRect(0, 0 + i_led, tinggi, 1, warna);
matrix.fillRect(0, 0 + (lebar - i_led-1), tinggi, 1, warna);
matrix.show();
i_led++;
}
if (i_led >= (lebar/2)) {
i_led = 0;
change_color = !change_color;
}
}
void wipe_solid_out(int warna) {
if (millis() > waktu_1 + speed_1) {
waktu_1 = millis();
Serial.print("i_led = ");
Serial.println(i_led);
matrix.fillRect(0, 0 + (lebar/2)-i_led-1, tinggi, 1, warna);
matrix.fillRect(0, 0 + (lebar/2) + i_led, tinggi, 1, warna);
matrix.show();
i_led++;
}
if (i_led >= (lebar/2)) {
i_led = 0;
change_color = !change_color;
}
}
void wipe_twocolor() {
if (millis() > waktu_2 + 150) {
waktu_2 = millis();
matrix.fillScreen(matrix.Color(0, 0, 0));
// Gambar pattern berulang yang smooth
for (int y = 0; y < lebar; y++) {
int patternPos = (y + i_led) % 20; // Pattern 20 pixel tinggi
if (patternPos < 10) {
// Bagian merah
matrix.drawFastHLine(0, y, tinggi, matrix.Color(255, 40, 0));
} else {
// Bagian biru
matrix.drawFastHLine(0, y, tinggi, matrix.Color(0, 0, 255));
}
}
matrix.show();
i_led = (i_led + 1) % 20;
}
}