Протеус не запускает вместе <SD.h> и <Adafruit_SSD1306.h> библеотеки
- Войдите на сайт для отправки комментариев
Сб, 08/01/2022 - 22:35
НЕ могу разобраться конфликт интерфейсов?
Почему то как подключаю <SD.h> то экран не включается, При том конфликтов в программе нет, скетч компилируется


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SD.h>
File SDr;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire,OLED_RESET);
int NUM = 0; // Number of snowflakes in the animation example
void setup() {
display.begin(SSD1306_SWITCHCAPVCC);
// к библеотеке русских символов
display.cp437(true);
// назначение ввода Button
pinMode(A0, INPUT_PULLUP );
pinMode(A1, INPUT_PULLUP );
pinMode(A2, INPUT_PULLUP );
//назначение SD
pinMode(10, OUTPUT);
if (!SD.begin(10)) {
Serial.println("fallo en conexion!");
return;
}
Serial.println("initialization done.");
SDr = SD.open("test.txt", FILE_WRITE);
if (SDr) {
Serial.print("escribiendo test.txt...");
SDr.println("testing 1, 2, 3.");
// cerrar archivo:
SDr.close();
Serial.println("done.");
} else {
// errror
Serial.println("error abriendo test.txt");
}
SDr = SD.open("test.txt");
if (SDr) {
Serial.println("test.txt:");
// read from the file until there's nothing else in it:
while (SDr.available()) {
Serial.write(SDr.read());
}
// close the file:
SDr.close();
} else {
// if the file didn't open, print an error:
Serial.println("error abriendo test.txt");
}
}
скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К
скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К
А что там включаться должно (я про дисплей)? Я вижу в коде вывод только в сериал)
А что там включаться должно (я про дисплей)? Я вижу в коде вывод только в сериал)
Тут просто переключение текста с помощью кнопок, и "русификатор" utf8rus
void loop() { testscrolltext(); if(digitalRead(A0) == 0) { NUM++; } if(digitalRead(A1) == 0) { NUM--; } if(digitalRead(A2)== 0){ } } void testscrolltext() { display.clearDisplay(); display.setTextSize(1,1); // Draw 2X-scale text display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); if(NUM==0){ display.println(utf8rus("МЕНЮ")); display.startscrollright(0, 0); } else if(NUM==1){ display.println(utf8rus("Два абобуса")); }else if(NUM==2){ display.println(utf8rus("пять абобусов")); } display.display(); // Show initial text delay(100); } String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; }А ты скетч с полным выводом сообщений компилятора собираешь или нет?
А ты скетч с полным выводом сообщений компилятора собираешь или нет?
И как я по этой картинке ответ должен понять? Не проще написать просто «Да» или «Нет?
И как я по этой картинке ответ должен понять? Не проще написать просто «Да» или «Нет?
Сорян, просто же не ругается, так что наверно да...
И скетч вполне полный компелируется
Сделай так же и перекомпилируй:
Если в выводе что-то изменится скинь сюда ТЕКСТОМ.
Вам написали в #1, что скорее всего памяти не хватает.
Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.
Вам написали в #1, что скорее всего памяти не хватает.
Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.
Если код частями (через другие сообщения) появляется, то вполне может и пишет что-то, но об этом мы узнаем не скоро )))
Это он светодиодами пыталсо маргать в проте или нет? Янипомню. Напомните пжлст.
Вам написали в #1, что скорее всего памяти не хватает.
Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.
Если код частями (через другие сообщения) появляется, то вполне может и пишет что-то, но об этом мы узнаем не скоро )))
Нет, кроме Simulation is not running real time и тд, все норм
Не знаю почему конкретно из-за библиотеки SD.h не хочет дальше, наверно все таки этот виртуальный ардуино по памяти не хочет
Это он светодиодами пыталсо маргать в проте или нет? Янипомню. Напомните пжлст.
ДА
Помому мой был совет по поводу аналог\дигитал в свойствах компонентофф, и вроде я говорил, когда будешь работать с ШД на@@сси с симуляццией... вот те и результат.
скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К
Global variables use 407 bytes (19%) of dynamic memory, leaving 1641 bytes for local variables. Maximum is 2048 bytes.
замени прям в пр 328 мегу на 128 и попробуй, там пямяти больше. или 2560 вааще.
Адафруит замени на другую библиотеку.
Кстати - а в железе работает?
Нет, кроме Simulation is not running real time и тд, все норм
Проверил у себя на Proteus8.
Для 328 выводит кучу однотипных предупреждений для памяти (под катом только начало).
Для 2560 работает нормально и без предупреждений по памяти.