А чего это мы не делаем фоторамки?
- Войдите на сайт для отправки комментариев
Пнд, 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-диод, что бы дети порнуху по твоему выключателю не смотрели.
работаем потихоньку. Щас вот новую ревизию основной платы делаю. Что сократить количество и длинну проводков до всяких там динамиков , микрофона и прочй выносной фигни.
а доктор пилит сервер и апп.
Вариант без экрана тоже есть.