Официальный сайт компании Arduino по адресу arduino.cc
А чего это мы не делаем фоторамки?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 13/07/2015 - 15:46
Очень даже оживляет экранчик.
#include <SD.h> #include "TFTLCD.h" // Color definitions #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF TFTLCD tft; //#ifdef MyNano File root; struct BITMAPFILEHEADER { word bfType; long unsigned int bfSize; word bfReserved1; word bfReserved2; long unsigned int bfOffBits; }; struct BITMAPCOREHEADER { long unsigned int bcSize; word bcWidth; word bcHeight; word bcPlanes; word bcBitCount; }; struct BITMAPINFOHEADER { long unsigned int biSize; long int biWidth; long int biHeight; word biPlanes; word biBitCount; long unsigned int biCompression; long unsigned int biSizeImage; long int biXPelsPerMeter; long int biYPelsPerMeter; long unsigned int biClrUsed; long unsigned int biClrImportant; }; struct BITMAPINFO { BITMAPCOREHEADER Core; BITMAPINFOHEADER Info; }; struct FILE_BMP { BITMAPFILEHEADER Header; BITMAPINFO Info; word Data[]; }; File myFile; //----------------------- void setup(void) { tft.reset(); tft.initDisplay(); // testtext(YELLOW); tft.fillScreen(BLACK); tft.setCursor(0, 0); tft.setTextColor(YELLOW); tft.setTextSize(1); pinMode(10, OUTPUT); digitalWrite(10, HIGH); tft.print("init..."); if (!SD.begin(10)) { tft.println(" failed!"); delay(3000); return; } else { tft.println(" done."); root = SD.open("/"); printDirectory(root, 0); delay(3000); root = SD.open("/"); } } void printDirectory(File dir, int numTabs) { byte I=38; while(I--) { File entry = dir.openNextFile(); if (! entry) { // no more files break; } for (uint8_t i=0; i<numTabs; i++) { tft.print(' '); } tft.print(entry.name()); if (entry.isDirectory()) { tft.println("/"); printDirectory(entry, numTabs+1); } else { // files have sizes, directories do not tft.print(" "); tft.println(entry.size(), DEC); } entry.close(); } } boolean IsValideBMP(void* bmp, word len) { return ((( BITMAPINFOHEADER*)bmp)->biWidth==240) && ((( BITMAPINFOHEADER*)bmp)->biHeight==320) && ((( BITMAPINFOHEADER*)bmp)->biBitCount==16); } #define BUFER_OUT_IMG_SIZE 255 //word!!! byte OutBMP565_callback(word* b, void* d) { return ((File*)d)->read(b, BUFER_OUT_IMG_SIZE*2)/sizeof(word); } boolean OutBMP565(void) { word buf[BUFER_OUT_IMG_SIZE]; byte size_buf; size_buf = myFile.read(buf, sizeof(BITMAPFILEHEADER)); if(((BITMAPFILEHEADER*)buf)->bfType!=0x4d42) return false; size_buf = myFile.read(buf, ((BITMAPFILEHEADER*)buf)->bfOffBits-size_buf); if(IsValideBMP(buf, size_buf)) { tft.bulkWrite(buf, BUFER_OUT_IMG_SIZE, &OutBMP565_callback, &myFile); return true; } return false; } //=================== void loop(void) { while(true) { myFile = root.openNextFile(); if (! myFile) { // no more files root.close(); root = SD.open("/"); return; } if (!myFile.isDirectory()) { if(strstr(myFile.name(), ".BMP")) { if(OutBMP565()) delay(3000); } } myFile.close(); } }
Да, либку надо допилить,
bulkWrite
в ней не такой как надо. Будет интересно - поясню чё к чему.в фоторамке главное - хорошая качественная матрица, желательно IPS. ардуина тут никаким боком, у нее другие применения
Тоже невидаль! IPS?! Он есть для Вас! http://www.dx.com/ru/p/3-2-inch-tft-ips-480-x-320-262k-color-full-angle-...
ну и что это за фоторамка 3 дюйма, под лупой смотреть как в 50х первые телевизоры????
Ну это кому какая требуется. В продаже есть готовые и на 3 дюйма. На рабочем столе или в авто 3-4 дюйма- самое оно. Тут вобще интерес в другом. На многих шилдах LCD сразу и ридер микроSD идет. Два в одном флаконе. И если в поделке уже есть такой LCD, то вполне логично добавить немного кода к существующему и расширить функционал. Получим, к примеру, осцилограф подрабатывающий в свободное от основной работы время фоторамкой.
угу. Доктора на вас нет. Он мне за попытку сделать фоторамку из выключателя, мозг выел.
кстати, шо там с твоим выключателем-монитором?
*я бы на месте доктора заменил бы LCD на RGB-диод, что бы дети порнуху по твоему выключателю не смотрели.
кстати, шо там с твоим выключателем-монитором?
*я бы на месте доктора заменил бы LCD на RGB-диод, что бы дети порнуху по твоему выключателю не смотрели.
работаем потихоньку. Щас вот новую ревизию основной платы делаю. Что сократить количество и длинну проводков до всяких там динамиков , микрофона и прочй выносной фигни.
а доктор пилит сервер и апп.
Вариант без экрана тоже есть.