и пропал…
я по работе уезжал.
“…поставьте единичку вместо нуля…” я это ещё вчера делал. И сегодня тоже пробовал.
Результат:
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp: In member function 'void Sd2Card::chipSelectHigh()':
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:182:5: error: 'SDCARD_SPI' was not declared in this scope
SDCARD_SPI.endTransaction();
^~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:182:5: note: suggested alternative: 'SDA_PIN'
SDCARD_SPI.endTransaction();
^~~~~~~~~~
SDA_PIN
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp: In member function 'void Sd2Card::chipSelectLow()':
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:191:5: error: 'SDCARD_SPI' was not declared in this scope
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:191:5: note: suggested alternative: 'SDA_PIN'
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~~~
SDA_PIN
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:191:33: error: 'settings' was not declared in this scope
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:191:33: note: suggested alternative: 'String'
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~
String
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp: In member function 'uint8_t Sd2Card::init(uint8_t, uint8_t)':
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:290:3: error: 'SDCARD_SPI' was not declared in this scope
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:290:3: note: suggested alternative: 'SDA_PIN'
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~~~
SDA_PIN
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:290:31: error: 'settings' was not declared in this scope
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:290:31: note: suggested alternative: 'String'
SDCARD_SPI.beginTransaction(settings);
^~~~~~~~
String
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp: In member function 'uint8_t Sd2Card::setSckRate(uint8_t)':
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:552:14: error: 'settings' was not declared in this scope
case 0: settings = SPISettings(25000000, MSBFIRST, SPI_MODE0); break;
^~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:552:14: note: suggested alternative: 'String'
case 0: settings = SPISettings(25000000, MSBFIRST, SPI_MODE0); break;
^~~~~~~~
String
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:552:57: error: 'SPI_MODE0' was not declared in this scope
case 0: settings = SPISettings(25000000, MSBFIRST, SPI_MODE0); break;
^~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:552:25: error: 'SPISettings' was not declared in this scope
case 0: settings = SPISettings(25000000, MSBFIRST, SPI_MODE0); break;
^~~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp: In member function 'uint8_t Sd2Card::setSpiClock(uint32_t)':
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:567:3: error: 'settings' was not declared in this scope
settings = SPISettings(clock, MSBFIRST, SPI_MODE0);
^~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:567:3: note: suggested alternative: 'String'
settings = SPISettings(clock, MSBFIRST, SPI_MODE0);
^~~~~~~~
String
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:567:43: error: 'SPI_MODE0' was not declared in this scope
settings = SPISettings(clock, MSBFIRST, SPI_MODE0);
^~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\SD\src\utility\Sd2Card.cpp:567:14: error: 'SPISettings' was not declared in this scope
settings = SPISettings(clock, MSBFIRST, SPI_MODE0);
^~~~~~~~~~~
exit status 1
Compilation error: exit status 1
Я только поменял 0 на 1.
ок, значит экземпляр софтСПИ шины в библиотеке не создается, вы должны создать его сами.
Добавьте в начало кода
#include <SoftSPI.h>
SoftSPI mySPI(11, 12, 13); // MOSI,MISO,SCK
и в файле Sd2Card.cpp
после 54 строки
#else // SOFTWARE_SPI
добавьте
#ifndef SDCARD_SPI
#define SDCARD_SPI mySPI
#endif
**** добавка
хотя наверно так тоже не заработает потому что идентификатор mySPI определен в скетче и библиотека про него не знает.
Надо еще добавить что-то типа
#include <SoftSPI.h>
extern SoftSPI mySPI(11, 12, 13); // MOSI,MISO,SCK
куда-нибудь в начало Sd2Card.h
Вообще на Ардуино.сс не советуют связываться с софтСПИ в библиотеке карты
третья добавка даёт редефинишн
c:\Users\User\Documents\Arduino\libraries\SD\src/utility/Sd2Card.h:30:10: note: 'SoftSPI mySPI' previously declared here
SoftSPI mySPI(11, 12, 13);
^~~~~
exit status 1
Compilation error: redefinition of 'SoftSPI mySPI'
“…Вообще на Ардуино.сс не советуют связываться с софтСПИ в библиотеке карты …”
короче: тянуть мне шлейф.
обратите внимание на ключевое слово extern, а у вас его нет
extern SoftSPI mySPI(11, 12, 13);
Нет, в коде его нет (вы же сами его не написали)
#include <SPI.h>
#include <SD.h>
#include <SoftSPI.h>
SoftSPI mySPI(11, 12, 13);
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 10;
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
Serial.print("\nInitializing SD card...");
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("initialization failed. Things to check:");
while (1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
А вот в Sd2Card.h - есть
#ifndef Sd2Card_h
#define Sd2Card_h
/**
\file
Sd2Card class
*/
#include "Sd2PinMap.h"
#include "SdInfo.h"
#include <SoftSPI.h>
extern SoftSPI mySPI(11, 12, 13);
/** Set SCK to max rate of F_CPU/2. See Sd2Card::setSckRate(). */
uint8_t const SPI_FULL_SPEED = 0;
/** Set SCK rate to F_CPU/4. See Sd2Card::setSckRate(). */
uint8_t const SPI_HALF_SPEED = 1;
/** Set SCK rate to F_CPU/8. Sd2Card::setSckRate(). */
uint8_t const SPI_QUARTER_SPEED = 2;
Ошибка
C:\Users\User\AppData\Local\Temp\.arduinoIDE-unsaved2023424-7800-zgbjzb.dp9mm\CardInfo\CardInfo.ino:4:21: error: redefinition of 'SoftSPI mySPI'
extern SoftSPI mySPI(11, 12, 13);
^
In file included from c:\Users\User\Documents\Arduino\libraries\SD\src/utility/SdFat.h:29:0,
from c:\Users\User\Documents\Arduino\libraries\SD\src/SD.h:20,
from C:\Users\User\AppData\Local\Temp\.arduinoIDE-unsaved2023424-7800-zgbjzb.dp9mm\CardInfo\CardInfo.ino:2:
c:\Users\User\Documents\Arduino\libraries\SD\src/utility/Sd2Card.h:30:16: note: 'SoftSPI mySPI' previously declared here
extern SoftSPI mySPI(11, 12, 13);
^~~~~
exit status 1
Compilation error: redefinition of 'SoftSPI mySPI'
в Sd2Card.h должно быть extern, а в скетче нет.
Судя по сообщениям об ошибках, в обоих случаях у вас не так.
Еще можно создание обьекта
SoftSPI mySPI(11, 12, 13);
вообще перенести в файл Sd2Card.cpp
, раз уж мы все равно исходники либы кромсаем.
И тогда из скетча вообще все упоминания о софт-SPI убрать, пусть работает как будто это обычный SPI