Блоки инициализации SdFat HC-SR04
Я очень ценю помощь этого форума, и это мой первый раз, когда я спрашиваю вас, эксперты, прежде чем сходить с ума...
ArduinoUno и SDcard-BreakOutboard и DistanceSensor HC-SR04 не работают вместе. Проблема, насколько я понял, в этом утверждении:
if (!sd.begin(sdChipSelect) || !file.open("DATALOG.TXT", O_CREAT | O_WRITE | O_APPEND)) {
// Замените это на что-нибудь для вашего приложения.
Serial.println(F("SD problem"));
//while(1);
}
Когда он стерт, датчик расстояния работает отлично, если он на месте, он показывает 0 см (и так в течение нескольких дней! ;-) ). Я что-то читал, что SdFat что-то делает с Pin10, но также и его установка на OUTPUT - HIGH или LOW не дала результата. Есть идеи?
С наилучшими пожеланиями
Роб
«Минимальный» код:
/*
SD card datalogger
This example shows how to log data
to an SD card using the SdFat library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 7 (for MKRZero SD: SDCARD_SS_PIN)
*/
#include <SdFat.h>
const uint8_t sdChipSelect = 7;
// SD file system.
SdFat sd;
// Log file.
SdFile file;
// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
// Maximum Distance is 400 cm
unsigned long echo = 10;
int ultraSoundSignal = 9; // Ultrasound signal pin
unsigned long ultrasoundValue = 0;
void setup() {
// Serial Port
Serial.begin(9600);
// Pin 9 = TriggerPin
pinMode(ultraSoundSignal,OUTPUT);
// Initialize the SD and create or open the data file for append.
if (!sd.begin(sdChipSelect) || !file.open("DATALOG.TXT", O_CREAT | O_WRITE | O_APPEND)) {
// Replace this with somthing for your app.
Serial.println(F("SD problem"));
//while(1);
}
Serial.println("card initialized.");
delay(1000);
}
void loop() {
Serial.println("Beginn");
// Distanzmessung mit HC-SR04
int x = 0;
x = ping();
Serial.print(x); Serial.println(" cm");
delay(1000); //delay 1/4 seconds.
}
unsigned long ping()
{
pinMode(ultraSoundSignal, OUTPUT); // Switch signalpin to output
digitalWrite(ultraSoundSignal, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignal, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignal, LOW); // Holdoff
pinMode(ultraSoundSignal, INPUT); // Switch signalpin to input
digitalWrite(ultraSoundSignal, HIGH); // Turn on pullup resistor
// please note that pulseIn has a 1sec timeout, which may
// not be desirable. Depending on your sensor specs, you
// can likely bound the time like this -- marcmerlin
// echo = pulseIn(ultraSoundSignal, HIGH, 38000)
echo = pulseIn(ultraSoundSignal, HIGH,38000); //Listen for echo
ultrasoundValue = (echo / 58.138);// * .39; //convert to CM then to inches
return ultrasoundValue;
}
@Rob, 👍1
1 ответ
Лучший ответ:
Вывод 10 — это вывод SS для SPI. Поскольку вы используете SPI для SD-карты, вывод 10 должен быть выходом (для работы SPI в режиме мастера). В идеале вы будете использовать этот вывод как SS (или CS, как бы вы его ни называли) для SD-карты.
Вы не можете использовать его как эхо-вход ультразвукового дальномера и использовать SPI.
- Как увеличить скорость записи на SD-карту в Ардуино
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Мой датчик HC-SR04 сломался?