From 7ba1e3146d65559df840c2e9f3d57af60b49c8c6 Mon Sep 17 00:00:00 2001 From: Qukich Date: Thu, 22 Feb 2024 10:15:06 +0300 Subject: [PATCH] fix and add main.c --- .gitignore | 1 + Lcd_print.cpp | 113 ------- LiquidCrystal_I2C/LiquidCrystal_I2C.cpp | 315 ------------------ LiquidCrystal_I2C/LiquidCrystal_I2C.h | 126 ------- LiquidCrystal_I2C/LiquidCrystal_I2C.o | Bin 41564 -> 0 bytes LiquidCrystal_I2C/README.md | 2 - .../examples/CustomChars/CustomChars.pde | 70 ---- .../examples/HelloWorld/HelloWorld.pde | 28 -- .../examples/SerialDisplay/SerialDisplay.pde | 34 -- LiquidCrystal_I2C/keywords.txt | 46 --- LiquidCrystal_I2C/library.json | 15 - LiquidCrystal_I2C/library.properties | 9 - Lsd_print/Lsd_print.cpp | 100 ------ Lsd_print/lsd.h | 8 - Lсd_print/Lcd_print.cpp | 100 ++++++ Lсd_print/lcd.h | 8 + MyLCD/MyLCD.h | 2 +- hdlc/client.c | 10 +- hdlc/client.h | 11 +- lcd.h | 8 - main.c | 110 ++++++ main_sketch/main_sketch.ino | 72 ---- protocol/protocol.h | 2 +- 23 files changed, 233 insertions(+), 957 deletions(-) delete mode 100644 Lcd_print.cpp delete mode 100644 LiquidCrystal_I2C/LiquidCrystal_I2C.cpp delete mode 100644 LiquidCrystal_I2C/LiquidCrystal_I2C.h delete mode 100644 LiquidCrystal_I2C/LiquidCrystal_I2C.o delete mode 100644 LiquidCrystal_I2C/README.md delete mode 100644 LiquidCrystal_I2C/examples/CustomChars/CustomChars.pde delete mode 100644 LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.pde delete mode 100644 LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.pde delete mode 100644 LiquidCrystal_I2C/keywords.txt delete mode 100644 LiquidCrystal_I2C/library.json delete mode 100644 LiquidCrystal_I2C/library.properties delete mode 100644 Lsd_print/Lsd_print.cpp delete mode 100644 Lsd_print/lsd.h create mode 100644 Lсd_print/Lcd_print.cpp create mode 100644 Lсd_print/lcd.h delete mode 100644 lcd.h create mode 100644 main.c delete mode 100644 main_sketch/main_sketch.ino diff --git a/.gitignore b/.gitignore index b68e17f..14484fa 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ uart.h /.idea/.gitignore /.idea/vcs.xml /.idea/modules.xml +/CMakeLists.txt diff --git a/Lcd_print.cpp b/Lcd_print.cpp deleted file mode 100644 index 6379e6f..0000000 --- a/Lcd_print.cpp +++ /dev/null @@ -1,113 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "lcdpcf8574.h" -#include "pcf8574.h" -#include "i2cmaster.h" -#include "lcd.h" -#include - -struct DisplayData { - char topLine[64]; - int value1; - int value2; - int value3; -}; - -struct TextCounter { - unsigned long startTime; - int incrementValue; -}; - -TextCounter textCounter; - -void Lcd_inciliation() { - lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея - lcd_home(); // домой курсор - lcd_led(0); // вкл подсветки - textCounter.startTime = millis(); // Запоминаем время запуска программы -} - -void fillBuffer1(const char * source, char * buffer, size_t bufferSize, int incrementValue) { - int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue - int endIndex = startIndex + 16; - - if (endIndex > strlen(source)) { - // Если endIndex превышает длину строки source, переносим его на начало строки - endIndex = endIndex - strlen(source); - - // Копируем символы с конца строки source - strncpy(buffer, source + startIndex, strlen(source) - startIndex); - - // Копируем оставшиеся символы с начала строки source - strncat(buffer, source, endIndex); - } else { - strncpy(buffer, source + startIndex, endIndex - startIndex); - } - buffer[endIndex - startIndex] = '\0'; // Установка нулевого символа в конце буфера -} - -void fillBuffer2(int value1, int value2, int value3, char * buffer, size_t bufferSize) { - snprintf(buffer, bufferSize, "%d.%d.%d", value1, value2, value3); -} - -int convertR(char h, char t, char o) -{ - return ((h - '0') * 100 + (t - '0') * 10 + (o - '0') * 1); - -} - - -void first_nine(struct DisplayData arr) { - size_t len = strlen(arr.topLine); - memmove(arr, arr.topLine + 9, len - 8 ); -} - -void printLcd(const char * inputText) -{ - unsigned long currentTime = millis(); // Текущее время - // Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue - if (currentTime - textCounter.startTime >= 500) { - textCounter.incrementValue++; // Увеличиваем incrementValue на 1 - textCounter.startTime = currentTime; // Обновляем время - } - - struct DisplayData displayData; - strncpy(displayData.topLine, inputText, sizeof(displayData.topLine) - 1); - displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; - displayData.value1 = convertR(displayData.topLine[0], displayData.topLine[1], displayData.topLine[2]); - displayData.value2 = convertR(displayData.topLine[3], displayData.topLine[4], displayData.topLine[5]); - displayData.value3 = convertR(displayData.topLine[6], displayData.topLine[7], displayData.topLine[8]); - - first_nine(displayData); - - // Буферы для заполнения данных - char buffer1[17]; - char buffer2[17]; - - // Заполнение буфера 1 - fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); - - // Заполнение буфера 2 - fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2)); - - // Создание массива для вывода на дисплей - char displayArray[32]; - strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray - strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 - - // Вывод данных на экран - lcd_gotoxy(0, 0); - lcd_puts(displayArray); - - lcd_gotoxy(0, 1); - lcd_puts(displayArray + 16); // Вывод второй половины displayArray -} - diff --git a/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp b/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp deleted file mode 100644 index 08a41f7..0000000 --- a/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp +++ /dev/null @@ -1,315 +0,0 @@ -// Based on the work by DFRobot - -#include "LiquidCrystal_I2C.h" -#include -#if defined(ARDUINO) && ARDUINO >= 100 - -#include "Arduino.h" - -#define printIIC(args) Wire.write(args) -inline size_t LiquidCrystal_I2C::write(uint8_t value) { - send(value, Rs); - return 1; -} - -#else -#include "WProgram.h" - -#define printIIC(args) Wire.send(args) -inline void LiquidCrystal_I2C::write(uint8_t value) { - send(value, Rs); -} - -#endif -#include "Wire.h" - - - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a sketch starts (and the -// LiquidCrystal constructor is called). - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows) -{ - _Addr = lcd_Addr; - _cols = lcd_cols; - _rows = lcd_rows; - _backlightval = LCD_NOBACKLIGHT; -} - -void LiquidCrystal_I2C::init(){ - init_priv(); -} - -void LiquidCrystal_I2C::init_priv() -{ - Wire.begin(); - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - begin(_cols, _rows); -} - -void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != 0) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 - delay(50); - - // Now we pull both RS and R/W low to begin commands - expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) - delay(1000); - - //put the LCD into 4 bit mode - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - write4bits(0x03 << 4); - delayMicroseconds(150); - - // finally, set to 4-bit interface - write4bits(0x02 << 4); - - - // set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for roman languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - - home(); - -} - -/********** high level commands, for the user! */ -void LiquidCrystal_I2C::clear(){ - command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal_I2C::home(){ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){ - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if ( row > _numlines ) { - row = _numlines-1; // we count rows starting w/0 - } - command(LCD_SETDDRAMADDR | (col + row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystal_I2C::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystal_I2C::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystal_I2C::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystal_I2C::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystal_I2C::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystal_I2C::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystal_I2C::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystal_I2C::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystal_I2C::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i=0; i<8; i++) { - write(charmap[i]); - } -} - -// Turn the (optional) backlight off/on -void LiquidCrystal_I2C::noBacklight(void) { - _backlightval=LCD_NOBACKLIGHT; - expanderWrite(0); -} - -void LiquidCrystal_I2C::backlight(void) { - _backlightval=LCD_BACKLIGHT; - expanderWrite(0); -} - - - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystal_I2C::command(uint8_t value) { - send(value, 0); -} - - -/************ low level data pushing commands **********/ - -// write either command or data -void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { - uint8_t highnib=value&0xf0; - uint8_t lownib=(value<<4)&0xf0; - write4bits((highnib)|mode); - write4bits((lownib)|mode); -} - -void LiquidCrystal_I2C::write4bits(uint8_t value) { - expanderWrite(value); - pulseEnable(value); -} - -void LiquidCrystal_I2C::expanderWrite(uint8_t _data){ - Wire.beginTransmission(_Addr); - printIIC((int)(_data) | _backlightval); - Wire.endTransmission(); -} - -void LiquidCrystal_I2C::pulseEnable(uint8_t _data){ - expanderWrite(_data | En); // En high - delayMicroseconds(1); // enable pulse must be >450ns - - expanderWrite(_data & ~En); // En low - delayMicroseconds(50); // commands need > 37us to settle -} - - -// Alias functions - -void LiquidCrystal_I2C::cursor_on(){ - cursor(); -} - -void LiquidCrystal_I2C::cursor_off(){ - noCursor(); -} - -void LiquidCrystal_I2C::blink_on(){ - blink(); -} - -void LiquidCrystal_I2C::blink_off(){ - noBlink(); -} - -void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){ - createChar(char_num, rows); -} - -void LiquidCrystal_I2C::setBacklight(uint8_t new_val){ - if(new_val){ - backlight(); // turn backlight on - }else{ - noBacklight(); // turn backlight off - } -} - -void LiquidCrystal_I2C::printstr(const char c[]){ - //This function is not identical to the function used for "real" I2C displays - //it's here so the user sketch doesn't have to be changed - print(c); -} - - -// unsupported API functions -void LiquidCrystal_I2C::off(){} -void LiquidCrystal_I2C::on(){} -void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {} -uint8_t LiquidCrystal_I2C::status(){return 0;} -uint8_t LiquidCrystal_I2C::keypad (){return 0;} -uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;} -void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){} -void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){} -void LiquidCrystal_I2C::setContrast(uint8_t new_val){} - - diff --git a/LiquidCrystal_I2C/LiquidCrystal_I2C.h b/LiquidCrystal_I2C/LiquidCrystal_I2C.h deleted file mode 100644 index faf19fb..0000000 --- a/LiquidCrystal_I2C/LiquidCrystal_I2C.h +++ /dev/null @@ -1,126 +0,0 @@ -//YWROBOT -#ifndef LiquidCrystal_I2C_h -#define LiquidCrystal_I2C_h - -#include -#include "Print.h" -#include - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -// flags for backlight control -#define LCD_BACKLIGHT 0x08 -#define LCD_NOBACKLIGHT 0x00 - -#define En B00000100 // Enable bit -#define Rw B00000010 // Read/Write bit -#define Rs B00000001 // Register select bit - -class LiquidCrystal_I2C : public Print { -public: - LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); - void clear(); - void home(); - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void printLeft(); - void printRight(); - void leftToRight(); - void rightToLeft(); - void shiftIncrement(); - void shiftDecrement(); - void noBacklight(); - void backlight(); - void autoscroll(); - void noAutoscroll(); - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); -#if defined(ARDUINO) && ARDUINO >= 100 - virtual size_t write(uint8_t); -#else - virtual void write(uint8_t); -#endif - void command(uint8_t); - void init(); - -////compatibility API function aliases -void blink_on(); // alias for blink() -void blink_off(); // alias for noBlink() -void cursor_on(); // alias for cursor() -void cursor_off(); // alias for noCursor() -void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() -void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() -void printstr(const char[]); - -////Unsupported API functions (not implemented in this library) -uint8_t status(); -void setContrast(uint8_t new_val); -uint8_t keypad(); -void setDelay(int,int); -void on(); -void off(); -uint8_t init_bargraph(uint8_t graphtype); -void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); -void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); - - -private: - void init_priv(); - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void expanderWrite(uint8_t); - void pulseEnable(uint8_t); - uint8_t _Addr; - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - uint8_t _numlines; - uint8_t _cols; - uint8_t _rows; - uint8_t _backlightval; -}; - -#endif diff --git a/LiquidCrystal_I2C/LiquidCrystal_I2C.o b/LiquidCrystal_I2C/LiquidCrystal_I2C.o deleted file mode 100644 index bca78e0d24dfc30341ef0d5e91cf127ee829e126..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41564 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 diff --git a/LiquidCrystal_I2C/README.md b/LiquidCrystal_I2C/README.md deleted file mode 100644 index aee58d3..0000000 --- a/LiquidCrystal_I2C/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# LiquidCrystal_I2C -LiquidCrystal Arduino library for the DFRobot I2C LCD displays diff --git a/LiquidCrystal_I2C/examples/CustomChars/CustomChars.pde b/LiquidCrystal_I2C/examples/CustomChars/CustomChars.pde deleted file mode 100644 index 492612d..0000000 --- a/LiquidCrystal_I2C/examples/CustomChars/CustomChars.pde +++ /dev/null @@ -1,70 +0,0 @@ -//YWROBOT -//Compatible with the Arduino IDE 1.0 -//Library version:1.1 -#include -#include - -#if defined(ARDUINO) && ARDUINO >= 100 -#define printByte(args) write(args); -#else -#define printByte(args) print(args,BYTE); -#endif - -uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; -uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0}; -uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; -uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; -uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0}; -uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0}; -uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0}; -uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; - -LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display - -void setup() -{ - lcd.init(); // initialize the lcd - lcd.backlight(); - - lcd.createChar(0, bell); - lcd.createChar(1, note); - lcd.createChar(2, clock); - lcd.createChar(3, heart); - lcd.createChar(4, duck); - lcd.createChar(5, check); - lcd.createChar(6, cross); - lcd.createChar(7, retarrow); - lcd.home(); - - lcd.print("Hello world..."); - lcd.setCursor(0, 1); - lcd.print(" i "); - lcd.printByte(3); - lcd.print(" arduinos!"); - delay(5000); - displayKeyCodes(); - -} - -// display all keycodes -void displayKeyCodes(void) { - uint8_t i = 0; - while (1) { - lcd.clear(); - lcd.print("Codes 0x"); lcd.print(i, HEX); - lcd.print("-0x"); lcd.print(i+16, HEX); - lcd.setCursor(0, 1); - for (int j=0; j<16; j++) { - lcd.printByte(i+j); - } - i+=16; - - delay(4000); - } -} - -void loop() -{ - -} - diff --git a/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.pde b/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.pde deleted file mode 100644 index 6dfdee8..0000000 --- a/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.pde +++ /dev/null @@ -1,28 +0,0 @@ -//YWROBOT -//Compatible with the Arduino IDE 1.0 -//Library version:1.1 -#include -#include - -LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display - -void setup() -{ - lcd.init(); // initialize the lcd - lcd.init(); - // Print a message to the LCD. - lcd.backlight(); - lcd.setCursor(3,0); - lcd.print("Hello, world!"); - lcd.setCursor(2,1); - lcd.print("Ywrobot Arduino!"); - lcd.setCursor(0,2); - lcd.print("Arduino LCM IIC 2004"); - lcd.setCursor(2,3); - lcd.print("Power By Ec-yuan!"); -} - - -void loop() -{ -} diff --git a/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.pde b/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.pde deleted file mode 100644 index fdbbc64..0000000 --- a/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.pde +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Displays text sent over the serial port (e.g. from the Serial Monitor) on - * an attached LCD. - * YWROBOT - *Compatible with the Arduino IDE 1.0 - *Library version:1.1 - */ -#include -#include - -LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display - -void setup() -{ - lcd.init(); // initialize the lcd - lcd.backlight(); - Serial.begin(9600); -} - -void loop() -{ - // when characters arrive over the serial port... - if (Serial.available()) { - // wait a bit for the entire message to arrive - delay(100); - // clear the screen - lcd.clear(); - // read all the available characters - while (Serial.available() > 0) { - // display each character to the LCD - lcd.write(Serial.read()); - } - } -} diff --git a/LiquidCrystal_I2C/keywords.txt b/LiquidCrystal_I2C/keywords.txt deleted file mode 100644 index 8c450a9..0000000 --- a/LiquidCrystal_I2C/keywords.txt +++ /dev/null @@ -1,46 +0,0 @@ -########################################### -# Syntax Coloring Map For LiquidCrystal_I2C -########################################### - -########################################### -# Datatypes (KEYWORD1) -########################################### - -LiquidCrystal_I2C KEYWORD1 - -########################################### -# Methods and Functions (KEYWORD2) -########################################### -init KEYWORD2 -begin KEYWORD2 -clear KEYWORD2 -home KEYWORD2 -noDisplay KEYWORD2 -display KEYWORD2 -noBlink KEYWORD2 -blink KEYWORD2 -noCursor KEYWORD2 -cursor KEYWORD2 -scrollDisplayLeft KEYWORD2 -scrollDisplayRight KEYWORD2 -leftToRight KEYWORD2 -rightToLeft KEYWORD2 -shiftIncrement KEYWORD2 -shiftDecrement KEYWORD2 -noBacklight KEYWORD2 -backlight KEYWORD2 -autoscroll KEYWORD2 -noAutoscroll KEYWORD2 -createChar KEYWORD2 -setCursor KEYWORD2 -print KEYWORD2 -blink_on KEYWORD2 -blink_off KEYWORD2 -cursor_on KEYWORD2 -cursor_off KEYWORD2 -setBacklight KEYWORD2 -load_custom_character KEYWORD2 -printstr KEYWORD2 -########################################### -# Constants (LITERAL1) -########################################### diff --git a/LiquidCrystal_I2C/library.json b/LiquidCrystal_I2C/library.json deleted file mode 100644 index 5a23a39..0000000 --- a/LiquidCrystal_I2C/library.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "LiquidCrystal_I2C", - "keywords": "LCD, liquidcrystal, I2C", - "description": "A library for DFRobot I2C LCD displays", - "repository": - { - "type": "git", - "url": "https://github.com/marcoschwartz/LiquidCrystal_I2C.git" - }, - "frameworks": "arduino", - "platforms": - [ - "atmelavr" - ] -} \ No newline at end of file diff --git a/LiquidCrystal_I2C/library.properties b/LiquidCrystal_I2C/library.properties deleted file mode 100644 index e64a7f5..0000000 --- a/LiquidCrystal_I2C/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=LiquidCrystal I2C -version=1.1.2 -author=Frank de Brabander -maintainer=Marco Schwartz -sentence=A library for I2C LCD displays. -paragraph= The library allows to control I2C displays with functions extremely similar to LiquidCrystal library. THIS LIBRARY MIGHT NOT BE COMPATIBLE WITH EXISTING SKETCHES. -category=Display -url=https://github.com/marcoschwartz/LiquidCrystal_I2C -architectures=avr diff --git a/Lsd_print/Lsd_print.cpp b/Lsd_print/Lsd_print.cpp deleted file mode 100644 index 2a0afe3..0000000 --- a/Lsd_print/Lsd_print.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "lcdpcf8574.h" -#include "pcf8574.h" -#include "i2cmaster.h" -#include "lsd.h" -#include - -struct DisplayData { - char topLine[64]; - int value1; - int value2; - int value3; -}; - -struct TextCounter { - unsigned long startTime; - int incrementValue; -}; - -TextCounter textCounter; - -void Lsd_inciliation() { - lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея - lcd_home(); // домой курсор - lcd_led(0); // вкл подсветки - textCounter.startTime = millis(); // Запоминаем время запуска программы -} - -void fillBuffer1(const char * source, char * buffer, size_t bufferSize, int incrementValue) { - int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue - int endIndex = startIndex + 16; - - if (endIndex > strlen(source)) { - // Если endIndex превышает длину строки source, переносим его на начало строки - endIndex = endIndex - strlen(source); - - // Копируем символы с конца строки source - strncpy(buffer, source + startIndex, strlen(source) - startIndex); - - // Копируем оставшиеся символы с начала строки source - strncat(buffer, source, endIndex); - } else { - strncpy(buffer, source + startIndex, endIndex - startIndex); - } - buffer[endIndex - startIndex] = '\0'; // Установка нулевого символа в конце буфера -} - -void fillBuffer2(int value1, int value2, int value3, char * buffer, size_t bufferSize) { - snprintf(buffer, bufferSize, "%d.%d.%d", value1, value2, value3); -} - - -void printLsd(const char * inputText) -{ - unsigned long currentTime = millis(); // Текущее время - // Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue - if (currentTime - textCounter.startTime >= 500) { - textCounter.incrementValue++; // Увеличиваем incrementValue на 1 - textCounter.startTime = currentTime; // Обновляем время - } - - DisplayData displayData; - strncpy(displayData.topLine, inputText, sizeof(displayData.topLine) - 1); - displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; - displayData.value1 = 500; - displayData.value2 = 800; - displayData.value3 = 855; - - // Буферы для заполнения данных - char buffer1[17]; - char buffer2[17]; - - // Заполнение буфера 1 - fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); - - // Заполнение буфера 2 - fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2)); - - // Создание массива для вывода на дисплей - char displayArray[32]; - strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray - strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 - - // Вывод данных на экран - lcd_gotoxy(0, 0); - lcd_puts(displayArray); - - lcd_gotoxy(0, 1); - lcd_puts(displayArray + 16); // Вывод второй половины displayArray -} - diff --git a/Lsd_print/lsd.h b/Lsd_print/lsd.h deleted file mode 100644 index 2b495ce..0000000 --- a/Lsd_print/lsd.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef Lsd_print_h -#define Lsd_print_h -#include - -void Lsd_inciliation(); -void printLsd(const char* inputText); - -#endif \ No newline at end of file diff --git a/Lсd_print/Lcd_print.cpp b/Lсd_print/Lcd_print.cpp new file mode 100644 index 0000000..3c59604 --- /dev/null +++ b/Lсd_print/Lcd_print.cpp @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +struct DisplayData { + char topLine[64]; + float value1; + float value2; + float value3; +}; + +struct TextCounter { + unsigned long startTime; + int incrementValue; +}; + +TextCounter textCounter; + +void Lcd_inciliation() { + lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея + lcd_home(); // домой курсор + lcd_led(0); // вкл подсветки + textCounter.startTime = millis(); // Запоминаем время запуска программы +} + +void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { + int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue + int endIndex = startIndex + 16; + + for (int i = 0; i < 16; ++i) { + buffer[i] = source[(startIndex + i) % strlen(source)]; + } + buffer[16] = '\0'; // Установка нулевого символа в конце буфера +} + +void fillBuffer2(float value1, float value2, float value3, char* buffer, size_t bufferSize) { + snprintf(buffer, bufferSize, "%.2f.%.2f.%.2f", value1, value2, value3); +} + +void printLcd(struct message* decode_message) { + unsigned long currentTime = millis(); // Текущее время + // Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue + if (currentTime - textCounter.startTime >= 500) { + textCounter.incrementValue++; // Увеличиваем incrementValue на 1 + textCounter.startTime = currentTime; // Обновляем время + } + + struct DisplayData displayData; + strncpy(displayData.topLine, decode_message->str, sizeof(displayData.topLine) - 1); + displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; + displayData.value1 = decode_message->numbers[0]; + displayData.value2 = decode_message->numbers[1]; + displayData.value3 = decode_message->numbers[2]; + + // Буферы для заполнения данных + char buffer1[17]; + char buffer2[17]; + + // Заполнение буфера 1 + fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); + + // Заполнение буфера 2 + fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2)); + + // Создание массива для вывода на дисплей + char displayArray[32]; + strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray + strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 + + // Вывод данных на экран + lcd_gotoxy(0, 0); + lcd_puts(displayArray); + + lcd_gotoxy(0, 1); + lcd_puts(displayArray + 16); // Вывод второй половины displayArray +} + +void dder() { + Lcd_inciliation(); + + uint8_t encode_message[100]; + size_t len_encode_message = 0; + struct message message; + + + // Получаем данные из протокола + protocol_encode(message, encode_message, &len_encode_message); + + // Декодируем данные из протокола + struct message decode_message; + protocol_decode(encode_message, len_encode_message, &decode_message); + + // Выводим данные на экран + printLcd(&decode_message); +} \ No newline at end of file diff --git a/Lсd_print/lcd.h b/Lсd_print/lcd.h new file mode 100644 index 0000000..f798ae0 --- /dev/null +++ b/Lсd_print/lcd.h @@ -0,0 +1,8 @@ +#ifndef Lsd_print_h +#define Lsd_print_h +#include "protocol.h" + +void Lcd_inciliation(); +void printLcd(struct message* decode_message); + +#endif \ No newline at end of file diff --git a/MyLCD/MyLCD.h b/MyLCD/MyLCD.h index 2a167ba..f9d17f9 100644 --- a/MyLCD/MyLCD.h +++ b/MyLCD/MyLCD.h @@ -3,7 +3,7 @@ #define MYLCD_H_ -// +// ���������� ��� ���� #include #include #include diff --git a/hdlc/client.c b/hdlc/client.c index 8dc6933..b2b7318 100644 --- a/hdlc/client.c +++ b/hdlc/client.c @@ -2,14 +2,6 @@ #include "hdlc.h" #include "stdio.h" -#define ERR_INVALID_DATA_SIZE -1 -#define ERR_ALL_BUFFERS_FILL -2 -#define ERR_INVALID_PARAMS -3 -#define ERR_INVALID_STATE -4 -#define ERR_FRAME_TIME_OUT -5 -#define ERR_INVALID_SEQ_NUMBER_FRAME -6 -#define ERR_TIMEOUT_ANSWER -7 - #define SIZE_DATA_BUFFERS 64 int connecting_frame_timeout_bf; @@ -113,6 +105,8 @@ int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t } *len_recived_data = sizeof(recive)-2; + + client->state = SEND; break; case S_FRAME_NACK: client->state = DISCONNECTING; diff --git a/hdlc/client.h b/hdlc/client.h index 99573bb..8702fa1 100644 --- a/hdlc/client.h +++ b/hdlc/client.h @@ -5,13 +5,22 @@ #include #include "hdlc.h" +#define ERR_INVALID_DATA_SIZE -1 +#define ERR_ALL_BUFFERS_FILL -2 +#define ERR_INVALID_PARAMS -3 +#define ERR_INVALID_STATE -4 +#define ERR_FRAME_TIME_OUT -5 +#define ERR_INVALID_SEQ_NUMBER_FRAME -6 +#define ERR_TIMEOUT_ANSWER -7 + enum HDLCState { UNINITIALIZED_STATE = 0, // состояние до инцилизации IDLE_STATE, // Состояние ожидания начала READY_STATE, // Состояние принятия CONNECTING, // состояние соединения DISCONNECTING, // состояния отключения - RECIVING // состояние приема и отправки + RECIVING, // состояние приема и отправки + SEND, //данные отправлены }; struct Client{ diff --git a/lcd.h b/lcd.h deleted file mode 100644 index b66935b..0000000 --- a/lcd.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef Lcd_print_h -#define Lcd_print_h -#include - -void Lcd_inciliation(); -void printLcd(const char* inputText); - -#endif \ No newline at end of file diff --git a/main.c b/main.c new file mode 100644 index 0000000..9c9bf50 --- /dev/null +++ b/main.c @@ -0,0 +1,110 @@ +//#include "Lсd_print/lcd.h" +#include "hdlc/client.h" +#include "UART/uart.h" +#include "stdbool.h" +//#include "stdio.h" +#include "Lсd_print/lcd.h" +//#include "protocol.h" + +int main() { + struct Client hdlc; + bool flag_connection = false; + + Lcd_inciliation(); + UART_init(); + init_hdlc_client(&hdlc, 200); + +// while(true){ +// if (!flag_connection){ +// } +// } + + hdlc_connect(&hdlc); + uint8_t buffer[10]; + + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + + UART_send(buffer, sizeof buffer); + + while(!flag_connection){ + uint8_t* buffer_recive[10]; + UART_receive(buffer_recive, sizeof buffer_recive); + + int err = hdlc_timeout_handler(&hdlc, 1); + if (err == ERR_FRAME_TIME_OUT){ + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + UART_send(buffer, sizeof buffer); + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); + if (err < 0){ + if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ + uint8_t* buffer_rej[10]; + hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); + UART_send(buffer_rej, sizeof buffer_rej); + return err; + } + return err; + } + + if (hdlc.state == READY_STATE){ + flag_connection = true; + } + } + + struct message mess; + mess.numbers[0] = 1.23; + mess.numbers[1] = 22.1; + mess.numbers[2] = 100; + mess.len_numbers = 3; + mess.str = "word war in new world io ex"; + mess.len_str = sizeof mess.str; + + uint8_t data[64]; + size_t len_data; + protocol_encode(mess, data, &len_data); + + hdlc_send_data(&hdlc, data, len_data); + uint8_t buffer_data[72]; + hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); + + UART_send(buffer_data, sizeof buffer_data); + + bool flag_recive = false; + uint8_t data_recive[64]; + size_t len_data_recive; + while (!flag_recive){ + uint8_t* buffer_recive_data[72]; + UART_receive(buffer_recive_data, sizeof buffer_recive_data); + + int err = hdlc_timeout_handler(&hdlc, 1); + if (err == ERR_FRAME_TIME_OUT){ + hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); + UART_send(buffer_data, sizeof buffer_data); + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); + if (err < 0){ + if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ + uint8_t* buffer_rej[10]; + hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); + UART_send(buffer_rej, sizeof buffer_rej); + return err; + } + return err; + } + + if (hdlc.state == SEND){ + flag_recive = true; + } + } + + struct message resp; + protocol_decode(data_recive, len_data_recive, &resp); + + printLcd(&resp); + + return 0; +} \ No newline at end of file diff --git a/main_sketch/main_sketch.ino b/main_sketch/main_sketch.ino deleted file mode 100644 index 9cdffa7..0000000 --- a/main_sketch/main_sketch.ino +++ /dev/null @@ -1,72 +0,0 @@ -#include "lcd.h" -#include "client.h" -#include "uart.h" -#include "stdbool.h" -#include "stdio.h" - -struct Client hdlc; -bool flag_connection = false; - -void setup() { - Lsd_inciliation(); - UART_init(); - init_hdlc_client(&hdlc, 200); -} - -void loop() { - if (!flag_connection){ - hdlc_connect(&hdlc); - uint8_t buffer; - hdlc_get_raw_frame(&hdlc, &buffer, sizeof(buffer)); - - UART_send(&buffer, sizeof(buffer)); - - bool flag_recive = true; - while(flag_recive){ - uint8_t buffer; - UART_receive(&buffer, sizeof(buffer)); - - int err = hdlc_timeout_handler(&hdlc, 1); - if (err != 0){ - return err; - } - - int ret = hdlc_decode_recived_raw_data(&hdlc, &fake_buffer, sizeof(fake_buffer), 0, 0); - - if (ret == -6){ - uint8_t buffer; - hdlc_get_raw_frame(&hdlc, &hdlc->frame_rej, &buffer, sizeof(buffer)); - UART_send(&buffer, sizeof(buffer)); - } - - if (ret == 0 && client->state == READY_STATE){ - flag_connection = true; - } - } - } else { - bool flag_recive = true; - while(flag_recive){ - uint8_t buffer; - UART_receive(&buffer, sizeof(buffer)); - - int err = hdlc_timeout_handler(&hdlc, 1); - if (err != 0){ - return err; - } - - uint8_t recived_data; - size_t len_recived_data; - - int ret = hdlc_decode_recived_raw_data(&hdlc, &fake_buffer, sizeof(fake_buffer), &recived_data, &len_recived_data); - - if (ret == -6){ - uint8_t buffer; - hdlc_get_raw_frame(&hdlc, &hdlc->frame_rej, &buffer, sizeof(buffer)); - UART_send(&buffer, sizeof(buffer)); - } - - printLsd(recived_data); - } - } - -} \ No newline at end of file diff --git a/protocol/protocol.h b/protocol/protocol.h index a69f0bf..c23f040 100644 --- a/protocol/protocol.h +++ b/protocol/protocol.h @@ -10,7 +10,7 @@ #define FLAG_WORD 1 struct message{ - float numbers[4]; + float numbers[3]; size_t len_numbers; char* str; size_t len_str;