#include <GyverOLED.h>
#include <IRremote.h>
#include <string.h>
#define PIN_RECEIVER 2
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
IRrecv receiver(PIN_RECEIVER);
bool set_price_flag = 0;
char price_buffer[50];
void setup(){
oled.init(); // инициализация
oled.clear(); // очистка
oled.setScale(3); // масштаб текста (1..4)
oled.home(); // курсор в 0,0
oled.print("Привет!");
receiver.enableIRIn();
Serial.begin(9600);
}
void loop(){
while(true){
if (receiver.decode())
{
translateIR();
receiver.resume(); // Receive the next value
}
}
}
void processString(char *text) {
char *comma = strchr(text, ','); // Находим первое вхождение символа ','
// Serial.println(comma);
if (comma != NULL) {
comma+=3; // Перемещаем указатель на 2 символа после ','
// Serial.println(comma);
strncpy(text, text, comma - text); // Копируем подстроку от начала до ',' + 2 символа
text[comma - text] = "\0"; // Добавляем завершающий нулевой символ
}
char newChar = '$';
int size = strlen(text);
text[size] = newChar;
}
void oledPrint(char *text)
{
oled.setScale(3);
oled.clear();
oled.home();
oled.print(text);
oled.setCursor(0,5);
oled.setScale(2);
oled.print(price_buffer);
Serial.println(price_buffer);
}
void oledPrint(char *text, int textSize)
{
oled.setScale(textSize);
oled.clear();
oled.home();
oled.print(text);
}
void set_price(char text)
{
// this function set price to char queue whan set_price_flag = 1
if (set_price_flag){
char newChar = text;
int size = strlen(price_buffer);
price_buffer[size] = newChar;
}
}
void print_full_price()
{
int lenght = strlen(price_buffer);
processString(price_buffer);
uint8_t stringSize = strlen(price_buffer) ;
oledPrint(price_buffer,fontAutoScele(lenght));
}
uint8_t fontAutoScele(unsigned int stringSize){
if(stringSize <=5 ){return 3;}
else if (stringSize <=11){return 2;}
else {return 1;}
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command)
{
case 194:
oledPrint("BACK");
set_price_flag = 0;
print_full_price();
memset(price_buffer, '\0', sizeof(price_buffer));
break;
case 168:
set_price_flag = 1;
oledPrint("запись");
break;
case 104:
set_price('0');
oledPrint("0");
break;
case 152:
set_price(',');
oledPrint(",");
break;
case 48:
set_price('1');
oledPrint("1");
break;
case 24:
set_price('2');
oledPrint("2");
break;
case 122:
set_price('3');
oledPrint("3");
break;
case 16:
set_price('4');
oledPrint("4");
break;
case 56:
set_price('5');
oledPrint("5");
break;
case 90:
set_price('6');
oledPrint("6");
break;
case 66:
set_price('7');
oledPrint("7");
break;
case 74:
set_price('8');
oledPrint("8");
break;
case 82:
set_price('9');
oledPrint("9");
break;
default:
oled.clear();
oled.setScale(1);
oled.print(receiver.decodedIRData.command);
oled.print(" other button");
}
}