Kód: Vybrať všetko
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DS1307.h>
#include <SD.h>
#include <SPI.h>
#include <DallasTemperature.h>
#include <OneWire.h>
byte znak[8] = {0xa,0x4,0xe,0x10,0x10,0x11,0xe,0x0};// znak č pre slovo čas
LiquidCrystal_I2C lcd(0x20,20,4);// nastavenie lcd dipleja
#define ONE_WIRE_BUS 9// definicia pripojenia teplotného čidla
OneWire oneWire(ONE_WIRE_BUS);//
DallasTemperature sensors(&oneWire);//
char cas[9]; // pole znaků pro čas
char datum[11];// připraví pole znaků pro datum
int rtc[7]; // vytvoří pole čísel do kterých se bude ukládat čas
const int chipSelect = 4;// CS pro četčku karet na pinu 4(pro Arduino UNO a Ethernet Shield)
void setup()
{
lcd.init();// inicializuje displej
lcd.backlight(); // zapne podsvětleni
lcd.createChar(0,znak);// vytvorí znak č do premenej 0
lcd.setCursor(0,0);//nastaví kurzor na pozici 1 stlpec a 1 riadok
lcd.write(byte(0));//vypíše znak č
lcd.setCursor(1,0);//nastaví kurzor na pozici 2 stlpec a 1 riadok
lcd.print("as:");//vypíše text
lcd.setCursor(0,1); // nastaví kurzor na pozici 1 stlpec a 3 riadok
lcd.print("Teplota:"); // vypíše text
Serial.begin(9600);// nastaví seriovou komunakaci na 9600
Serial.print("Inicializace SD karty...");//vypís na seriový port
pinMode(4,OUTPUT);//
if (!SD.begin(chipSelect)) {
Serial.println("/nKarta nenalezena...");
return;
}
Serial.println("/n Karta inicializovana...");
sensors.begin();
}
void loop()
{
sensors.requestTemperatures();
RTC.get(rtc,true);
sprintf(datum,"%02d:%02d:%02d", rtc[4],rtc[5],rtc[6]);// zapíše do pole znaků datum hodnoty z rtc
sprintf(cas,"%02d:%02d:%02d", rtc[2],rtc[1],rtc[0]); // zapíše do pole znaků cas hodnoty z rtc
zapisovanieTeplotySDKarta();//zapisovanie dát na SD kartu
zobrazenieCasu(); // zobrazenie času na LCD
zobrazenieTeploty(); // zobrazenie teploty na LCD
}
void zobrazenieCasu() // zobrazení na LCD
{
lcd.setCursor(4,0); //první řádek
lcd.print(cas); //vypíše čas
}
void zobrazenieTeploty()//
{
lcd.setCursor(8,1); //první řádek
lcd.print(sensors.getTempCByIndex(0)); //vypíše teplotu
}
void zapisovanieTeplotySDKarta()///
{
String dataString = ""; // inicializuje proměnou pro data
dataString = datum; //
dataString = dataString + ";"; // vhodný oddělovač
dataString+= cas; // čas do proměné data
dataString = dataString + ";"; // vhodný oddělovač
dataString = dataString + String(sensors.getTempCByIndex(0));
// otevře soubor data.csv
File dataFile = SD.open("Adko.txt", FILE_WRITE);
// když soubor existuje zapíše do něj
if (dataFile) {
// samotný zápis - zapíše a skočí na nový řádek
dataFile.println(dataString);
dataFile.close();
Serial.print("Zapisuji do souboru data - ");
Serial.println(dataString);
}
// při chybě vypíše hlášku
else {
Serial.println("Chyba - nemohu otevřít soubor !!!");
}
}
Ak tam dole pridám ešte aj delay tak mi to zapisuje tak ako si nadstavím čas.Ale zároveň sa zmení aj to zobrazovanie času a teploty na LCD.A to ja potrebujem niako oddeliť.Ale ako?