Всем привет. Собираю проект по мониторингу температуры и влажности в гараже с записью логов на sd card. Нужна помощь с кодом. вот кусок кода записывающий логи на карту dataFile.println("Humidity: "); dataFile.println(h); dataFile.println(" %\t"); dataFile.println("Temperature: "); dataFile.println (t); dataFile.println(" *C"); сам лог выглядит так Humidity: 49.10 % Temperature: 26.50 *C как поменять код что бы в две строчки логи были. вот так: Humidity: 49.10 % Temperature: 26.50 *C Спойлер: скетч #include "SD.h" // Подключаем библиотеку SD card #include "Wire.h" // Подключаем библиотеку I2C #include "DHT.h" // Подключаем библиотеку DHT сенсора #define DHTTYPE DHT22 // Тип датчика DHT22 #define DHTPIN 2 // Сигнал датчика DHT22 подключен к PIN 2 #include "LiquidCrystal_I2C.h" // Подключаем библиотеку LCD LiquidCrystal_I2C lcd(0x3F,16,2); // Задаем адрес и размерность дисплея DHT dht22(DHTPIN, DHTTYPE); // Создаем объект DHT void setup(){ Serial.begin(9600); // Открываем последовательный порт, задаем скорость передачи данных на 9600 бит/сек Serial.println("Garage Serial Monitor"); dht22.begin(); // Начинается чтение DHT22 Serial.print("Initializing SD card..."); pinMode(4, OUTPUT); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); lcd.init(); // Инициализация LCD lcd.backlight(); // Включаем подсветку File dataFile = SD.open("log.txt", FILE_WRITE); if (dataFile){ Serial.print("Writing to log.txt..."); dataFile.println("zapis temperatury i vlagnosti"); dataFile.close(); // Закрываем файл Serial.println("done."); }else { Serial.println("error opening log.txt"); // откроем файл снова, для чтения: } dataFile = SD.open("log.txt"); if (dataFile) { Serial.println("log.txt:"); while (dataFile.available()) { Serial.write(dataFile.read()); } dataFile.close(); Serial.println("done."); }else { Serial.println("error opening test.txt"); } } void loop(){ float h = dht22.readHumidity(); // Влажность считывается с DHT22 float t = dht22.readTemperature(); // Температура считывается с DHT22 if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } else { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); lcd.setCursor(0, 0); //Устанавливаем курсор в начало 1 строки lcd.print("Temp. :"); // Выводим текст lcd.setCursor(9, 0); // Устанавливаем курсор на 9 символ lcd.print(t); // Выводим текст lcd.setCursor(15, 0); // Устанавливаем курсор на 15 символ lcd.print("C"); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("Humid.:"); // Выводим текст lcd.setCursor(9, 1); // Устанавливаем курсор на 9 символ lcd.print(h); // Выводим текст lcd.setCursor(15, 1); // Устанавливаем курсор на 15 символ lcd.print("%"); //Выводим текст } File dataFile = SD.open("log.txt", FILE_WRITE); if (dataFile) { Serial.print("Writing to test.txt..."); dataFile.println("Humidity: "); dataFile.println(h); dataFile.println(" %\t"); dataFile.println("Temperature: "); dataFile.println (t); dataFile.println(" *C"); dataFile.close(); // закрываем файл Serial.println("done."); } else { Serial.println("error opening test.txt"); } }
Например так: Код (C++): dataFile.print("Humidity: "); dataFile.print(h); dataFile.println(" %\t"); dataFile.print("Temperature: "); dataFile.print (t); dataFile.println(" *C");
Большое спасибо. Проект собирался делать на arduino pro mini на ATmega168. Но возникла проблема с загрузкой скетча. Пишет: Спойлер: Сообщение Скетч использует 18 352 байт (128%) памяти устройства. Всего доступно 14 336 байт. Глобальные переменные используют 1 392 байт (135%) динамической памяти, оставляя -368 байт для локальных переменных. Максимум: 1 024 байт. processing.app.debug.RunnerException: Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size at cc.arduino.Compiler.size(Compiler.java:315) at cc.arduino.Compiler.build(Compiler.java:156) at processing.app.Sketch.build(Sketch.java:1111) at processing.app.Sketch.build(Sketch.java:1081) at processing.app.Editor$BuildHandler.run(Editor.java:1962) at java.lang.Thread.run(Thread.java:745) Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size Вроде скетч не большой же. На уно все отлично работает.
Все просто и даже по русски написано, чего не понятно то? В УНО стоит ATmega328, у которой 32Кб флэш, а ATmega168 имеет только 16Кб флэш-памяти. Вот ваш скетч и не лезет. Для исправления ситуации возьмите ProMini на ATmega328.