#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <time.h>
#include <stdint.h>
#define MAX_BUFF_SIZE 32
#define I2C_LCD_ADDR 0x27
#define MAX_SENSORS_NUM 3
// CODE PO ROFLU
LiquidCrystal_I2C lcd(I2C_LCD_ADDR, 16, 2);
char out_string[MAX_BUFF_SIZE];
uint8_t curr_sensor = 0;
uint16_t r[3] = { 0, };
uint16_t g[3] = { 0, };
uint16_t b[3] = { 0, };
void color_pseudo_read(void) // init some "sensors data"
{
//srand(clock());
// idk why there is no clock func in arduino but it still works so...
for (uint8_t i = 0; i < MAX_SENSORS_NUM; i++)
{
r[i] = (uint8_t) (rand() % (256));
g[i] = (uint8_t) (rand() % (256));
b[i] = (uint8_t) (rand() % (256));
}
}
void setup()
{
// Lcd Init routine. clear and set can be omitted
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
}
void loop()
{
color_pseudo_read(); // Generate something
lcd.clear();
lcd.setCursor(0, 0);
// There will be < 10 sensors so we know the size of buffer needed
snprintf(out_string, sizeof("SENSOR X"), "SENSOR %d", curr_sensor);
lcd.print(out_string);
// calculate size needed for output format
uint16_t size_calc = (uint16_t)snprintf(NULL, 0, "R%d G%d B%d", r[curr_sensor], g[curr_sensor], b[curr_sensor]);
// Format and write to buffer
snprintf(out_string, size_calc, "R%d G%d B%d", r[curr_sensor], g[curr_sensor], b[curr_sensor]);
lcd.setCursor(0, 1);
lcd.print(out_string);
if (curr_sensor < (MAX_SENSORS_NUM - 1))
{
curr_sensor++;
}
else
{
curr_sensor = 0;
}
delay(2000);
}