Я пытаюсь записать некоторые данные на SD-карту и прочитать их обратно на последовательный монитор, а также отобразить их на OLED.
И SD-карта, и oled работают раздельно, но, похоже, они мешают друг с другом, когда объединены. Я использовал библиотеки Arduino SD и Adafruit OLED.
Подключения от Arduino Uno к модулю карты Micro SD-
5V to SD VCC
GND TO SD GND
PIN 10 TO SD Chip Select
PIN 11 TO SD MOSI
PIN 12 TO SD MISO
PIN 13 TO SD SCK
Подключения к OLED-
3.3V to OLED VCC
GND TO OLED GND
A4 TO OLED SDA
A5 TO OLED SCK
Вот код -
#include <SPI.h>
#include <SD.h>
File myFile;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial) {
;
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // CODE GETS STUCK HERE. DISPLAY NEVER INITIALISES
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(29,29);
display.print("INITIALISING");
display.display();
delay(5000);
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
display.clearDisplay();
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
while (myFile.available()) {
Serial.write(myFile.read());
display.setCursor(0,0);
display.print(myFile.read());
display.display();
delay(5000);
}
// close the file:
myFile.close();
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Код застревает при инициализации OLED, как упомянуто выше. Если я заменю эти строки
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // CODE GETS STUCK HERE. DISPLAY NEVER INITIALISES
}
На это-
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Я запустил код сканера I2 C на OLED, поэтому адрес "0X3 C" правильный.
OLED по-прежнему не работает, и SD-карта инициализируется, но arduino записывает неправильные данные в файл TXT на SD-карте следующим образом -
teóting 1,à2, ó®
Вместо -
testing 1, 2, 3.
Я также пытался использовать эскизы библиотеки U8G2 с SD-картой на случай, если у Arduino заканчивается ОЗУ, но она все еще не работает. Я также изменил выбор микросхемы SD на Arduino digital pin 4, но результаты остались прежними.
При просмотре и экспериментировании я обнаружил, что PIN-код MISO OR MOSI SD может мешать выводам SDA / SCL OLED. Может быть, нужно изменить проводку.
ЛЮБЫЕ ПРЕДЛОЖЕНИЯ ???