سلام : تو این مطلب زیاد حال توضیح ندارم بدم حقیقتا، چند وقت پیش همین طوری دستپا شکسته یه پروژه آردوینو mp3 player با lcd رنگی و لمسی کردم گفتم بزارم تو سایت چون خیلی وقت پیش میخواستم بزارم ولی خب امان از تنبلی و سایر مشکلات، چیز مالی هم نیست و مشکلات خودش رو هم داره که من حال درست کردنش رو ندارم چون وقتش رو ندارم.
خرید : تمام قطعاتش رو سایت آفتاب رایانه داره ولی من هیچ تضمینی نمیدم که مشکلی رخ نده، مثلا یه نمایشگر دیگه براتون بفرستن یا قطعه خراب بفرستن کلا هر مشکلی رخ بده به من ربطی نداره، بعد نگید دمرچیلو گفت برید از این سایته بخرید، سایت ECA هم ماژول VS1053 و برد آردوینو رو داره و من خودم از همین جا خریدم که یکی از بردهای آردوینویی که برام فرستادن از اون آشغالا بود و تو دفعه دوم تست کردن سوخت، سایت آفتاب رایانه هم میترسم این نمایشگری که من در این پروژه استفاده کردم رو برا شما نفرسته.(شکل و ظاهر و اسم نمایشگر یکی هستش ولی تفاوت هایی با هم دارن.)
شماتیک پروژه
شماتیکش چیز خاصی نداره، فقط نیاز به دو تا برد آردوینو UNO هستش، یه نمایشگر 2.4 اینچ رنگی با صفحه تاچ و یه برد پخش صدا با آیسی مرکزی VS1053
پروژه mp3 player با آردوینو با تراشه vs1053
پروژه و آموزش راه اندازی lcd tft 2.4 inch با آردوینو
دو تا مطلب بالا رو بخونید میبینید که دو تا شیلد آردوینو هستش که رو برد آردوینو یونو سوار میشه شما باید :
- پایه TX میکروی اولی رو به RX میکروی دومی وصل کنید.
- پایه RX میکروی اولی رو به TX میکروی دومی وصل کنید.
خب دیگه کاری خاصی نمیخواد بکنید، فقط اون عکس های مورد نیاز MP3 PLAYER و آهنگ های مد نظرتون رو بریزید تو 2 تا رم و هر کدومشون رو به یکی از شیلد های آردوینو وصل کنید. (فرمت فایل های صوتی باید MP3 باشه)
کد پروژه
کدی که باید داخل میکرویی ریخته بشه که نمایشگر 2.4 اینچ ما روش سوار هستش.
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 455 456 457 458 459 460 461 462 |
#include <SPI.h> #include <SD.h> #define SdCard_CS 10 #include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; #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 ///////////////////////////////////////////////////////////////////// #include <TouchScreen.h> uint8_t YP = A2; // must be an analog pin, use "An" notation! uint8_t XM = A3; // must be an analog pin, use "An" notation! uint8_t YM = 8; // can be a digital pin uint8_t XP = 9; // can be a digital pin TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); TSPoint tp; #define MINPRESSURE 20 #define MAXPRESSURE 1000 uint16_t TS_LEFT = 921; uint16_t TS_RT = 175; uint16_t TS_TOP = 950; uint16_t TS_BOT = 180; uint16_t xpos, ypos; //screen coordinates ///////////////////////////////////////////////////////////////////// uint8_t ButtonSelected = 0; uint8_t SoundSelected = 0; uint8_t VolumeSelected = 0; uint8_t LastVolumeSelected = 0; bool volume = 1; uint8_t MusicSelected = 0; String MusicName[16]; // i : 1-5 void SelectButton(uint8_t i) { if ( i != ButtonSelected ) { if (ButtonSelected != 0) tft.drawRect(48 * (ButtonSelected - 1), 272, 48, 48, WHITE); tft.drawRect(48 * (i - 1), 272, 48, 48, RED); } ButtonSelected = i; } // i : 1-11 void SelectSound(uint8_t i) { if ( i != SoundSelected ) { if ( SoundSelected != 0 ) tft.drawRect(0, (15*(SoundSelected-1)) + SoundSelected - 3, 165, 16 + 2, WHITE); tft.drawRect(0, (15*(i-1)) + i - 3, 165, 16 + 2, RED); } SoundSelected = i; } // i : 0-100 void SetVolume(uint8_t i) { if ( VolumeSelected - 2 < i && VolumeSelected + 2 > i) { tft.fillRect(201, 56, 28, map( 100, 0, 100, 0, 204 ), WHITE); tft.fillRect(201, 56, 28, map( i, 0, 100, 0, 204 ), BLACK); if ( i <= 10 ) ShowBMP24BIT("mute.bmp", 192, 0); else ShowBMP24BIT("volume.bmp", 192, 0); } VolumeSelected = i; } void FindTouchPoint() { uint16_t xpos, ypos; //screen coordinates tp = ts.getPoint(); //tp.x, tp.y are ADC values int a; a = tp.x; tp.x = tp.y; tp.y = a; pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); pinMode(XP, OUTPUT); pinMode(YM, OUTPUT); if ( tp.z > MINPRESSURE && tp.z < MAXPRESSURE ) { // اگه فشار وارده در محدوده مد نظر ما بود // 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()); if ( ypos >= 0 && ypos <= 271 ) { // در محدوده انتخاب آهنگ قرار داریم if ( ypos >= 15 * 0 && ypos < 15 * 1 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 1; SelectSound(1); if(MusicName[0] != '\0') { Serial.println(">0" + MusicName[0] + "<"); delay(500); } } else if ( ypos >= 15 * 1 && ypos < 15 * 2 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 2; SelectSound(2); if(MusicName[1] != '\0') { Serial.println(">0" + MusicName[1] + "<"); delay(500); } } else if ( ypos >= 15 * 2 && ypos < 15 * 3 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 3; SelectSound(3); if(MusicName[2] != '\0') { Serial.println(">0" + MusicName[2] + "<"); delay(500); } } else if ( ypos >= 15 * 3 && ypos < 15 * 4 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 4; SelectSound(4); if(MusicName[3] != '\0') { Serial.println(">0" + MusicName[3] + "<"); delay(500); } } else if ( ypos >= 15 * 4 && ypos < 15 * 5 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 5; SelectSound(5); if(MusicName[4] != '\0') { Serial.println(">0" + MusicName[4] + "<"); delay(500); } } else if ( ypos >= 15 * 5 && ypos < 15 * 6 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 6; SelectSound(6); if(MusicName[5] != '\0') { Serial.println(">0" + MusicName[5] + "<"); delay(500); } } else if ( ypos >= 15 * 6 && ypos < 15 * 7 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 7; SelectSound(7); if(MusicName[6] != '\0') { Serial.println(">0" + MusicName[6] + "<"); delay(500); } } else if ( ypos >= 15 * 7 && ypos < 15 * 8 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 8; SelectSound(8); if(MusicName[7] != '\0') { Serial.println(">0" + MusicName[7] + "<"); delay(500); } } else if ( ypos >= 15 * 8 && ypos < 15 * 9 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 9; SelectSound(9); if(MusicName[8] != '\0') { Serial.println(">0" + MusicName[8] + "<"); delay(500); } } else if ( ypos >= 15 * 9 && ypos < 15 * 10 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 10; SelectSound(10); if(MusicName[9] != '\0') { Serial.println(">0" + MusicName[9] + "<"); delay(500); } } else if ( ypos >= 15 * 10 && ypos < 15 * 11 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 11; SelectSound(11); if(MusicName[10] != '\0') { Serial.println(">0" + MusicName[10] + "<"); delay(500); } } else if ( ypos >= 15 * 11 && ypos < 15 * 12 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 12; SelectSound(12); if(MusicName[11] != '\0') { Serial.println(">0" + MusicName[11] + "<"); delay(500); } } else if ( ypos >= 15 * 12 && ypos < 15 * 13 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 13; SelectSound(13); if(MusicName[12] != '\0') { Serial.println(">0" + MusicName[12] + "<"); delay(500); } } else if ( ypos >= 15 * 13 && ypos < 15 * 14 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 14; SelectSound(14); if(MusicName[13] != '\0') { Serial.println(">0" + MusicName[13] + "<"); delay(500); } } else if ( ypos >= 15 * 14 && ypos < 15 * 15 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 15; SelectSound(15); if(MusicName[14] != '\0') { Serial.println(">0" + MusicName[14] + "<"); delay(500); } } else if ( ypos >= 15 * 15 && ypos < 15 * 16 && xpos >= 0 && xpos <= 165 ) { MusicSelected = 16; SelectSound(16); if(MusicName[15] != '\0') { Serial.println(">0" + MusicName[15] + "<"); delay(500); } } } if ( ypos >= 272 && ypos <= 320 ) { // در محدوده تنظیمات پخش آهنگ هستیم if ( xpos >= 0 && xpos <= 47 ) { // Back SelectButton(1); Serial.println(">1Back<"); delay(500); } else if ( xpos >= 48 && xpos <= 95 ) { // Play SelectButton(2); Serial.println(">1Play<"); delay(500); } else if ( xpos >= 96 && xpos <= 143 ) { // Pause SelectButton(3); Serial.println(">1Pause<"); delay(500); } else if ( xpos >= 144 && xpos <= 191 ) { // Stop SelectButton(4); Serial.println(">1Stop<"); delay(500); } else if ( xpos >= 192 && xpos <= 239 ) { // Next SelectButton(5); Serial.println(">1Next<"); delay(500); } } if ( ypos >= 0 && ypos <= 47 && xpos >= 193 && xpos <= 240 ) { // در محدوده قطع و وصل کردن صدا هستیم volume = !volume; if ( volume == 0 ) ShowBMP24BIT("mute.bmp", 192, 0); else { SetVolume( VolumeSelected ); } if(volume) Serial.println(">2on<"); else Serial.println(">2off<"); delay(500); } if ( ypos >= 56 && ypos <= 260 && xpos >= 201 && xpos <= 229 ) { // در محدوده تنظیم میزان صدا قرار داریم uint8_t Volume = map(ypos, 56, 260, 0, 100); SetVolume( Volume ); if(LastVolumeSelected != Volume) { Serial.println((String)">3Volume=" + Volume + (String)"<"); LastVolumeSelected = Volume; } } } } void setup() { Serial.begin(115200); Serial.setTimeout(50); if (!SD.begin(SdCard_CS)) { // initialise sd-card >> SdCard_CS Serial.println(F("SD failed, or not present")); while (1); // don't do anything more } else { Serial.println(F("SD OK!")); } // راه اندازی نمایشگر tft.reset(); //tft.begin( tft.readID() ); tft.begin(0x9341); tft.setRotation(0); tft.fillScreen(WHITE); ShowBMP24BIT("Player.bmp", 0, 272); // /تنظیم صدا ShowBMP24BIT("volume.bmp", 192, 0); tft.fillRect(195, 50, 40, 216, BLACK); tft.fillRect(200, 55, 30, 206, WHITE); tft.setTextSize(1); tft.setTextColor(RED); tft.drawFastHLine(190, map( 0, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 0, 0, 100, 55, 261 ) - 5 ); tft.print(F("0")); // 0 tft.drawFastHLine(190, map( 10, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 10, 0, 100, 55, 261 ) - 5 ); tft.print(F("10")); // 10 tft.drawFastHLine(190, map( 20, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 20, 0, 100, 55, 261 ) - 5 ); tft.print(F("20")); // 20 tft.drawFastHLine(190, map( 30, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 30, 0, 100, 55, 261 ) - 5 ); tft.print(F("30")); // 30 tft.drawFastHLine(190, map( 40, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 40, 0, 100, 55, 261 ) - 5 ); tft.print(F("40")); // 40 tft.drawFastHLine(190, map( 50, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 50, 0, 100, 55, 261 ) - 5 ); tft.print(F("50")); // 50 tft.drawFastHLine(190, map( 60, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 60, 0, 100, 55, 261 ) - 5 ); tft.print(F("60")); // 60 tft.drawFastHLine(190, map( 70, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 70, 0, 100, 55, 261 ) - 5 ); tft.print(F("70")); // 70 tft.drawFastHLine(190, map( 80, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 80, 0, 100, 55, 261 ) - 5 ); tft.print(F("80")); // 80 tft.drawFastHLine(190, map( 90, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 90, 0, 100, 55, 261 ) - 5 ); tft.print(F("90")); // 90 tft.drawFastHLine(190, map( 100, 0, 100, 55, 261 ), 10, RED); tft.setCursor(170, map( 100, 0, 100, 55, 261 ) - 5 ); tft.print(F("100")); // 100\ tft.setTextSize(2); tft.setTextColor(BLACK); tft.setCursor(0, 0); unsigned long time_m = millis(); String Data; int Number=0; while( millis() - time_m < 10000) { UpSetup: if(Serial.available()) { Data = Serial.readStringUntil('\n'); Data.remove(Data.length() - 1, 1); if(Data == "End") goto DownSetup; else if(Data == "Start") goto UpSetup; else if (Data.endsWith("MP3")) { MusicName[Number] = Data; Number++; } else { return; } } } tft.setTextSize(3); tft.setTextColor(RED); tft.setCursor(0, 0); tft.println("ERROR"); return; DownSetup: // نمایش لیست آهنگ ها tft.setTextSize(2); tft.setTextColor(BLACK); tft.setCursor(0, 0); for(int i=0; MusicName[i]!='\0'; i++) tft.println((String)" " + MusicName[i]); } void loop() { FindTouchPoint(); } 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; } |
کد زیر هم باید در داخل میکرویی ریخته بشه که شیلد VS1053 بهش وصل هستش.
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 |
#include <SPI.h> #include <Adafruit_VS1053.h> #include <SD.h> // These are the pins used for the breakout example #define BREAKOUT_RESET 8 // VS1053 reset pin (output) #define BREAKOUT_CS 6 // VS1053 chip select pin (output) #define BREAKOUT_DCS 7 // VS1053 Data/command select pin (output) #define CARDCS 9 // Card chip select pin #define DREQ 2 // VS1053 Data request, ideally an Interrupt pin Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS); String Buffer; String MusicName[16]; char Music[20]; uint8_t mn=0; // MusicNumber uint8_t LastVolome = 30; void setup() { Serial.begin(115200); Serial.setTimeout(50); if (! musicPlayer.begin()) { // initialise the music player //Serial.println("Couldn't find VS1053, do you have the right pins defined?"); while (1); } else { //Serial.println("VS1053 found"); } if (!SD.begin(CARDCS)) { // initialise sd-card //Serial.println("SD failed, or not present"); while (1); } else { //Serial.println("SD OK!"); } musicPlayer.setVolume(LastVolome, LastVolome); // Set volume for left, right channels. lower numbers == louder volume! musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // DREQ int SaveMP3Name_in_ArrayString(); // ارسال نام آهنگ ها به میکروی نمایشگر لمسی Serial.println("Start"); delay(100); for(int i=0; MusicName[i]!='\0'; i++) { Serial.println( MusicName[i] ); delay(100); } Serial.println("End"); delay(100); }; void loop() { if (Serial.available()) { //String Data = Serial.readString(); String Data = Serial.readStringUntil('\n'); Data.remove(Data.length() - 1, 1); if (Data.startsWith(">") && Data.endsWith("<")) { if (Data.startsWith(">0")) { // تعیین آهنگی که باس پخش بشه Data.remove(0, 2); // Remove 2First Character Data.remove(Data.length() - 1, 1); // Remove 2Last Character for (mn = 0; MusicName[mn] != '\0'; mn++) { if (Data == MusicName[mn]) break; } } if (Data.startsWith(">1")) { // تنظیمات پخش - پخش _توقف لحظه ای_توقف کامل_بعدی_قبلی if (Data == ">1Back<") { } else if (Data == ">1Play<") { if (!musicPlayer.stopped()) musicPlayer.stopPlaying(); MusicName[mn].toCharArray(Music, 20); musicPlayer.startPlayingFile(Music); } else if (Data == ">1Pause<") { if (! musicPlayer.paused()) musicPlayer.pausePlaying(true); else musicPlayer.pausePlaying(false); } else if (Data == ">1Stop<") { musicPlayer.stopPlaying(); } else if (Data == ">1Next<") { } } if (Data.startsWith(">2")) { // قطع و وصل کردن صدا if (Data == ">2on<") musicPlayer.setVolume( LastVolome, LastVolome ); else if (Data == ">2off<") musicPlayer.setVolume( 200, 200 ); } if (Data.startsWith(">3")) { // تنظیم صدا int Volome = 0; Serial.println(Data + Data.length()); if (Data.length() == 11) { Volome = Data[9] - '0'; LastVolome = Volome; musicPlayer.setVolume( 99 - Volome, 99 - Volome ); } if (Data.length() == 12) { Volome = (Data[9] - '0') * 10 + (Data[10] - '0'); LastVolome = Volome; musicPlayer.setVolume( 99 - Volome, 99 - Volome ); } } } Data.remove(0, Data.length()); // پاک کردن دیتا از رشته دیتا while (Serial.available()) char Data = Serial.read(); // خالی کردن بافر دریافت } } void SaveMP3Name_in_ArrayString() { int i = 0; File dir = SD.open("/"); while (true) { File entry = dir.openNextFile(); if (! entry) break; Buffer = entry.name(); if (Buffer.endsWith(".mp3") || Buffer.endsWith(".MP3")) MusicName[i++] = Buffer; entry.close(); } } |
فیلم پروژه
تحقق وعده الهی : طبق آیات قرآن ( آیات 4 تا 8 سوره اسراء —-> تفسیر و ترجمه این آیات رو حتما بخونید) بنی اسرائیل 2 بار برتری طلبی میکنن و در زمین فساد میکنن و در هر دو بار بینیشون به خاک مالیده میشه و طبق نظر بعضی علما 1بار این اتفاق افتاده، انشاء الله لیاقت اجرای این وعده الهی نصیب بچه های روح الله خمینی میشه و رژیم صهیونیستی از صفحه روزگار محو میکنیم و فلسطین اشغالی رو آزاد میکنیم. انشاء الله
اللّهمَ عَجِّل لِوَلیِکَ الفَرَج وَ العافِیهِ وَ النَصر وَ اجعَلنا مِن خَیرِ اعوانِه و انصارِه
زیاد وقتتون رو نمیگیرم خودم هم زیاد حوصله ندارم فقط میخوام سریعتر این مطلبو تموم کنم برم سراغ ادامه کارام راستی یه رادیو کنترلی دارم میسازم در حد بوندسلیگا 400 تومن تا الان خرج خرید قطعه شده
تو آلتیوم مدار فرستنده اش رو طراحی و 3D ایش هم آماده کردم(اصل کار همین قسمته)، الان میخوام برم سراغ طراحی مدار گیرنده تو آلتیوم و بعد دادن به شرکت برا چاپ PCB و بعد لحیم کاری قطعات و بعد تست و بعد…
فعلا یا علی
مهمان
داداش با این کیفیت فیلم برداری واقعا اگر فیلم نمیذاشتی سنگین تر بود حداقل یه فیلم با کیفیت میداشتی که یه چیزی توش معلوم باشه
با تشکر از زحماتتون
مهمان
داداش شما بکارت ادامه ملت میخونن ولی حال نظر دادن ندارن
البته خودمم یکیشونم
مهمان
دمت گرم مهدی
چقدر نظر زیاده !!!!!