📣ความรู้ไปประยุกต์ใช้อุปกรณ์อิเล็กทรอนิกส์เพื่อสร้างสรรค์เป็นโครงงานตามที่โจทย์กำหนดได้วงจร
📣ความรู้ไปประยุกต์ใช้อุปกรณ์อิเล็กทรอนิกส์เพื่อสร้างสรรค์เป็นโครงงานตามที่โจทย์กำหนดได้คำสั่งเขียน
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
byte gauge_empty[8] = {B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111};
byte gauge_fill_1[8] = {B11111, B10000, B10000, B10000, B10000, B10000, B10000, B11111};
byte gauge_fill_2[8] = {B11111, B11000, B11000, B11000, B11000, B11000, B11000, B11111};
byte gauge_fill_3[8] = {B11111, B11100, B11100, B11100, B11100, B11100, B11100, B11111};
byte gauge_fill_4[8] = {B11111, B11110, B11110, B11110, B11110, B11110, B11110, B11111};
byte gauge_fill_5[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111};
byte gauge_left[8] = {B11111, B10000, B10000, B10000, B10000, B10000, B10000, B11111};
byte gauge_right[8] = {B11111, B00001, B00001, B00001, B00001, B00001, B00001, B11111};
byte gauge_mask_left[8] = {B01111, B11111, B11111, B11111, B11111, B11111, B11111, B01111};
byte gauge_mask_right[8] = {B11110, B11111, B11111, B11111, B11111, B11111, B11111, B11110};
byte warning_icon[8] = {B00100, B00100, B01110, B01010, B11011, B11111, B11011, B11111};
byte gauge_left_dynamic[8];
byte gauge_right_dynamic[8];
int cpu_gauge = 0;
char buffer[10];
int move_offset = 0;
const int gauge_size_chars = 16;
char gauge_string[gauge_size_chars+1];
void setup()
{
lcd.init();
lcd.createChar(7, gauge_empty);
lcd.createChar(1, gauge_fill_1);
lcd.createChar(2, gauge_fill_2);
lcd.createChar(3, gauge_fill_3);
lcd.createChar(4, gauge_fill_4);
lcd.createChar(0, warning_icon);
lcd.backlight();
}
void loop()
{
float units_per_pixel = (gauge_size_chars*5.0)/100.0;
int value_in_pixels = round(cpu_gauge * units_per_pixel);
int tip_position = 0;
if (value_in_pixels < 5) {tip_position = 1;}
else if (value_in_pixels > gauge_size_chars*5.0-5) {tip_position = 3;}
else {tip_position = 2;}
move_offset = 4 - ((value_in_pixels-1) % 5);
for (int i=0; i<8; i++) {
if (tip_position == 1) {gauge_left_dynamic[i] = (gauge_fill_5[i] << move_offset) | gauge_left[i];}
else {gauge_left_dynamic[i] = gauge_fill_5[i];}
gauge_left_dynamic[i] = gauge_left_dynamic[i] & gauge_mask_left[i];
}
for (int i=0; i<8; i++) {
if (tip_position == 3) {gauge_right_dynamic[i] = (gauge_fill_5[i] << move_offset) | gauge_right[i];}
else {gauge_right_dynamic[i] = gauge_right[i];}
gauge_right_dynamic[i] = gauge_right_dynamic[i] & gauge_mask_right[i];
}
lcd.createChar(5, gauge_left_dynamic);
lcd.createChar(6, gauge_right_dynamic);
for (int i=0; i<gauge_size_chars; i++) {
if (i==0) {gauge_string[i] = byte(5);}
else if (i==gauge_size_chars-1) {gauge_string[i] = byte(6);}
else {
if (value_in_pixels <= i*5) {gauge_string[i] = byte(7);}
else if (value_in_pixels > i*5 && value_in_pixels < (i+1)*5) {gauge_string[i] = byte(5-move_offset);}
else {gauge_string[i] = byte(255);}
}
}
lcd.setCursor(0,0);
sprintf(buffer, "CPU:%3d%% ", cpu_gauge);
lcd.print(buffer);
lcd.write(byte(0));
lcd.setCursor(0,1);
lcd.print(gauge_string);
cpu_gauge = cpu_gauge +1;
if (cpu_gauge > 100) {cpu_gauge = 0;}
delay(100);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น
ครูเต้ง เทคโนฯ