Комбинированный код и ничего не работает. Головокружение однозначно

Я потратил чуть более 2 часов на отладку этого кода. Все, что я сделал, это объединил раздел кода для записи на SD-карту. Оба кода прекрасно работают сами по себе. Я не могу понять это. Я надеюсь, что свежий взгляд заметит ошибку. Я использую Arduino Nano с платой регистратора данных Robot-Deek. Контакт 10 используется для регистратора данных. Я использовал DTH11, но перешел на LM35, оба кода работали с LM35.

#include "RTClib.h"
#include <SD.h>
#include <SPI.h>
#define sample 500 
#define current_ms millis()
RTC_DS1307 rtc;
File myFile;
int inPin = 0;   //аналоговый вход
float val;       //где хранить инфу от чтения inPin
int pinRed = A3;  //вывод красного светодиода
float tempin = A5;  //ввод датчика температуры
float tempf;     // переменная для хранения температуры в градусах Фаренгейта
float vout;      // переменная для хранения напряжения с датчика
int array1[sample];  //создает массив с количеством элементов, равным "выборке"
unsigned long averaging;  // программа использует эту переменную для хранения суммы каждого создаваемого массива
int pinCS = 10;   // запись на SD-карту
float last_dht11_reading_ms = 1;
DateTime now = rtc.now();
#define DHT11_SAMPLE_DELAY 500

void setup() {

  Serial.begin(9600);
  delay(500);//Задержка загрузки системы
  SD.begin();
  pinMode(pinCS, OUTPUT);
  pinMode(tempin, INPUT);
  Serial.println("Volt and Temperature\n\n");
Serial.println("middle the setup loop");
 // Инициализация SD-карты
  if (SD.begin())
  {
    Serial.println("SD card is ready to use.");
    File myFile = SD.open("Datalog.csv",FILE_WRITE);
    if (myFile) {
      myFile.println("Time, Temp, Volt");
      myFile.close();
    }
  } else
  {
    Serial.println("SD card initialization failed");
    return;
  }
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));    
}//конец "настройки()"

void loop() {

  for (int i = 0; i < sample; i++) {         // этот код говорит программе заполнить каждый элемент массива, который мы создали с помощью
    array1[i] = analogRead(inPin);           //информация от антенного провода, выходящего из Arduino
    averaging += array1[i];                  //подробнее о циклах for http://arduino.cc/en/Reference/For
  }                                          // строка усреднения просто говорит: добавьте усреднение ко всему, что находится в позиции массива i
                                             //усреднение += array[i] равнозначно усреднению = усреднение + array[i]

  val = averaging / sample;                  //здесь программа берет сумму всех чисел в массиве1 и делит на количество элементов "образец"
  val = constrain(val, 0, 100);              // это ограничивает значение переменной между двумя числами от 0 до 100
  val = map(val, 0, 100, 0, 255);           //для получения дополнительной информации об ограничении http://arduino.cc/en/Reference/Constrain
  analogWrite(pinRed, val*20);                  //оператор карты указывает программе отображать от 0-100 до 0-255
  averaging = 0;                                 //эта строка кода возвращает усреднение к нулю, чтобы ее можно было использовать снова
Serial.println("past the emf loop");

  if ( (current_ms - last_dht11_reading_ms) > DHT11_SAMPLE_DELAY ) {
    vout = analogRead(tempin);                //читаем вывод LM35
    float mv = (vout/1024)*5000;              // преобразование в мВ
    float celc = mv/10;                       // преобразовать в C
    float tempf = ((celc*9)/5 + 32)/10;       // преобразовать в F
    myFile = SD.open("Datalog.csv", FILE_WRITE);      //открыть файл журнала данных на SD-карте

  if (myFile) {                              //записываем на SD карту time, tempf и val
    myFile.print(now.hour());
    myFile.print(":");
    myFile.print(now.minute());
    myFile.print(":");
    myFile.print(now.second());
    myFile.print(",");     
    myFile.print(tempf);
    myFile.print(",");  
    myFile.println(val);
    myFile.close(); // закрыть файл; // закрыть файл
    last_dht11_reading_ms = current_ms;
  }
Serial.println("past the logger loop");
  //delay(1000);//Подождите 1 секунду перед повторным доступом к датчику.

}
}
// конец цикла()

, 👍0

Обсуждение

Что именно не работает как? Пожалуйста, объясните, что вы ожидали и какое поведение вы видите на самом деле, @chrisl

Я ожидаю, что он будет писать на SD-карту и на серийный монитор. Однако это не так. Я даже вставил несколько «маркеров» для вывода на последовательный монитор, чтобы узнать, какая часть кода сработала, но они тоже не печатаются. Светодиод не работает. Как будто код не работает., @RobE

удалите первый SD.begin() и pinMode для pinCS. добавить pinCS в качестве параметра второго SD.begin(). если (SD.begin(pinCS)), @Juraj

Спасибо. Я внес изменения, которые вы предложили, и все еще ничего. Я запускаю код A, без проблем. Я запускаю код B, без проблем. Запустите этот код, комбинацию из двух, и я ничего не получу. Нет выходов., @RobE


1 ответ


1

ДатаВремя сейчас = rtc.now(); Не принадлежит выше void setup() 4 часа на устранение этой маленькой ошибки.

,