零知开源小项目-Bad Apple 零知版本
本帖最后由 零知实验室-roc 于 2018-7-17 21:14 编辑原文:零知开源小项目-Bad Apple 零知版本http://www.lingzhilab.com/forum. ... d&tid=323&fromuid=2
(出处: 零知实验室)
“有屏的地方就有Bad Apple”,现在我们零知开发板上也移植了这个Bad Apple,使用的是SD卡存储,OLED显示画面,主要是为了大家熟悉下OLED和SD卡这两个常用模块的应用。我们零知开发板刚好有两个硬件SPI接口,因此在这里两个设备都是使用的硬件SPI,速度都是大概是10兆,因此效果还不错。
1、硬件连接
[*]零知标准板
[*]OLED-ssd1036
[*]SD卡(网络扩展板带)
OLED的连接直接参照之前oled的显示教程,不过我在这里该到了SPI2上,因此需要把MOSI,SCLK这两根线连接到SPI2对应的脚上(34,32);
SD卡使用的是网络扩展板的SD卡,使用的micro SD卡,容量4g,直接把网络扩展板和零知板对接即可。
2、软件代码
程序很简单,就是SD卡上文件的读取,然后是OLED的图片显示。
说明:这里我使用的是BMP图片格式,较为简单,图片属性如下:
http://www.lingzhilab.com/data/attachment/forum/201807/17/205117f9ry0d24ddvfz49v.png
主要应用了PS软件进行批量更改图片为单色BMP格式。代码如下:
[*]/*
[*]读取sd卡的bmp图片
[*]
[*]*/
[*]
[*]#include <SPI.h>
[*]#include <SD.h>
[*]#include <Adafruit_SSD1306.h>
[*]
[*]//sd卡使用spi1
[*]//oled使用spi2
[*]
[*]#define OLED_DC 1
[*]#define OLED_CS 2
[*]#define OLED_RESET 0
[*]Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
[*]
[*]const int chipSelect = SS;
[*]
[*]unsigned char buff = {0};
[*]
[*]//Lingzhi logo
[*]static const unsigned char pic[] =
[*]{
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x70,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x06,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x0F,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x1F,0x80,0x4F,0xE0,0x06,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x3F,0xC1,0x3A,0x38,0x04,0x00,0x00,0x00,0x00,
[*]0x00,0x01,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xE0,0x04,0x00,0x04,0x00,0x00,0x00,0x00,
[*]0x00,0x03,0xFF,0xE0,0x00,0x00,0x01,0xFF,0xF8,0x0C,0x00,0x0F,0x80,0x00,0x00,0x00,
[*]0x00,0x07,0xFF,0xF0,0x00,0x00,0x03,0xFF,0xFC,0x04,0x00,0x12,0x06,0x00,0x00,0x00,
[*]0x00,0x1F,0xFF,0xF8,0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x02,0x73,0x00,0x00,0x00,
[*]0x00,0x1F,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0x00,0x00,0x07,0xE2,0x00,0x00,0x00,
[*]0x00,0x6F,0xFF,0xFE,0x00,0x00,0x13,0xFF,0xFF,0x80,0x00,0x74,0x22,0x00,0x00,0x00,
[*]0x00,0xF3,0xFF,0xFF,0x00,0x00,0x39,0xFF,0xFF,0xC0,0x00,0x06,0x26,0x00,0x00,0x00,
[*]0x01,0xF9,0xFF,0xFF,0x80,0x00,0xFC,0xFF,0xFF,0xE0,0x00,0x0D,0xBC,0x00,0x00,0x00,
[*]0x03,0xFC,0xFF,0xFF,0xC0,0x01,0xFE,0x7F,0xFF,0xF0,0x00,0x08,0xA0,0x00,0x00,0x00,
[*]0x07,0xFE,0x7F,0xFF,0xF0,0x03,0xFF,0x3F,0xFF,0xF8,0x00,0x10,0x00,0x00,0x00,0x00,
[*]0x0F,0xFF,0x3F,0xFF,0xF8,0x07,0xFF,0x81,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x1F,0xFF,0x83,0xFF,0xFC,0x0F,0xFF,0xC6,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x7F,0xFF,0xC1,0xFF,0xFE,0x1F,0xFF,0xCF,0x7F,0xFF,0x00,0x00,0x00,0x00,0x20,0x00,
[*]0x7F,0xFF,0x81,0xFF,0xFE,0x1F,0xFF,0xDF,0x3F,0xFF,0x80,0x00,0x00,0x00,0x30,0x00,
[*]0x7F,0xFF,0xC1,0xFF,0xFE,0x1F,0xFF,0xCF,0x7F,0xFF,0x80,0x00,0x00,0x00,0x3F,0x00,
[*]0x3F,0xFF,0xC1,0xFF,0xFC,0xCF,0xFF,0xE6,0x7F,0xFF,0x00,0x00,0x00,0x03,0xE3,0x00,
[*]0x1F,0xFF,0xFC,0xFF,0xF9,0xE7,0xFF,0xF0,0x3F,0xFE,0x00,0x00,0x00,0x02,0x10,0x00,
[*]0x0F,0xFF,0xFE,0x7F,0xF7,0xF3,0xFF,0xFF,0x9F,0xF8,0x00,0x00,0x00,0x00,0xD0,0x00,
[*]0x03,0xFF,0xFF,0x3F,0xEF,0xF9,0xFF,0xFF,0xCF,0xF0,0x00,0x00,0x00,0x00,0x10,0x00,
[*]0x01,0xFF,0xFF,0x9F,0xDF,0xFC,0xFF,0xFF,0xE7,0xE0,0x00,0x00,0x00,0x00,0x90,0x00,
[*]0x00,0xFF,0xFF,0xC7,0x3F,0xFF,0x3F,0xFF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x3F,0x80,
[*]0x00,0x7F,0xFF,0xF2,0x7F,0xFF,0x9F,0xFF,0xF9,0x80,0x00,0x00,0x00,0x07,0xA0,0x00,
[*]0x00,0x3F,0xFF,0xF8,0xFF,0xFF,0xCF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x28,0x00,
[*]0x00,0x1F,0xFF,0xF9,0xFF,0xFF,0xC7,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,
[*]0x00,0x0F,0xFF,0xF3,0xFF,0xFF,0x93,0xFF,0xF8,0x00,0x00,0x00,0x00,0x01,0x86,0x00,
[*]0x00,0x07,0xFF,0xE7,0xFF,0xFF,0x39,0xFF,0xF0,0x00,0x00,0x00,0x00,0x02,0x02,0x00,
[*]0x00,0x03,0xFF,0xCF,0xFF,0xFC,0x7C,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x01,0xFF,0x9F,0xFF,0xF9,0xFE,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0xFF,0x3F,0xFF,0xF3,0xFF,0x3F,0x80,0x00,0x00,0x04,0x60,0x00,0x00,0x00,
[*]0x00,0x00,0x7E,0x7F,0xFF,0xE7,0xFF,0x9F,0x00,0x00,0x00,0x3E,0x60,0x00,0x00,0x00,
[*]0x00,0x00,0x3D,0xFF,0xFE,0x0F,0xFF,0xCE,0x00,0x00,0x00,0x14,0x50,0x00,0x00,0x00,
[*]0x00,0x00,0x03,0xFF,0xFC,0x1F,0xFF,0xE0,0x00,0x00,0x00,0x14,0x88,0x00,0x00,0x00,
[*]0x00,0x00,0x03,0xFF,0xFC,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x15,0x0C,0x00,0x00,0x00,
[*]0x00,0x00,0x03,0xFF,0xFC,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x14,0xF7,0x00,0x00,0x00,
[*]0x00,0x00,0x01,0xFF,0xFC,0x1F,0xFF,0xE0,0x00,0x40,0x00,0x1E,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0xFF,0xF9,0xFF,0xFF,0xC0,0x00,0x60,0x00,0x32,0x48,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x7F,0xF3,0xFF,0xFF,0x80,0x00,0x3E,0x00,0x0E,0xA8,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x3F,0xE7,0xFF,0xFF,0x00,0x0F,0xC3,0x00,0x62,0x90,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x1F,0xCF,0xFF,0xFC,0x00,0x08,0x00,0x00,0x04,0x10,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x07,0x9F,0xFF,0xF8,0x00,0x09,0xF0,0x00,0x0F,0xFE,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x03,0x3F,0xFF,0xF0,0x00,0x00,0x80,0x00,0x0D,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0xFF,0xFF,0xE0,0x00,0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x03,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x7F,0xFF,0x80,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x3F,0xFF,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x00,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
[*]0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
[*]};
[*]
[*]void setup() {
[*]Serial.begin(9600);
[*]
[*]display.begin(SSD1306_SWITCHCAPVCC);
[*]
[*] //oled显示logo
[*] display.drawBitmap(0,0,pic,128,64,1);//
[*] display.display();
[*] display.clearDisplay();
[*]
[*] delay(3000);
[*]
[*]Serial.print("Initializing SD card...");
[*]
[*]//sd卡启动
[*]if (!SD.begin(chipSelect)) {
[*] Serial.println("Card failed, or not present");
[*] // don't do anything more:
[*] return;
[*]}
[*]Serial.println("card initialized.");
[*]
[*]}
[*]
[*]uint32_t fileNum = 0;
[*]int i = 0;
[*]
[*]void loop() {
[*]
[*] //循环读取sd卡上的图片,并显示到oled
[*] for(fileNum=0; fileNum<=5355;fileNum++)
[*] {
[*] //0000-5355.bmp 图片名字
[*] char filen = {0};
[*] sprintf(filen, "%04d", fileNum);
[*]
[*]// Serial.println("open file:");
[*]// Serial.println(String(filen)+String(".bmp"));
[*] //打开图片
[*] File dataFile = SD.open(String(filen)+String(".bmp"));
[*] if (dataFile)
[*] {
[*] //读取图片,并把图片的数据存放到buff中
[*] i=0;
[*] while (dataFile.available())
[*] {
[*] buff = dataFile.read();
[*] i++;
[*] }
[*] dataFile.close();
[*]
[*] display.clearDisplay();
[*]
[*] //62个字节是图片文件中的头信息,62之后的是真实图片数据
[*] //data: 40+14+4*2 -> end
[*] display.drawBitmap(0,0,buff+62,128,64,1);//
[*] display.display();
[*] }
[*] // 图片打开失败
[*] else {
[*] Serial.println("error opening file");
[*] }
[*]}
[*]}
[*]
[*]
代码注释写的很清楚,就不再详细解释了。最后我们下载到零知标准板上,可以看看播放的效果(视频录制较大就不上传了,主要还是为了大家自己能动手)。
牛逼
页:
[1]