[英]SPI conflict between SD.h and U8x8.h (LCD)
我想通过 SD 卡在我的 Arduino Uno 上重现 .wav 文件,同时使用 LCD 显示器(诺基亚 5110)。 我在尝试使双 SPI 工作时遇到了麻烦,因为我对我使用的库不是很熟悉,所以我决定寻求帮助
问题是一旦程序执行SD.begin()显示停止工作并且 SPI 通信仅在 SD 上工作。
在我展示的这个设置中,我将在 setup() 和循环中使用一个按钮初始化 SD,我应该在显示器上写东西:
//Libraries
#include <U8x8lib.h>
#include <SPI.h>
#include "SD.h"
#include "TMRpcm.h"
//Display (pin 13, pin 11, pin A1, pin 12, pin A0 )
U8X8_PCD8544_84X48_4W_SW_SPI lcd(LCD_CLK, LCD_DIN, LCD_CE, LCD_DC, LCD_RST);
//Speaker
TMRpcm music;
void setup() {
//Serial port -> Open
Serial.begin(9600);
while (!Serial) {}
//LCD
display_setup();
display_somethingElse();
//SD and Speaker
sdAndSpeaker_setup();
}
void loop() {
topButton.poll();
if (topButton.buttonClicked) {
display_something();
}
}
忽略与按钮相关的功能,我删除了大部分代码以避免页面混乱。
这是出现问题的时候:
void sdAndSpeaker_setup() {
music.speakerPin = 10;
// (pin 4)
if (!SD.begin(SD_CS)) {
Serial.println("SD fail");
Serial.flush();
abort();
}
music.setVolume(4);
music.play("Daybreak.wav");
music.quality(2);
}
我知道通过将显示器的引脚更改为其他值(而不是 11、12 和 13),问题解决了,但我板上的大多数引脚都已经使用了,我没有这种奢侈......我认为这个与 U8x8.h 和 SD.h 库有关,但我没有调整这些的技能。
如果有人有建议,我将不胜感激! 谢谢!
构造函数
U8X8_PCD8544_84X48_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE)
创建一个使用软件 SPI 的“驱动程序”。 但是您提供硬件 SPI 的引脚作为参数。 SD库通过SPI库使用硬件SPI访问SD卡,因此硬件SPI与显示库的软件SPI冲突。
有一个
U8X8_PCD8544_84X48_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE)
通过 SPI 库使用硬件 SPI 的构造函数。 SPI 库“知道”SPI 引脚的引脚编号。 (SPI 库是板子包的一部分,不能单独安装。)
如果要使用软件 SPI,请使用空闲引脚。 硬件 SPI 使用 Uno 上的引脚 11、12、13。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.