Платформа Arduino благодаря функционалу, наработанному ее сообществом, позволяет достаточно легко реализовывать многие проекты, осуществление которых на других платформах было бы весьма затруднительным. К одной из таких задач относится программирование взаимодействия с сенсорным TFT ЖК дисплеем, но соответствующие библиотеки для Arduino делают эту задачу достаточно простой.
В этом проекте мы рассмотрим создание на основе платы Arduino калькулятора на сенсорном TFT ЖК дисплее, который сможет выполнять все основные математические операции, такие как сложение, вычитание, деление и умножение.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- 2.4” TFT ЖК дисплей в виде платы расширения (шилда) для Arduino Uno (2.4” TFT LCD display Shield) (купить на AliExpress).
- Батарейка на 9 В.
Общие принципы работы TFT ЖК дисплеев
Прежде чем приступать к программированию проекта давайте сначала рассмотрим как работает модуль 2.4” TFT ЖК дисплея (2.4” TFT LCD Module). На следующем рисунке показано расположение контактов на таком дисплее.
Как мы можем видеть, это модуль дисплея (шилд) содержит 28 контактов, которые в точности соответствуют расположению контактов на платах Arduino Uno/Arduino Mega. Краткая классификация назначения этих контактов приведена в следующей таблице:
Как видите, можно выделить 4 группы контактов на подобном TFT ЖК дисплее:
- LCD Command Pins (контакты управления);
- LCD Data Pins (контакты данных);
- SD Card Pins (контакты для работы с SD картой);
- Power Pins (контакты питания).
Нам в нашем проекте нет необходимости детально изучать назначение всех этих контактов потому что все основные функции по взаимодействию с TFT ЖК дисплеем возьмет на себя соответствующая библиотека Arduino.
На приведенной выше картинке обратной стороны TFT ЖК дисплея вы можете видеть слот для SD карт. С SD карт, вставляемых в этот слот, можно считывать, к примеру, файлы изображений (в формате bmp) и затем отображать эти изображения на экране дисплея с помощью платы Arduino.
Важным аспектом при взаимодействии с TFT ЖК дисплеями является правильный выбор драйвера для них. Сейчас в мире продается множество типов TFT ЖК дисплеев, начиная от оригинальных модулей TFT ЖК дисплеев от Adafruit до их дешевых китайский клонов. Программа, которая хорошо работает с оригинальным дисплеем Adafruit, может не работать с его дешевым клоном из Китая. Поэтому при проектировании подобных проектов всегда важно знать что за дисплей у вас в руках – эту информацию можно получить от поставщика (продавца).
В нашем проекте мы использовали дешевый китайский клон дисплея, для взаимодействия с которым хорошо подходит драйвер IC ili9341. Достаточно подробную информацию про подключение подобного TFT ЖК дисплея можно прочитать в этой статье. Также на нашем сайте проекте вы можете посмотреть другие проекты, рассматривающие взаимодействие с подобными дисплеями:
- цифровой кодовый замок на Arduino, управляемый со смартфона;
- подключение светодиодной ленты к плате Arduino.
Калибровка сенсорного экрана TFT ЖК дисплея
Если вы планируете использовать функцию сенсорного экрана вашего модуля TFT ЖК дисплея, то вы должны откалибровать его, чтобы заставить его работать соответствующим образом. ЖК-экран без калибровки может работать не совсем корректно – вы коснетесь его в одном месте, а отклик получите в другом месте. Результаты калибровки для одного дисплея могут не подойти для другого дисплея, поэтому калибровку своего дисплея вам лучше всего делать самостоятельно.
Самый лучший способ откалибровать TFT ЖК дисплей – это использовать специальную калибровочную программу (часто идет вместе с библиотекой для ЖК дисплея) или использовать монитор последовательного порта для обнаружения ошибок в работе дисплея. Но в нашем проекте мы будем использовать достаточно большие кнопки в нашем калькуляторе, поэтому проблемы неправильной калибровки дисплея будут мало нас беспокоить. Но, тем не менее, элементарная калибровка дисплея для нашего проекта будет рассмотрена ниже в данной статье (в разделе про программирование Arduino).
Соединения TFT ЖК дисплея с платой Arduino
Поскольку используемый нами модуль TFT ЖК дисплея является шилдом (платой расширения) для Arduino, то вы можете просто разместить его сверху платы Arduino Uno и он в точности совпадет с нею по контактам. Тем не менее, в целях безопасности можно дополнительно прикрыть наиболее важные части платы Arduino изоляционной лентой чтобы предотвратить их повреждение. Размещенный сверху над платой Arduino шилд TFT ЖК дисплея будет выглядеть примерно следующим образом:
Программирование платы Arduino для работы с TFT ЖК дисплеем
В нашем проекте для взаимодействия с TFT ЖК дисплеем мы будем использовать библиотеку SPFD5408. Это модифицированная библиотека от Adafruit, которая сможет без проблем работать с нашим модулем TFT ЖК дисплея. Полный код программы будет приведен в конце статьи, здесь же мы обсудим наиболее важные его фрагменты.
Примечание: очень важно установить эту библиотеку в вашу Arduino IDE чтобы программа скомпилировалась без ошибок.
Для установки библиотеки скачайте ее по вышеприведенной ссылке с сервиса Github. На открывшейся странице выберите “clone or download” и затем “Download ZIP”. После этого скачайте zip файл с библиотекой.
Теперь откройте Arduino IDE и выберите Sketch -> Include Library -> Add .ZIP library. Их\з окна браузера загрузки выберите zip файл с библиотекой и кликните “OK”. После этого должна появиться надпись в левом нижнем углу Arduino IDE - “Library added to your Libraries” (библиотека успешно добавлена к вашим библиотекам). Более детальную информацию об установке данной библиотеки вы можете найти в этой статье.
После этого вы можете загружать приведенную в конце данной статьи программу в плату Arduino.
Для работы этого проекта нам понадобится 3 библиотеки – их все вы скачали по вышеприведенной ссылке. Затем просто подключим их в основную программу:
1 2 3 |
#include <SPFD5408_Adafruit_GFX.h> // Core graphics library (библиотека для работы с графическим ядром) #include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library (аппаратно-зависимая библиотека) #include <SPFD5408_TouchScreen.h> |
Как уже указывалось, для корректной работы с TFT ЖК дисплеем необходима его калибровка. Мы это сделаем с помощью указания в программе таких его параметров как TS_MINX, TS_MINY, TS_MAXX и TS_MAXY – это во многом решает проблему калибровки дисплея. Будьте уверены, что приведенные здесь значения хорошо подойдут для большинства TFT ЖК дисплеев, выпускаемых в качестве плат расширения для Arduino. Но если чувствуете что что то идет не так, то можете поэкспериментировать с этими значениями.
1 2 3 4 |
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905 |
Как мы знаем, TFT ЖК дисплеи могут отображать множество цветов, все эти цвета должны быть введены в программе в шестнадцатеричном виде. Чтобы сделать код программы более читабельным, мы назначили для этих значений удобочитаемые переменные.
Примечание: The values are true only if the screen is rotate by 2. Это для удобства программирования.
1 2 3 4 5 6 7 8 |
#define WHITE 0x0000 //Black->White #define YELLOW 0x001F //Blue->Yellow #define CYAN 0xF800 //Red->Cyan #define PINK 0x07E0 //Green-> Pink #define RED 0x07FF //Cyan -> Red #define GREEN 0xF81F //Pink -> Green #define BLUE 0xFFE0 //Yellow->Blue #define BLACK 0xFFFF //White-> Black |
Далее у нас в программе будет 3 части: одна для создания графического интерфейса калькулятора с кнопками и дисплеем, вторая для распознавания нажатых кнопок и третья для произведения вычислений и отображения их результата. Рассмотрим каждую из этих частей программы более подробно.
Создание графического интерфейса калькулятора
В этой части вы можете использовать свое воображение и свои креативные способности. Мы просто сделали 16 кнопок калькулятора и один блок экрана для отображения результатов вычислений. Вы можете конструировать дизайн калькулятора как будто вы рисуете его в MS paint. Добавленные вначале программы библиотеки позволяют вам рисовать на экране дисплея линии, прямоугольники, круги, символы, строки и многое другое.
Мы использовали линии и прямоугольники для создания графического интерфейса нашего калькулятора. Как видите, он выглядит как калькулятор из 90-х годов прошлого века. Каждый прямоугольник (точнее квадрат) имеет высоту и ширину 60 пикселов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//рисуем экран для вывода результатов tft.fillRect(0, 0, 240, 80, CYAN); //рисуем первый столбец tft.fillRect (0,260,60,60,RED); tft.fillRect (0,200,60,60,BLACK); tft.fillRect (0,140,60,60,BLACK); tft.fillRect (0,80,60,60,BLACK); //рисуем третий столбец tft.fillRect (120,260,60,60,GREEN); tft.fillRect (120,200,60,60,BLACK); tft.fillRect (120,140,60,60,BLACK); tft.fillRect (120,80,60,60,BLACK); //рисуем второй и четвертый столбцы for (int b=260; b>=80; b-=60) { tft.fillRect (180,b,60,60,BLUE); tft.fillRect (60,b,60,60,BLACK);} //рисуем горизонтальные линии for (int h=80; h<=320; h+=60) tft.drawFastHLine(0, h, 240, WHITE); // рисуем вертикальные линии for (int v=0; v<=240; v+=60) tft.drawFastVLine(v, 80, 240, WHITE); //рисуем надписи на кнопках for (int j=0;j<4;j++) { for (int i=0;i<4;i++) { tft.setCursor(22 + (60*i), 100 + (60*j)); tft.setTextSize(3); tft.setTextColor(WHITE); tft.println(symbol[j][i]); |
Распознавание нажатий кнопок
Кроме создания графического интерфейса калькулятора другой не менее важной задачей является распознавание (детектирование) прикосновений пользователя к экрану дисплея. Мы можем определять координаты экрана (X и Y) где произошло прикосновение пользователя. Эти координаты мы можем выводить в окне монитора последовательной связи (serial monitor) с помощью функции println.
1 2 3 |
TSPoint p = waitTouch(); X = p.y; Y = p.x; Serial.print(X); Serial.print(','); Serial.println(Y);// + " " + Y); |
На следующем рисунке мы отобразили позиции (координаты) всех кнопок нашего калькулятора. Каждая кнопка имеет ширину и высоту 60 пикселов, всего в калькуляторе 4 строки и 4 столбца кнопок. Начало координат – в точке (0,0).
Но в реальности все не так гладко как показано на данном рисунке – координаты каждой кнопки не будут в точности такими как показано на рисунке из-за упомянутых проблем с калибровкой различных типов дисплеев.
Чтобы в точности определить позицию каждой кнопки на экране используемого вами дисплея, вы должны кликнуть на каждой линии в нашем интерфейсе и проверить координаты этой точки в окне монитора последовательной связи. Конечно, это нельзя назвать профессиональным подходом, но зато это отлично работает. Мы в нашем проекте измерили позиции всех линий и у нас получилась следующая картина:
Теперь мы точно будем знать позицию каждой кнопки нашего калькулятора на экране дисплея. Теперь, когда пользователь будет касаться какой-нибудь точки на экране, мы будем в программе сравнивать координаты этой точки (X,Y) с координатами каждой кнопки калькулятора.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (X<105 && X>50) //распознавание кнопок в столбце 2 { if (Y>0 && Y<85) {Serial.println ("Button 0"); //нажата кнопка 0 if (Number==0) Number=0; else Number = (Number*10) + 0; //нажата дважды (Pressed twice) } if (Y>85 && Y<140) {Serial.println ("Button 2"); if (Number==0) Number=2; else Number = (Number*10) + 2; //Pressed twice } |
Расчет и отображение результатов
Заключительный этап в написании программы для нашего калькулятора – это расчет результатов вычислений и отображение их на экране TFT ЖК дисплея. Наш калькулятор может выполнять операции только с 2 числами, обозначенными в программе переменными “Num1” и “Num2”. В переменной “Number” будет храниться результат вычислений.
Когда пользователь нажимает кнопку, в число добавляется одна цифра (разряд). Когда пользователь нажимает другую кнопку, предыдущая цифра умножается на 10 и к числу прибавляется новая цифра. К примеру, мы нажмем цифру 8, потом 5 и потом 7. Тогда сначала в переменную Number запишется число 8, затем (8*10)+5=85 и затем (85*10)+7 = 857. В результате переменная будет содержать число 857.
1 2 3 4 5 6 7 |
if (Y>192 && Y<245) {Serial.println ("Button 8"); if (Number==0) Number=8; else Number = (Number*10) + 8; //Pressed again } |
Когда мы будем нажимать кнопку какой-нибудь операции на калькуляторе (например, сложение), значение из переменной Number будет передаваться в переменную Num1 и затем в переменную Number будет записываться ноль чтобы подготовить ее к вводу второго числа.
Когда мы будем нажимать на калькуляторе “равно”, то значение из переменной Number будет переписываться в переменную Num2, будет производиться расчет выражения и результат расчета будет записываться в переменную “Number”. Затем это значение будет отображаться на экране ЖК дисплея.
Работа проекта
Загрузите приведенную программу в плату Arduino и вы увидите на экране TFT ЖК дисплея картинку интерфейса калькулятора.
Теперь вы можете ввести любые числа и выполнить необходимые вам вычисления. На данный момент проект нашего калькулятора ограничен только двумя операндами и одним оператором. Но вы можете самостоятельно расширить возможности проекта, внеся соответствующие изменения в программу.
Для очистки экрана калькулятора необходимо будет нажать кнопку "C". Надеемся, вы получите массу удовольствия от реализации данного проекта.
Исходный код программы
Наиболее важные фрагменты кода программы подробно объяснены в предыдущем разделе статьи. Но если у вас появятся вопросы, вы можете их задать в комментариях к данной статье.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
/*______Import Libraries_______*/ #include <SPFD5408_Adafruit_GFX.h> // Core graphics library #include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library #include <SPFD5408_TouchScreen.h> /*______End of Libraries_______*/ /*инициализируем контакты TFT ЖК дисплея, мы использовали их значения по умолчанию*/ #define YP A1 // must be an analog pin, use "An" notation! #define XM A2 // must be an analog pin, use "An" notation! #define YM 7 // can be a digital pin #define XP 6 // can be a digital pin #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 /*_______End of defanitions______*/ /*______Assign names to colors and pressure_______*/ #define WHITE 0x0000 //Black->White #define YELLOW 0x001F //Blue->Yellow #define CYAN 0xF800 //Red->Cyan #define PINK 0x07E0 //Green-> Pink #define RED 0x07FF //Cyan -> Red #define GREEN 0xF81F //Pink -> Green #define BLUE 0xFFE0 //Yellow->Blue #define BLACK 0xFFFF //White-> Black #define MINPRESSURE 10 #define MAXPRESSURE 1000 /*_______Assigned______*/ /*____калибровка TFT LCD_____*/ #define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905 /*______End of Calibration______*/ TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); //300 is the sensitivity Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); //Start communication with LCD String symbol[4][4] = { { "7", "8", "9", "/" }, { "4", "5", "6", "*" }, { "1", "2", "3", "-" }, { "C", "0", "=", "+" } }; int X,Y; long Num1,Num2,Number; char action; boolean result = false; void setup() { Serial.begin(9600); //Use serial monitor for debugging tft.reset(); //Always reset at start tft.begin(0x9341); // My LCD uses LIL9341 Interface driver IC tft.setRotation(2); // I just roated so that the power jack faces up - optional tft.fillScreen(WHITE); IntroScreen(); draw_BoxNButtons(); } void loop() { TSPoint p = waitTouch(); X = p.y; Y = p.x; // Serial.print(X); Serial.print(','); Serial.println(Y);// + " " + Y); DetectButtons(); if (result==true) CalculateResult(); DisplayResult(); delay(300); } TSPoint waitTouch() { TSPoint p; do { p = ts.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); } while((p.z < MINPRESSURE )|| (p.z > MAXPRESSURE)); p.x = map(p.x, TS_MINX, TS_MAXX, 0, 320); p.y = map(p.y, TS_MINY, TS_MAXY, 0, 240);; return p; } void DetectButtons() { if (X<50 && X>0) //Detecting Buttons on Column 1 { if (Y>0 && Y<85) //If cancel Button is pressed {Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;} if (Y>85 && Y<140) //If Button 1 is pressed {Serial.println ("Button 1"); if (Number==0) Number=1; else Number = (Number*10) + 1; //Pressed twice } if (Y>140 && Y<192) //If Button 4 is pressed {Serial.println ("Button 4"); if (Number==0) Number=4; else Number = (Number*10) + 4; //Pressed twice } if (Y>192 && Y<245) //If Button 7 is pressed {Serial.println ("Button 7"); if (Number==0) Number=7; else Number = (Number*10) + 7; //Pressed twice } } if (X<105 && X>50) //Detecting Buttons on Column 2 { if (Y>0 && Y<85) {Serial.println ("Button 0"); //Button 0 is Pressed if (Number==0) Number=0; else Number = (Number*10) + 0; //Pressed twice } if (Y>85 && Y<140) {Serial.println ("Button 2"); if (Number==0) Number=2; else Number = (Number*10) + 2; //Pressed twice } if (Y>140 && Y<192) {Serial.println ("Button 5"); if (Number==0) Number=5; else Number = (Number*10) + 5; // Pressed twice } if (Y>192 && Y<245) {Serial.println ("Button 8"); if (Number==0) Number=8; else Number = (Number*10) + 8; //Pressed twice } } if (X<165 && X>105) //Detecting Buttons on Column 3 { if (Y>0 && Y<85) {Serial.println ("Button Equal"); Num2=Number; result = true; } if (Y>85 && Y<140) {Serial.println ("Button 3"); if (Number==0) Number=3; else Number = (Number*10) + 3; //Pressed twice } if (Y>140 && Y<192) {Serial.println ("Button 6"); if (Number==0) Number=6; else Number = (Number*10) + 6; //Pressed twice } if (Y>192 && Y<245) {Serial.println ("Button 9"); if (Number==0) Number=9; else Number = (Number*10) + 9; //Pressed twice } } if (X<213 && X>165) //Detecting Buttons on Column 3 { Num1 = Number; Number =0; tft.setCursor(200, 20); tft.setTextColor(RED); if (Y>0 && Y<85) {Serial.println ("Addition"); action = 1; tft.println('+');} if (Y>85 && Y<140) {Serial.println ("Subtraction"); action = 2; tft.println('-');} if (Y>140 && Y<192) {Serial.println ("Multiplication"); action = 3; tft.println('*');} if (Y>192 && Y<245) {Serial.println ("Devesion"); action = 4; tft.println('/');} delay(300); } } void CalculateResult() { if (action==1) Number = Num1+Num2; if (action==2) Number = Num1-Num2; if (action==3) Number = Num1*Num2; if (action==4) Number = Num1/Num2; } void DisplayResult() { tft.fillRect(0, 0, 240, 80, CYAN); //очищаем окно результатов tft.setCursor(10, 20); tft.setTextSize(4); tft.setTextColor(BLACK); tft.println(Number); //update new value } void IntroScreen() { tft.setCursor (55, 120); tft.setTextSize (3); tft.setTextColor(RED); tft.println("ARDUINO"); tft.setCursor (30, 160); tft.println("CALCULATOR"); tft.setCursor (30, 220); tft.setTextSize (2); tft.setTextColor(BLUE); tft.println("-Circut Digest"); delay(1800); } void draw_BoxNButtons() { //Draw the Result Box tft.fillRect(0, 0, 240, 80, CYAN); //Draw First Column tft.fillRect (0,260,60,60,RED); tft.fillRect (0,200,60,60,BLACK); tft.fillRect (0,140,60,60,BLACK); tft.fillRect (0,80,60,60,BLACK); //Draw Third Column tft.fillRect (120,260,60,60,GREEN); tft.fillRect (120,200,60,60,BLACK); tft.fillRect (120,140,60,60,BLACK); tft.fillRect (120,80,60,60,BLACK); //Draw Secound & Fourth Column for (int b=260; b>=80; b-=60) { tft.fillRect (180,b,60,60,BLUE); tft.fillRect (60,b,60,60,BLACK);} //Draw Horizontal Lines for (int h=80; h<=320; h+=60) tft.drawFastHLine(0, h, 240, WHITE); //Draw Vertical Lines for (int v=0; v<=240; v+=60) tft.drawFastVLine(v, 80, 240, WHITE); //Display keypad lables for (int j=0;j<4;j++) { for (int i=0;i<4;i++) { tft.setCursor(22 + (60*i), 100 + (60*j)); tft.setTextSize(3); tft.setTextColor(WHITE); tft.println(symbol[j][i]); } } } |
Не работает тачпад никак не реагирует на касания, хотя в режиме рисования все работает
Посмотрите эту статью. Может быть рекомендации из нее вам помогут
Теперь реагирует на тачпад, но кнопки в калькуляторе работают не правильно
Это значит что дисплей у вас откалиброван не так, как в этом проекте. Вам необходимо откалибровать вручную дисплей (методика описана в статье, основана на анализе значений X и Y, выводимых в окно монитора последовательной связи) и изменить соответствующие координаты в программе
Arduino: 1.8.13 (Windows 10), Плата:"Arduino Uno"
sketch_jan16a:2:10: fatal error: SPFD5408_Adafruit_GFX.h: No such file or directory
#include // Core graphics library
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
SPFD5408_Adafruit_GFX.h: No such file or directory
Неверная библиотека найдена в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent: нет заголовочных файлов (.h), найденных в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent\src
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
sketch_jan16a:2:10: fatal error: SPFD5408_Adafruit_GFX.h: No such file or directory
#include // Core graphics library
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
SPFD5408_Adafruit_GFX.h: No such file or directory
Неверная библиотека найдена в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent: нет заголовочных файлов (.h), найденных в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent\src
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
У вас не установлена или неверно установлена библиотека SPFD5408. Вы знаете как устанавливать библиотеки в Arduino IDE?
ура зароботоло только кнопки перепутаны
Я рад что у вас получилось. А какие кнопки у вас были перепутаны?
Arduino: 1.8.13 (Windows 10), Плата:"Arduino Uno"
sketch_jan16a:2:10: fatal error: SPFD5408_Adafruit_GFX.h: No such file or directory
#include // Core graphics library
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
SPFD5408_Adafruit_GFX.h: No such file or directory
Неверная библиотека найдена в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent: нет заголовочных файлов (.h), найденных в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent\src
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Вы попробуйте сначала просто подключить дисплей к плате Арудино как описано в этой статье, и только когда все получится, только тогда пробуйте реализовать описанный здесь проект калькулятора
У МЕНЯ НЕ РАБОТАЕТ БИБЛИОТЕКА НА ДИСПЛЕЙ
Подскажите, что именно не работает. Она не подключается в программе или не работают ее функции управления дисплеем? Более подробно вопросы подключения подобного дисплея к плате Arduino рассмотрены в этой статье.
При компилирование мне выскакивает ошибка.Мне 9 лет помагите пожайлуста.Неверная библиотека найдена в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent: нет заголовочных файлов (.h), найденных в C:\Users\Дом\Documents\Arduino\libraries\ExtendedTouchEvent\src
Я пытаюсь вам помочь, но описанный в этой статье проект не очень хорошо подходит для начинающих - он немного сложноват. Если вы только начинаете изучение Ардуино, то вам сначала целесообразно выбрать проект попроще
Спасибо но я всеже постораюсь завершить ваш проэкт