به نام خدا : تو این مطلب از سری مطال پروژه آردوینو ، انشاالله قراره به آموزش نمایشگر رنگی با آردوینو بپردازیم، نمایشگر ما هسته مرکزیش ii9340 هستش و 2.4 اینچ هستش(320×240) و یه صفحه نمایش رنگی هستش که صفحه تاچ هم داره(البته اکثر این نمایشگرهایی که من دیدم صفحه تاچ هم داشتن حالا ممکنه بعضی نداشته باشن و وجود صفحه تاچ الزامی نیستش) این برد هایی که من دیدم و من خودم دارم یه رم ریدر هم دارن که میتونید ازش استفاده کنید برای نمایش اطلاعاتی که نمیشه تو میکرو قرارش داد مثل عکس(مثلا من 4-5 میگ عکس ریختم تو رم و تو نمایشگر نشون میدم، پروژش رو در ته مطلب قرار میدم)، خب معلومه این همه دیتا رو نمیشه تو میکرو ریخت لذا اینجا میتونه مفید باشه، البته موضوعی که هستش اینه که ما چرا از این نمایشگرها استفاده میکنیم؟ موضوعی که خیلی ها بهش توجه نمیکنن و فقط میگن این نمایشگر بدرد این میکرو نمیخوره چون سرعت این میکرو پایینه و از این جور حرفا، در حالی که فک میکنن فقط باید تو این نمایشگر فیلم(هندی!) نشون بدن و کاربرد صفحه نمایش رنگی فقط فقط همینه، لذا چون میخوایم فیلم نشون بدیم لذا! میکرو های فرکانس پایین جواب کار ما رو نمیدن لذا!!! باس بریم سمت میکرو های فرکانس بالا، از این جور حرفا من کم نشنیدم، در حالی که ما از نمایشگربرای مانیتورینگ پروژه هامون استفاده میکنیم و در قسمتی از صفحه نمایش قراره دیتا نشون بدیم و نه کل صفحه نمایش و نه شونصد تا عکس گنده!!! >>> خب بگذریم از بحث خارج شدیم(هنوز بحث نمایشگر رو شروع نکردم که بخوام ازش خارج بشم یا نشم ) >>> خب شوخلوق بسته بریم سر اصل مطلب >>> پروژه و آموزش راه اندازی lcd tft 2.4 inch با آردوینو
پروژه و آموزش راه اندازی lcd tft 2.4 inch با آردوینو
خرید نمایشگر لمسی 2.4 اینچ آردوینو UNO و Mega2560
این نمایشگر رو میتونید از لینک زیر خرید کنید : خرید نمایشگر لمسی آردوینو
خب همون طور که در عکس بالا میبینید این نمایشگر روی برد آردوینو یا مگا قرار میگیره خیلی قشنگ.
عکس بالا هم نمایی از پشت نمایشگر هستش که میبینید یه رم ریدر داره که میتونه خیلی خیلی مفید باشه.
ما عکس هامون رو تو رم میریزیم و رم رو داخل این رم ریدر قرار میدیم و …
این شیلد نمایشگر رنگی 2.4 اینچ علاوه بر داشتن رم ریدر، یه صفحه تاچ هم داره که در بالا مشاهده میکنید.
اندازه این شیلد رو هم در زیر مشاهده میکنید :
توضیح توابع کتابخانه lcd tft 2.4 inch با آردوینو
توجه مهم : اگه نمیخواید از رم استفاده کنید(مثلا نمیخواین عکسی چیزی نشون بدید و این عکس رو از رم بخونید) بهتره که کتابخونه های SPI و SD رو در پروژتون استفاده نکنید تا الکی حافظه میکرو اشغال نشه.
پروژه نمایشگر لمسی و رنگی 2.4 اینچ با آردوینو
خب در زیر چند تا پروژه براتون قرار میدم، در اول هر کدوم توضیحی در بارش میدم.
1) پروژه تست تمام توابع lcd tft آردوینو
این پروژه برا تست تمام توابع این کتابخونه هستش (غیر از تابع نمایش عکس) که میتونید با نگاه کردن بهش همه چیز رو یاد بگیرید.
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 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
#include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> //(int CS=A3, int RS=A2, int WR=A1, int RD=A0, int RST=A4) MCUFRIEND_kbv tft(A3, A2, A1, A0, A4); #define BLACK 0x0000 #define NAVY 0x000F #define DARKGREEN 0x03E0 #define DARKCYAN 0x03EF #define MAROON 0x7800 #define PURPLE 0x780F #define OLIVE 0x7BE0 #define LIGHTGREY 0xC618 #define DARKGREY 0x7BEF #define BLUE 0x001F #define GREEN 0x07E0 #define CYAN 0x07FF #define RED 0xF800 #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define ORANGE 0xFD20 #define GREENYELLOW 0xAFE5 #define PINK 0xF81F uint16_t ColorArray[19] = { BLACK, NAVY, DARKGREEN, DARKCYAN, MAROON, PURPLE, OLIVE, LIGHTGREY, DARKGREY, BLUE, GREEN, CYAN, RED, MAGENTA, YELLOW, WHITE, ORANGE, GREENYELLOW, PINK }; void setup() { tft.reset(); uint16_t identifier = tft.readID(); tft.begin(0x9340); tft.reset(); uint16_t Identifier = tft.readID(); if (Identifier == 0xEFEF) Identifier = 0x9341; tft.begin(Identifier); } void loop() { FillScreen(1); delay(2000); SetRotation_With_FillScreen(); // fillScreen + setRotation delay(2000); SetRotation_With_PrintData(); // setCursor + setTextSize + println + fillScreen + setRotation delay(2000); InvertDisplay_With_PrintData(); delay(2000); FillRect_setTextColor(); delay(2000); DrawLine(); delay(2000); DrawFastHLine_DrawFastVLine(); delay(2000); DrawRect(); delay(2000); DrawRect(); delay(2000); DrawRoundRect(); delay(2000); FillCircle_DrawCircle(); delay(2000); DrawTriangle(); delay(2000); FillTriangle(); delay(2000); Print_Println(); delay(2000); Write_DrawChar(); delay(2000); DrawPixel_Noise(5000); } void FillScreen(int Delay) { tft.fillScreen(BLACK); delay(Delay); tft.fillScreen(NAVY); delay(Delay); tft.fillScreen(DARKGREEN); delay(Delay); tft.fillScreen(DARKCYAN); delay(Delay); tft.fillScreen(MAROON); delay(Delay); tft.fillScreen(PURPLE); delay(Delay); tft.fillScreen(OLIVE); delay(Delay); tft.fillScreen(LIGHTGREY); delay(Delay); tft.fillScreen(DARKGREY); delay(Delay); tft.fillScreen(BLUE); delay(Delay); tft.fillScreen(GREEN); delay(Delay); tft.fillScreen(CYAN); delay(Delay); tft.fillScreen(RED); delay(Delay); tft.fillScreen(MAGENTA); delay(Delay); tft.fillScreen(YELLOW); delay(Delay); tft.fillScreen(WHITE); delay(Delay); tft.fillScreen(ORANGE); delay(Delay); tft.fillScreen(GREENYELLOW); delay(Delay); tft.fillScreen(PINK); delay(Delay); } void SetRotation_With_FillScreen() { tft.setRotation(0); // 0 Digre tft.fillScreen(BLACK); delay(1000); tft.setRotation(1); // 90 Digre tft.fillScreen(NAVY); delay(1000); tft.setRotation(2); // 180 Digre tft.fillScreen(DARKGREEN); delay(1000); tft.setRotation(3); // 270 Digre tft.fillScreen(MAROON); delay(1000); } void SetRotation_With_PrintData() { tft.setTextSize(4); tft.setCursor(0, 0); tft.setRotation(0); // 0 Digre tft.fillScreen(BLACK); tft.println("DMF313.IR"); delay(1000); tft.setCursor(0, 0); tft.setRotation(1); // 90 Digre tft.fillScreen(BLACK); tft.println("DMF313.IR"); delay(1000); tft.setCursor(0, 0); tft.setRotation(2); // 180 Digre tft.fillScreen(BLACK); tft.println("DMF313.IR"); delay(1000); tft.setCursor(0, 0); tft.setRotation(3); // 270 Digre tft.fillScreen(BLACK); tft.println("DMF313.IR"); delay(1000); } void InvertDisplay_With_PrintData() { tft.fillScreen(BLACK); tft.setRotation(0); // 0 Digre tft.setTextSize(3); tft.setCursor(20, 160); tft.println("INVERT Test"); for (int i = 1; i <= 3; i++) { tft.invertDisplay(true); delay(1000); tft.invertDisplay(false); delay(1000); } } void DrawLine() { int x1, y1, x2, y2, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); x1 = y1 = 0; y2 = h - 1; for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, RED); x2 = w - 1; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, RED); tft.fillScreen(BLACK); x1 = w - 1; y1 = 0; y2 = h - 1; for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, MAGENTA); x2 = 0; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, MAGENTA); tft.fillScreen(BLACK); x1 = 0; y1 = h - 1; y2 = 0; for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, GREEN); x2 = w - 1; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, GREEN); tft.fillScreen(BLACK); x1 = w - 1; y1 = h - 1; y2 = 0; for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, WHITE); x2 = 0; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, WHITE); } void DrawFastHLine_DrawFastVLine() { int x, y, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); for (y = 0; y < h; y += 5) tft.drawFastHLine(0, y, w, BLUE); for (x = 0; x < w; x += 5) tft.drawFastVLine(x, 0, h, GREEN); } void FillRect_setTextColor() { // Resolution : 240 x 320 // 240/20=12, 320/20=16 // -------- line 1 ---------------- tft.fillRect(0, 0, 60, 64, BLACK); tft.fillRect(60, 0, 60, 64, NAVY); tft.fillRect(120, 0, 60, 64, DARKGREEN); tft.fillRect(180, 0, 60, 64, DARKCYAN); // -------- line 2 ---------------- tft.fillRect(0, 64, 60, 64, MAROON); tft.fillRect(60, 64, 60, 64, PURPLE); tft.fillRect(120, 64, 60, 64, OLIVE); tft.fillRect(180, 64, 60, 64, LIGHTGREY); // -------- line 3 ---------------- tft.fillRect(0, 128, 60, 64, DARKGREY); tft.fillRect(60, 128, 60, 64, BLUE); tft.fillRect(120, 128, 60, 64, GREEN); tft.fillRect(180, 128, 60, 64, CYAN); // -------- line 4 ---------------- tft.fillRect(0, 192, 60, 64, RED); tft.fillRect(60, 192, 60, 64, MAGENTA); tft.fillRect(120, 192, 60, 64, YELLOW); tft.fillRect(180, 192, 60, 64, WHITE); // -------- line 5 ---------------- tft.fillRect(0, 256, 60, 64, ORANGE); tft.fillRect(60, 256, 60, 64, GREENYELLOW); tft.fillRect(120, 256, 60, 64, PINK); tft.fillRect(180, 256, 60, 64, RED); tft.setTextSize(3); tft.setTextColor(BLACK); tft.setCursor(5, 160); tft.println("FillRect Test"); } void DrawRect() { // Resolution : 240 x 320 // 240/20=12, 320/20=16 tft.fillScreen(WHITE); // -------- line 1 ---------------- tft.drawRect(0, 0, 60, 64, BLACK); tft.drawRect(60, 0, 60, 64, NAVY); tft.drawRect(120, 0, 60, 64, DARKGREEN); tft.drawRect(180, 0, 60, 64, DARKCYAN); // -------- line 2 ---------------- tft.drawRect(0, 64, 60, 64, MAROON); tft.drawRect(60, 64, 60, 64, PURPLE); tft.drawRect(120, 64, 60, 64, OLIVE); tft.drawRect(180, 64, 60, 64, LIGHTGREY); // -------- line 3 ---------------- tft.drawRect(0, 128, 60, 64, DARKGREY); tft.drawRect(60, 128, 60, 64, BLUE); tft.drawRect(120, 128, 60, 64, GREEN); tft.drawRect(180, 128, 60, 64, CYAN); // -------- line 4 ---------------- tft.drawRect(0, 192, 60, 64, RED); tft.drawRect(60, 192, 60, 64, MAGENTA); tft.drawRect(120, 192, 60, 64, YELLOW); tft.drawRect(180, 192, 60, 64, WHITE); // -------- line 5 ---------------- tft.drawRect(0, 256, 60, 64, ORANGE); tft.drawRect(60, 256, 60, 64, GREENYELLOW); tft.drawRect(120, 256, 60, 64, PINK); tft.drawRect(180, 256, 60, 64, RED); tft.setTextSize(3); tft.setTextColor(BLACK); tft.setCursor(5, 160); tft.println("DrawRect Test"); } void FillRoundRect() { // Resolution : 240 x 320 // 240/20=12, 320/20=16 tft.fillScreen(WHITE); // -------- line 1 ---------------- tft.fillRoundRect(0, 0, 60, 64, 15, BLACK); tft.fillRoundRect(60, 0, 60, 64, 15, NAVY); tft.fillRoundRect(120, 0, 60, 64, 15, DARKGREEN); tft.fillRoundRect(180, 0, 60, 64, 15, DARKCYAN); // -------- line 2 ---------------- tft.fillRoundRect(0, 64, 60, 64, 15, MAROON); tft.fillRoundRect(60, 64, 60, 64, 15, PURPLE); tft.fillRoundRect(120, 64, 60, 64, 15, OLIVE); tft.fillRoundRect(180, 64, 60, 64, 15, LIGHTGREY); // -------- line 3 ---------------- tft.fillRoundRect(0, 128, 60, 64, 15, DARKGREY); tft.fillRoundRect(60, 128, 60, 64, 15, BLUE); tft.fillRoundRect(120, 128, 60, 64, 15, GREEN); tft.fillRoundRect(180, 128, 60, 64, 15, CYAN); // -------- line 4 ---------------- tft.fillRoundRect(0, 192, 60, 64, 15, RED); tft.fillRoundRect(60, 192, 60, 64, 15, MAGENTA); tft.fillRoundRect(120, 192, 60, 64, 15, YELLOW); tft.fillRoundRect(180, 192, 60, 64, 15, WHITE); // -------- line 5 ---------------- tft.fillRoundRect(0, 256, 60, 64, 15, ORANGE); tft.fillRoundRect(60, 256, 60, 64, 15, GREENYELLOW); tft.fillRoundRect(120, 256, 60, 64, 15, PINK); tft.fillRoundRect(180, 256, 60, 64, 15, RED); tft.setTextSize(3); tft.setTextColor(BLACK); tft.setCursor(5, 160); tft.println("FillRoundRect"); } void DrawRoundRect() { // Resolution : 240 x 320 // 240/20=12, 320/20=16 tft.fillScreen(WHITE); // -------- line 1 ---------------- tft.drawRoundRect(0, 0, 60, 64, 15, BLACK); tft.drawRoundRect(60, 0, 60, 64, 15, NAVY); tft.drawRoundRect(120, 0, 60, 64, 15, DARKGREEN); tft.drawRoundRect(180, 0, 60, 64, 15, DARKCYAN); // -------- line 2 ---------------- tft.drawRoundRect(0, 64, 60, 64, 15, MAROON); tft.drawRoundRect(60, 64, 60, 64, 15, PURPLE); tft.drawRoundRect(120, 64, 60, 64, 15, OLIVE); tft.drawRoundRect(180, 64, 60, 64, 15, LIGHTGREY); // -------- line 3 ---------------- tft.drawRoundRect(0, 128, 60, 64, 15, DARKGREY); tft.drawRoundRect(60, 128, 60, 64, 15, BLUE); tft.drawRoundRect(120, 128, 60, 64, 15, GREEN); tft.drawRoundRect(180, 128, 60, 64, 15, CYAN); // -------- line 4 ---------------- tft.drawRoundRect(0, 192, 60, 64, 15, RED); tft.drawRoundRect(60, 192, 60, 64, 15, MAGENTA); tft.drawRoundRect(120, 192, 60, 64, 15, YELLOW); tft.drawRoundRect(180, 192, 60, 64, 15, WHITE); // -------- line 5 ---------------- tft.drawRoundRect(0, 256, 60, 64, 15, ORANGE); tft.drawRoundRect(60, 256, 60, 64, 15, GREENYELLOW); tft.drawRoundRect(120, 256, 60, 64, 15, PINK); tft.drawRoundRect(180, 256, 60, 64, 15, RED); tft.setTextSize(3); tft.setTextColor(BLACK); tft.setCursor(5, 160); tft.println("DrawRoundRect"); } void FillCircle_DrawCircle() { tft.fillScreen(BLACK); // -------- line 1 ---------------- tft.fillCircle(30, 30, 30, WHITE); tft.fillCircle(90, 30, 30, WHITE); tft.fillCircle(150, 30, 30, WHITE); tft.fillCircle(210, 30, 30, WHITE); // -------- line 2 ---------------- tft.fillCircle(30, 90, 30, WHITE); tft.fillCircle(90, 90, 30, WHITE); tft.fillCircle(150, 90, 30, WHITE); tft.fillCircle(210, 90, 30, WHITE); // -------- line 3 ---------------- tft.fillCircle(30, 150, 30, WHITE); tft.fillCircle(90, 150, 30, WHITE); tft.fillCircle(150, 150, 30, WHITE); tft.fillCircle(210, 150, 30, WHITE); // -------- line 4 ---------------- tft.fillCircle(30, 210, 30, WHITE); tft.fillCircle(90, 210, 30, WHITE); tft.fillCircle(150, 210, 30, WHITE); tft.fillCircle(210, 210, 30, WHITE); // -------- line 5 ---------------- tft.fillCircle(30, 270, 30, WHITE); tft.fillCircle(90, 270, 30, WHITE); tft.fillCircle(150, 270, 30, WHITE); tft.fillCircle(210, 270, 30, WHITE); delay(1000); // -------- line 1 ---------------- tft.drawCircle(30, 30, 20, RED); tft.drawCircle(90, 30, 20, RED); tft.drawCircle(150, 30, 20, RED); tft.drawCircle(210, 30, 20, RED); // -------- line 2 ---------------- tft.drawCircle(30, 90, 20, RED); tft.drawCircle(90, 90, 20, RED); tft.drawCircle(150, 90, 20, RED); tft.drawCircle(210, 90, 20, RED); // -------- line 3 ---------------- tft.drawCircle(30, 150, 20, RED); tft.drawCircle(90, 150, 20, RED); tft.drawCircle(150, 150, 20, RED); tft.drawCircle(210, 150, 20, RED); // -------- line 4 ---------------- tft.drawCircle(30, 210, 20, RED); tft.drawCircle(90, 210, 20, RED); tft.drawCircle(150, 210, 20, RED); tft.drawCircle(210, 210, 20, RED); // -------- line 5 ---------------- tft.drawCircle(30, 270, 20, RED); tft.drawCircle(90, 270, 20, RED); tft.drawCircle(150, 270, 20, RED); tft.drawCircle(210, 270, 20, RED); } void DrawTriangle() { int n, i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); n = min(cx, cy); for (i = 0; i < n; i += 15) { tft.drawTriangle( cx , cy - i, // peak cx - i, cy + i, // bottom left cx + i, cy + i, // bottom right tft.color565(0, 0, i)); } } void FillTriangle() { int i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); for (i = min(cx, cy); i > 10; i -= 15) tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(0, i, i)); } void Print_Println() { tft.fillScreen(BLACK); tft.setCursor(0, 0); tft.setTextColor(WHITE); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println(123.45); tft.setTextColor(RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.println(); tft.print(" "); tft.setTextColor(GREEN, RED); tft.setTextSize(4); tft.println("IRAN"); tft.setTextColor(GREEN); tft.setTextSize(4); tft.println("DMF313.IR"); tft.setTextSize(2); tft.println("Mahdi Damarchilu!"); tft.setTextSize(1); tft.println("salam, mn 22 salame tagriban,"); tft.println("ham daneshjoo hastam va ham nistam!!!"); tft.println("be omid pishraft keshvaremon iran"); tft.println("be omin azadi gods az dast sagag"); tft.println("be omin nabodi al seood va vahabiat"); tft.println("be omid mordan dar rah khoda,"); tft.println("dar rah sarvarmoon, seyed va salar shahidan"); tft.println("Emam Hosein"); } void Write_DrawChar() { tft.fillScreen(BLACK); tft.setCursor(0, 0); tft.setTextColor(WHITE); tft.setTextSize(3); for (int i = 1; i <= 127; i++) if (i != 10) tft.write(i); tft.drawChar(110, 260, 'A', WHITE, BLUE, 5); } void DrawPixel_Noise(long int Number) { tft.fillScreen(WHITE); int x, y, C; for (int i = 0; i <= Number; i++) { x = random(0, 239); y = random(0, 319); C = random(0, 19); tft.drawPixel(x, y, ColorArray[C]); } } |
فیلم عملکرد کدهای پروژه بالا رو در زیر میبینید، شرمنده اگه کیفیت پایین هستش، موبایلمون سادس و اینو هم با وبکم لبتاب گرفتم، اگه کسی موبایل داره از پروژه فیلم بگیره و بفرسته ممنون میشم
2) پروژه نمایش تصویر در lcd tft آردوینو
تو این پروژه یه سری من عکس هم نشون میدم، فایل این عکس ها رو براتون در زیر قرار میدم و باس دانلودش کنید ودر رم بریزید و رم رو هم بزارید داخل رم ریدر و …(کلا آبو بریزید جایی که میسوزه، این دیگه معلومه و نیاز به گفتن نداره که )
توجه : اگه میخواین از رم استفاده کنید و عکس نشون بدید باید توابع read32 و read16 و ShowBMP24BIT رو در پروژتون قرار بدید و برای نمایش عکس از تابع ShowBMP24BIT استفاده کنید.
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 |
#include <SPI.h> #include <SD.h> #define SD_CS 10 #include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> //(int CS=A3, int RS=A2, int WR=A1, int RD=A0, int RST=A4) MCUFRIEND_kbv tft(A3, A2, A1, A0, A4); #define BLACK 0x0000 #define NAVY 0x000F #define DARKGREEN 0x03E0 #define DARKCYAN 0x03EF #define MAROON 0x7800 #define PURPLE 0x780F #define OLIVE 0x7BE0 #define LIGHTGREY 0xC618 #define DARKGREY 0x7BEF #define BLUE 0x001F #define GREEN 0x07E0 #define CYAN 0x07FF #define RED 0xF800 #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define ORANGE 0xFD20 #define GREENYELLOW 0xAFE5 #define PINK 0xF81F void setup() { tft.reset(); uint16_t identifier = tft.readID(); tft.begin(0x9340); if (!SD.begin(SD_CS)) { return; } tft.reset(); uint16_t Identifier = tft.readID(); if (Identifier == 0xEFEF) Identifier = 0x9341; tft.begin(Identifier); } void loop() { Tabligat(); ShowImage(); } void Tabligat() { // ^_^ tft.setRotation(0); // آواتار من + یکم بازی با رنگ و معکوس کردن رنگ ها ShowBMP24BIT("DMF313.bmp", 0, 0); for (int i = 1; i <= 5; i++) { tft.invertDisplay(true); delay(1000); tft.invertDisplay(false); delay(1000); } } void ShowImage() { tft.setRotation(0); ShowBMP24BIT("1.bmp", 0, 0);// delay(1000); ShowBMP24BIT("2.bmp", 0, 0);// delay(1000); ShowBMP24BIT("3.bmp", 0, 0);// delay(1000); ShowBMP24BIT("4.bmp", 0, 0);// delay(1000); ShowBMP24BIT("5.bmp", 0, 0);// delay(1000); ShowBMP24BIT("6.bmp", 0, 0);// delay(1000); ShowBMP24BIT("7.bmp", 0, 0);// delay(1000); ShowBMP24BIT("8.bmp", 0, 0);// delay(1000); ShowBMP24BIT("9.bmp", 0, 0);// delay(1000); ShowBMP24BIT("10.bmp", 0, 0);// delay(1000); ShowBMP24BIT("11.bmp", 0, 0);// delay(1000); ShowBMP24BIT("12.bmp", 0, 0);// delay(1000); ShowBMP24BIT("13.bmp", 0, 0);// delay(1000); ShowBMP24BIT("14.bmp", 0, 0);// delay(1000); ShowBMP24BIT("15.bmp", 0, 0);// delay(1000); ShowBMP24BIT("16.bmp", 0, 0); //delay(1000); tft.setRotation(1); ShowBMP24BIT("17.bmp", 0, 0); //delay(1000); ShowBMP24BIT("18.bmp", 0, 0); //delay(1000); ShowBMP24BIT("19.bmp", 0, 0); //delay(1000); ShowBMP24BIT("20.bmp", 0, 0); //delay(1000); ShowBMP24BIT("21.bmp", 0, 0); //delay(1000); } void ShowBMP24BIT(char *filename, int x, int y) { File bmpFile; int bmpWidth, bmpHeight; // W+H in pixels uint8_t bmpDepth; // Bit depth (currently must be 24) uint32_t bmpImageoffset; // Start of image data in file uint32_t rowSize; // Not always = bmpWidth; may have padding uint8_t sdbuffer[60]; // pixel in buffer (R+G+B per pixel) uint16_t lcdbuffer[20]; // pixel out buffer (16-bit per pixel) uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer boolean goodBmp = false; // Set to true on valid header parse boolean flip = true; // BMP is stored bottom-to-top int w, h, row, col; uint8_t r, g, b; uint32_t pos = 0, startTime = millis(); uint8_t lcdidx = 0; boolean first = true; uint32_t DataShow; if ((x >= tft.width()) || (y >= tft.height())) return; //Serial.println(); //Serial.print(F("Loading image '")); //Serial.print(filename); //Serial.println('\''); // Open requested file on SD card if ((bmpFile = SD.open(filename)) == NULL) { //Serial.println(F("File not found")); return; } // Parse BMP header if (read16(bmpFile) == 0x4D42) { // BMP signature DataShow = read32(bmpFile); //Serial.println(F("File size: ")); Serial.println(DataShow); (void)read32(bmpFile); // Read & ignore creator bytes bmpImageoffset = read32(bmpFile); // Start of image data //Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); // Read DIB header DataShow = read32(bmpFile); //Serial.print(F("Header size: ")); Serial.println(DataShow); bmpWidth = read32(bmpFile); bmpHeight = read32(bmpFile); if (read16(bmpFile) == 1) { // # planes -- must be '1' bmpDepth = read16(bmpFile); // bits per pixel //Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); if ((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed goodBmp = true; // Supported BMP format -- proceed! //Serial.print(F("Image size: ")); //Serial.print(bmpWidth); //Serial.print('x'); //Serial.println(bmpHeight); // BMP rows are padded (if needed) to 4-byte boundary rowSize = (bmpWidth * 3 + 3) & ~3; // If bmpHeight is negative, image is in top-down order. // This is not canon but has been observed in the wild. if (bmpHeight < 0) { bmpHeight = -bmpHeight; flip = false; } // Crop area to be loaded w = bmpWidth; h = bmpHeight; if ((x + w - 1) >= tft.width()) w = tft.width() - x; if ((y + h - 1) >= tft.height()) h = tft.height() - y; // Set TFT address window to clipped image bounds tft.setAddrWindow(x, y, x + w - 1, y + h - 1); for (row = 0; row < h; row++) { // For each scanline... // Seek to start of scan line. It might seem labor- // intensive to be doing this on every line, but this // method covers a lot of gritty details like cropping // and scanline padding. Also, the seek only takes // place if the file position actually needs to change // (avoids a lot of cluster math in SD library). if (flip) // Bitmap is stored bottom-to-top order (normal BMP) pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize; else // Bitmap is stored top-to-bottom pos = bmpImageoffset + row * rowSize; if (bmpFile.position() != pos) { // Need seek? bmpFile.seek(pos); buffidx = sizeof(sdbuffer); // Force buffer reload } for (col = 0; col < w; col++) { // For each column... // Time to read more pixel data? if (buffidx >= sizeof(sdbuffer)) { // Indeed // Push LCD buffer to the display first if (lcdidx > 0) { tft.pushColors(lcdbuffer, lcdidx, first); lcdidx = 0; first = false; } bmpFile.read(sdbuffer, sizeof(sdbuffer)); buffidx = 0; // Set index to beginning } // Convert pixel from BMP to TFT format b = sdbuffer[buffidx++]; g = sdbuffer[buffidx++]; r = sdbuffer[buffidx++]; lcdbuffer[lcdidx++] = tft.color565(r, g, b); } // end pixel } // end scanline // Write any remaining data to LCD if (lcdidx > 0) { tft.pushColors(lcdbuffer, lcdidx, first); } //Serial.print(F("Loaded in ")); //Serial.print(millis() - startTime); //Serial.println(" ms"); } // end goodBmp } } bmpFile.close(); //if (!goodBmp) Serial.println(F("BMP format not recognized.")); } uint16_t read16(File f) { uint16_t result; ((uint8_t *)&result)[0] = f.read(); // LSB ((uint8_t *)&result)[1] = f.read(); // MSB return result; } uint32_t read32(File f) { uint32_t result; ((uint8_t *)&result)[0] = f.read(); // LSB ((uint8_t *)&result)[1] = f.read(); ((uint8_t *)&result)[2] = f.read(); ((uint8_t *)&result)[3] = f.read(); // MSB return result; } |
فیلم پروژه بالا رو هم در زیر میبینید(بازم شرمنده بابت کیفیت پایین اگه کسی میتونه فیلم بگیره و بفرسته )
3) پروژه نقاشی با آردوینو
تو این پروژه از کتابخونه صفحه تاچ هم استفاده کردیم، که در بالا این کتابخونه صفحه تاچ رو توضیح نداده بودم، بعد از این پروژه توضیحش میدم و انشاالله اگه حسش بود برا اونم یه چند تا پروژه میزارم تو سایت.
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 |
#include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; #include <TouchScreen.h> // most mcufriend shields use these pins and Portrait mode: uint8_t YP = A1; // must be an analog pin, use "An" notation! uint8_t XM = A2; // must be an analog pin, use "An" notation! uint8_t YM = 7; // can be a digital pin uint8_t XP = 6; // can be a digital pin uint8_t SwapXY = 0; uint16_t TS_LEFT = 920; uint16_t TS_RT = 150; uint16_t TS_TOP = 940; uint16_t TS_BOT = 120; // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms across the X plate TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); TSPoint tp; #define MINPRESSURE 20 #define MAXPRESSURE 1000 #define SWAP(a, b) {uint16_t tmp = a; a = b; b = tmp;} int16_t BOXSIZE; int16_t PENRADIUS = 3; uint16_t identifier, oldcolor, currentcolor; uint8_t Orientation = 0; //PORTRAIT // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF void setup(void) { uint16_t tmp; tft.begin(9600); tft.reset(); identifier = tft.readID(); TS_LEFT = 920; TS_RT = 139; TS_TOP = 944; TS_BOT = 150; SwapXY = 0; ts = TouchScreen(XP, YP, XM, YM, 300); tft.begin(identifier); tft.setRotation(0); tft.fillScreen(BLACK); BOXSIZE = tft.width() / 6; tft.fillScreen(BLACK); tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); currentcolor = RED; } void loop() { uint16_t xpos, ypos; //screen coordinates tp = ts.getPoint(); //tp.x, tp.y are ADC values // if sharing pins, you'll need to fix the directions of the touchscreen pins pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); pinMode(XP, OUTPUT); pinMode(YM, OUTPUT); // digitalWrite(XM, HIGH); // digitalWrite(YP, HIGH); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (tp.z > MINPRESSURE && tp.z < MAXPRESSURE) { // is controller wired for Landscape ? or are we oriented in Landscape? if (SwapXY != (Orientation & 1)) SWAP(tp.x, tp.y); // scale from 0->1023 to tft.width i.e. left = 0, rt = width // most mcufriend have touch (with icons) that extends below the TFT // screens without icons need to reserve a space for "erase" // scale the ADC values from ts.getPoint() to screen values e.g. 0-239 xpos = map(tp.x, TS_LEFT, TS_RT, 0, tft.width()); ypos = map(tp.y, TS_TOP, TS_BOT, 0, tft.height()); // are we in top color box area ? if (ypos < BOXSIZE) { //draw white border on selected color box oldcolor = currentcolor; if (xpos < BOXSIZE) { currentcolor = RED; tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 2) { currentcolor = YELLOW; tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 3) { currentcolor = GREEN; tft.drawRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 4) { currentcolor = CYAN; tft.drawRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 5) { currentcolor = BLUE; tft.drawRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 6) { currentcolor = MAGENTA; tft.drawRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, WHITE); } if (oldcolor != currentcolor) { //rub out the previous white border if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); if (oldcolor == GREEN) tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); if (oldcolor == CYAN) tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); if (oldcolor == BLUE) tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); } } // are we in drawing area ? if (((ypos - PENRADIUS) > BOXSIZE) && ((ypos + PENRADIUS) < tft.height())) { tft.fillCircle(xpos, ypos, PENRADIUS, currentcolor); } // are we in erase area ? if (ypos > tft.height() - 10) { // press the bottom of the screen to erase tft.fillRect(0, BOXSIZE, tft.width(), tft.height() - BOXSIZE, BLACK); } } } |
اینم از فیلم پروژه(بازم با وب کم فیلم گرفتم )
دانلود چیز میزای پروژه آردوینو این مطلب !
دانلود پروژه ها و عکس ها و کتابخونه های مورد نیاز این مطلب
توجه : این آفتاب رایانه متاسفانه دو نوع نمایشگر رو با یک نام داره میفروشه، البته در ظاهر شبیه هم هستن ولی فرق هایی دارن، اگه پروژه نقاشی براتون کار نکرد از پروژه زیر استفاده کنید : دانلود
چیزایی که من نگفتم
به علت این که من وقت ندارم!!! بیش از این نمیتونم توضیح بدم، بقیش بمونه برای بعد
- توضیح توابع صفحه تاچ و چند پروژه ازش
- نحوه ساخت و تغییر فوت
مطالب مرتبط
How to display images on 2.4inch TFT and make it a digital photoframe
آموزش و پروژه نمایشگر های دیگه با آردوینو :
آموزش نمایشگر گرافیکی ks0108 با arduino جلسه1
آموزش نمایشگر گرافیکی ks0108 با arduino جلسه2
آموزش جامع کار با lcd کاراکتری در ARDUINO
پروژه و آموزش راه اندازی lcd nokia 5110 با arduino
خب امیدوارم این مطلب براتون مفید بوده باشه، این مطلب رو بنا به درخواست آقایان احسان تابش و علی قهرمانی نوشتم، لطفا پس از مطالعه مطلب هزینه مطلب رو هم بپردازید(هزینه مطلب : 10 تا صلوات برای تعجیل در فرج آقا امام زمان عج و دعا برای دعا برای پیروزی بچه های مقاومت و نابودی داعش و رژیم صهیونیستی و آل سغوط)
بیش از این مزاحتمتون نمیشم، تا مطلب بعدی اگه زنده بودیم یا علی.
مهمان
سلام
خسته نباشی مومن
بسیار عالی بود لذت بردم.
موفق و پیروز باشید .
انشالله
مهمان
سلام خسته نباشی مهندس عالی.یه سوال.چطوری میشه زمان تعویض عکسهارو به دلخواه کم و زیاد کرد.لنگم.ممنون یا علی
مهمان
سلام
یک وال دیگر
فرق بین مدل درایور دار با بدون درایور چی هست ؟
مهمان
سلام
عالی بود
در مورد راه اندازی تاچ 2.2 اینچی مطلب ندارید
مهمان
سلام دوباره به آقا مهدی عزیز فکر کنم مشکل رو حل کردم تو این شیلد پنچ پینRST,CS,RS,WR, RD هست که برای ارتباط SPIباید
باشه حالا چه در سی چه در بسکام آیا درست میگم . راهنماییم کن لطفا . یه خورده کمک کن آقا مهدی
نویسنده این مطلب
یا باید کتابخونه ای به زبون بسکام براش پیدا کنی یا دیتاشیتشو پیدا کنی و بخونی و یه کتابخونه براش بنویسی / یا این که بری سمت سی و از کتابخونه های موجود به زبان سی استفاده کنی.
مهمان
ممنون . من سی رو تازه شروع کردم . این شیلد هم که دیتا شیت نداره گشتم قبلا . ترتیب پین ها با ماژول ال سی دی اصلا مشخص نیست. نمیخوام خرج اضافی کنم برم همین ال سی دی رو با ارتباط SPI بگیرم اونم با این گرونیه سرسام آور به هر حال ممنونم ازت که وقت میذاری ,و جواب میدی سپاس
نویسنده این مطلب
خب اگه سی بلد باشی میتونی کتابخونه های موجود ( که جواب داده برات ) رو از سی به بیسیک تبدیل کنی.
مهمان
سلام آقا مهدی امیدوارم بتونی کمکم کنی من بسکام کار میکنم میخوام ایم ماژول رو تو بسکام را بدازم به هر دری زدم هیچچی پیدا نکردم آخر سر گفتم از شما بپرسم شاید راهی باشه ممنون میشم کمکم کنی
نویسنده این مطلب
سلام//بسکامو بزار کنار اگه میخوای تو این زمینه فعالیت داشته باشی ( برو سمت سی – چیز خاصی نداره سادس )
مهمان
سلام ممنونم آقا مهدی همین قصد و دارم ولی الان باید اینو تو بسکام را بندازم ممنون میشم اگه راهی جلو پام بذاری
مهمان
بهترین سایتی که تو عمرم دیدم عالیه اکثر چیزا رو از سایت شما یاد گرفتم
مهمان
منم درگیر بسکام هستم هیچ آموزشی نداره فقط تا اینجای کار شما باید با دستور waitkey() ورودی رو از rx بگیری فعلا مشکلی که هست اینه که به محض اتصال اعداد متفاوت دریافت میشه
مهمان
سلام نمیدونم به این جا سر میزنی یا نه به هر حال جوابش استفاده از کامپایلر micro basic هست . بسکام رو ول کن هم visual TFT داره که به راحتی می تونی ال سی دی رو پیکر بندی کنی و منوهای خفن تاچ بسازی یا مستقل visual TFT رو داونلود کن ولی باز هم باید micro basic رو داشته باشی تا کامپایل کنه موفق باشی امیدوارم پست رو ببینی
مهمان
متاسفانه کد نمایش عکس های با فرمت بیت مپ روی ال سی دی 3.5 اینچی MCUFRIEND کار نمیکنه (آردوینو مگا 2560) – صفحه سفید میشه کلا – و فقط از نمونه کتابخونه ش کار میکنه، مثال showBMP_not_UNO کار میکنه
مهمان
خواستم بگم ده تا صلوات رو فرستادم. خدا خیرت بده
مهمان
سلام . عالی بود لطفا * توضیح توابع صفحه تاچ و چند پروژه ازش* رو هم بزارید . مثلا چطوری با کلیک رو منوی خاصی ؛ رله مورد نظر فعال بشود
مهمان
سلام خیلی عالی بود
مهمان
سلام خسته نباشین مهندس
میخواستم بدونم این ال سی دی رنگی در بازار جهت اندازه با هم فرق دارند.
TFT2/4 coloor
مهمان
سلام
من برای راه اندازی کدها مشکل دارم. خود نمایشگر درست کار میکنه اما موقع ارسال بقیه کدهای نمونه به آردوینو مگا یا کدهایی که خودم نوشته ام، کدها کامپایل نمیشه. همه کتابخونه ها رو هم نصب کردم اما حل نشد. میشه کمکم کنید؟
مهمان
سلام مهندس جان
سایتتون واقعا عالیه، خیلی خیلی
من یه مشکلی دارم ، یه تاچ لمسی خازنی گرفتم ، نمی دونم چه طور راه اندازیش کنم با رزبری،میشه کمک کنید
این صفحه تاچه :
https://eshop.eca.ir/نمایشگرهای-tft/9803-تاچ-خازنی-9-اینچ-6-پین-مدل-gt911.html
نویسنده این مطلب
تو همین لینکی که گزاشتی، کتابخونشو هم گزاشته.
مهمان
سلام
ممنون بابت اموزش خوبتون
یه سوال اگه از این شیلد روی برد اردینو uno استفاده کنیم کل پین های ورودی/خروجی برد اردینو درگیر میشه؟
یعنی پین ازاد برای کارهای دیگه نداره؟
نویسنده این مطلب
سلام – برد نمایشگر فوق رو UNO سوار میشه همونطور که در عکس اول مطلب میبینید – فلذا دیگه نمیتونید از پایه های دیگه استفاده کنید.
اما برا این که بدونید دقیقا چه پایه هایی مورد استفاده قرار گرفته و کدوم پایه ها بدون استفاده هستش باید به کد پروزه و کتابخونه نمایشگر فوق برید و کدها رو بررسی کنید.
مهمان
ممنون
( فلذا ) رو خوب اومدی
مهمان
ممنونم خسته نباشین پروژه فوق را با ال سی دی و برد اردینو انو امتحان کردم جواب نمیده
فکر می کنید چی اشکالی داره ؟ ایا ال سی دی فرق داره ؟ خواهشا راهنمایی فرمایید ممنونم
نویسنده این مطلب
سلام – شرمنده که یکم دیر جواب میدم – یکم کم حوصله شودم حقیقتا.
والا این نمایشگرا مدلای مختلفی با نام و شکل یکسان تولید شده! ولی خب درکل یه کرواسن همشون – اگه از اتصالات و سلامت نمایشگر ( که تاحالا نمایشگر خراب ندیدم! ) مطمئنی، باید کدهای پروژه رو ور بری / این که بگم کجای کدها، نمیدونم، باید خودت بررسی کنی.
مهمان
سلام و عرض خسته نباشید
من تو این lcd دستور ساده print رو که می نویسم برعکس نمایش میده ممنون میشم مشکلم رو حل کنید.
مهمان
سلام. میشه بدون برنامه نویسی عکس نمایش داد. با اردوینو uno r3.
ممنون.
نویسنده این مطلب
سلام-یعنی چی؟ میکرو همش کدنویسی هستش.
مهمان
سلام ببخشید در codevision من هم تاچ اسکرین دارم هم glcd ام در codewizard هستن دوتاشون نمی دونم چجوری از تاچ اسکرین استفاده کنم؟
نویسنده این مطلب
سلام – با کدویزارد کار نکردم – برا بحث این پرژه – اطلاعی ندارم – شما باید بررسی کنید که اونی که تو کدویژن هستش کتابخونش برا همین نمایشگر با همین هسته ( آیسی مرکزی ) هستش –
مهمان
سلام خسته نباشید
میشه برنامه lcd رو با بسکام بزارید ؟؟؟؟؟
خیلی ممنون میشم
نویسنده این مطلب
سلام-بسکام کار نیستم.
مهمان
سلام خسته نباشید
میخواستم ببینم میشه ویدیو داخل رم ریخت و نمایش داد
اگه میشه کدش رو توضیح بدید
ممنون
مهمان
سلام ممنونم از مطلب عالیتون فقط یه سوال داشتم که فکر نکم خیلی ام پیچیده باشه اونم اینکه
اگه بخواهیم مختصات مکان لمس شده رو روی lcd نمایش بدیم باید چه کدی رو بنویسیم
در ضمن این پروزه ها با هسته 9341 هم راه اندازی میشه یا خیر
مهمان
سلام
امکان تغییر فونت وجود داره؟
کد تغییر فونت چیه؟
نویسنده این مطلب
سلام-کتابخونشو بررسی کن – نمیدونم والا
مهمان
سلام
دوستان اگر کسی راه اندازی tft lcd 2.8 رو بلده ممنون میشم راهنمایی کنه
مهمان
سلام ممنون از توضیحات خوبتان
یه سوال داشتم…
راهی هست که عکس ها رو بدون استفاده از رم در برنامه بخونیم؟ (مثل فراخوانی تابع در avr)
نویسنده این مطلب
سلام
یعنی عکسا تو حافظه میکرو باشه؟ بستگی به اندازه عکس داره که چند در چنده – چون حجم کدش زیاد میشه و تو میکرو جا نمیشه – که خب باید بررسی کنی.
مهمان
سلام
آقا کارت عالی بود خیلی ممنون
مهمان
سلام . من یه ال سی دی شبیه این دارم که با رجیستر ili9481 و ili9341 کار میکنه .
مشکل بزرگ من اینه که کتابخونه خوبی نتونستم براش پیدا کنم ظاهرا . و رنگ هام نگاتیو هست . حتی عکسیم که از روی اس دی لود میشه به این صورت هست و رنگ هاش وارانست .
ممنون میشم کمک کنید .
مهمان
سلام
ممنون از سایت خیلی خوبتون. خدا خیرتون بده.
یه سوال داشتم-با همین کتابخونه هایی که گذاشتید، پروژه اول راه اندازی شد اما پروژه دوم(نمایش عکس) جواب نداده
مهمان
تشکر
مهمان
تشکر و اما:
میتونید آموزشی بذارید برای تغییر فونت؟ فونت پیش فرض حالت کاراکتری داره و زمخت هست.
نویسنده این مطلب
سلام-نه متاسفانه.
مهمان
سلام وقت بخیر تصویر آیینه ای دارم و متن ها رو برعکس مینویسه. میشه بگید با چه دستوری میتونم درستش کنم
نویسنده این مطلب
سلام-دلیلشو نمیدونم-باید برید تو کتابخونه و بررسی کنید خودتون.
مهمان