Hello, I have the following connection:
SD
GND>GND
VCC > 5V
MISO> D12
MOSI > D11
SCK >D13
CS >D4
Display
GND>GND
VIN > 5V
SCL> A5
SDA> A4
Here is my code:
#include <Encoder.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
//#include <SD.h>
#include <SdFat.h>
SdFat SD;
File myFile;
const int chipSelect = 4;
#define OLED_ADDR 0x3C
#define BUTTON_PIN 7
Adafruit_SSD1306 display(-1);
#if (SSD1306_LCDHEIGHT != 64)
//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
// Change these pin numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder knobRight(3, 2);
// avoid using pins with LEDs attached
boolean ButtonWasUp = true;
boolean displayOn = false;
boolean setting = false;
boolean showSettings = false;
boolean settingNow = false;
long encoder;
long oldEncoder = 0;
String textMenu;
String textUpperMenu;
int minTakenFocus;
int maxTakenFocus;
int minAnamorphicFocus;
int maxAnamorphicFocus;
Sd2Card card;
int menu = 0;
void setup() {
//Serial.begin(115200);
//pinMode(10, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Open serial communications and wait for port to open:
Serial.begin(115200);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
SPI.transfer(0);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.display();
}
void loop() {
if (displayOn == false) {
boolean ButtonIsUp = digitalRead(BUTTON_PIN);
if (ButtonWasUp && !ButtonIsUp) {
delay(2000);
ButtonIsUp = digitalRead(BUTTON_PIN);
if (!ButtonIsUp) {
if (displayOn == false) {
displayOn = true;
}
}
}
ButtonWasUp = ButtonIsUp;
myFile = SD.open("focuses.txt");
if (myFile) {
Serial.println("Reading");
minTakenFocus = myFile.parseInt();
maxTakenFocus = myFile.parseInt();
minAnamorphicFocus = myFile.parseInt();
maxAnamorphicFocus = myFile.parseInt();
// close the file:
myFile.close();
Serial.println("not resetting");
Serial.println(minTakenFocus);
Serial.println(maxTakenFocus);
Serial.println(minAnamorphicFocus);
Serial.println(maxAnamorphicFocus);
}
else {
// if the file didn't open, print an error:
Serial.println("error opening focuses.txt");
}
}
if (displayOn) {
encoder = knobRight.read();
int difference = oldEncoder - encoder;
if (difference > 2) {
menu = menu + 1;
}
else if (difference < -2) {
menu = menu - 1;
}
else {
}
oldEncoder = encoder;
if (menu == 0) {
buttonPress();
if (setting) {
textUpperMenu = "SET TAKEN LENS MIN";
textMenu = analogRead(1);
minTakenFocus = analogRead(1);
}
else {
textMenu = "MIN focus";
textUpperMenu = "SET TAKEN LENS";
}
}
else if (menu == 1) {
buttonPress();
if (setting) {
textUpperMenu = "SET TAKEN LENS MAX";
textMenu = analogRead(1);
maxTakenFocus = analogRead(1);
}
else {
textMenu = "MAX focus";
textUpperMenu = "SET TAKEN LENS";
}
}
else if (menu == 2) {
buttonPress();
if (setting) {
textUpperMenu = "SET ANAMORPHIC MIN";
textMenu = analogRead(1);
minAnamorphicFocus = analogRead(1);
}
else {
textMenu = "MIN focus";
textUpperMenu = "SET ANAMORPHIC";
}
}
else if (menu == 3) {
buttonPress();
if (setting) {
textUpperMenu = "SET ANAMORPHIC MAX";
textMenu = analogRead(1);
maxAnamorphicFocus = analogRead(1);
}
else {
textMenu = "MAX focus";
textUpperMenu = "SET ANAMORPHIC";
}
}
else if (menu == 4) {
textMenu = "EXIT";
//set = false;
setting = false;
boolean ButtonIsUp = digitalRead(BUTTON_PIN);
if (ButtonWasUp && !ButtonIsUp) {
delay(10);
ButtonIsUp = digitalRead(BUTTON_PIN);
if (!ButtonIsUp) {
displayOn = false;
showSettings = true;
}
}
ButtonWasUp = ButtonIsUp;
}
else if (menu > 4) {
menu = 0;
}
else if (menu < 0) {
menu = 4;
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 12);
display.print(textMenu);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 0);
display.print(textUpperMenu);
display.display();
}
else {
if (showSettings) {
showSettingsFunc();
delay(2000);
display.clearDisplay();
display.display();
delay(100);
showSettingsFunc();
delay(400);
display.clearDisplay();
display.display();
delay(100);
showSettingsFunc();
delay(400);
display.clearDisplay();
display.display();
delay(100);
showSettingsFunc();
delay(400);
display.clearDisplay();
display.display();
showSettings = false;
}
else {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(25, 0);
display.print("FOCUS");
int focus = analogRead(1) / 5;
String focusString = String(focus);
if (focus >= 190) {
for (int t = 0; t <= 1000; t++) {
float scale = 2 / (3 - cos(2 * t));
int x = 25 * scale * cos(t);
int y = 18 * scale * sin(2 * t) / 2;
display.drawPixel(x + 50, y + 18, WHITE);
display.drawPixel(x + 51, y + 19, WHITE);
}
}
else {
display.setTextSize(2);
display.setCursor(25, 12);
display.print(focusString);
display.print(" m");
}
display.display();
}
}
// if a character is sent from the serial monitor,
// reset both back to zero.
Serial.print("show settings ");
Serial.println(showSettings);
// Serial.print("set ");
// Serial.println(set);
}
void buttonPress() {
boolean ButtonIsUp = digitalRead(BUTTON_PIN);
if (ButtonWasUp && !ButtonIsUp) {
delay(10);
ButtonIsUp = digitalRead(BUTTON_PIN);
if (!ButtonIsUp) {
if (setting) {
setting = false;
}
else {
setting = true;
}
if (displayOn == false) {
displayOn = true;
}
}
}
ButtonWasUp = ButtonIsUp;
}
void showSettingsFunc() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 0);
display.print("Lens min: ");
display.print(minTakenFocus);
display.setCursor(10, 8);
display.print("Lens max: ");
display.print(maxTakenFocus);
display.setCursor(10, 16);
display.print("Anamorph min: ");
display.print(minAnamorphicFocus);
display.setCursor(10, 24);
display.print("Anamorph max: ");
display.print(maxAnamorphicFocus);
display.display();
Serial.println(minTakenFocus);
Serial.println(maxTakenFocus);
Serial.println(minAnamorphicFocus);
Serial.println(maxAnamorphicFocus);
}
SD and monitor work fine separately, but when I put code and these two module together monitor stops working. I used an SD library before and it was continuously restarting. With SdFat it's not restarting, but the monitor still doesn't work.