Zapisovanie teploty na ds kartu – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zapisovanie teploty na  ds kartu – Mikrokontroléry – Fórum – Programujte.comZapisovanie teploty na ds kartu – Mikrokontroléry – Fórum – Programujte.com

 

noro-nr0
Duch
13. 2. 2018   #1
-
0
-

Dobrý deň, prosím vás potrebujem pomoc s programom. Zvášť mi to funguje ale keď to spojím tak my to len zapisuje na sd kartu a nenačítávajú sa cez internet záznamy.Za pomoc, ďakujem.NOro

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
 File sdcard_file;
#include "DHT.h"
#define DHTPIN A8
#define DHTTYPE DHT11
const int chipSelect = 4;
DHT sensor(DHTPIN, DHTTYPE);
long minutes=55;
long hours=21;
long den=13;
long mesiac=3;
long rok=2018;
// maximum length of file name including path
#define FILE_NAME_LEN  20
// HTTP request type
#define HTTP_invalid   0
#define HTTP_GET       1
#define HTTP_POST      2

// file types
#define FT_HTML       0
#define FT_ICON       1
#define FT_CSS        2
#define FT_JAVASCRIPT 3
#define FT_JPG        4
#define FT_PNG        5
#define FT_GIF        6
#define FT_TEXT       7
#define FT_INVALID    8

// pin used for Ethernet chip SPI chip select
#define PIN_ETH_SPI   10

// the media access control (ethernet hardware) address for the shield:
const byte mac[] PROGMEM = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//the IP address for the shield:
const byte ip[] = { 192, 168, 1, 177 };  // does not work if this is put into Flash
// the router's gateway address:
const byte gateway[] PROGMEM = { 192, 168, 1, 1 };
// the subnet:
const byte subnet[] PROGMEM = { 255, 255, 255, 0 };

EthernetServer server(80);

void setup() {
  // deselect Ethernet chip on SPI bus
  pinMode(PIN_ETH_SPI, OUTPUT);
  digitalWrite(PIN_ETH_SPI, HIGH);
 
  Serial.begin(115200);       // for debugging
 
  if (!SD.begin(4)) {
    return;  // SD card initialization failed
  }
  Ethernet.begin((uint8_t*)mac, ip, gateway, subnet);
  server.begin();  // start listening for clients
}

void loop() {
  // if an incoming client connects, there will be bytes available to read:
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (ServiceClient(&client)) {
        // received request from client and finished responding
        break;
      }
    }  // while (client.connected())
    delay(1);
    client.stop();
  }  // if (client)
 
   sdcard_file = SD.open("txt.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (sdcard_file) {
   senddata();
    // close the file:
    sdcard_file.close();
   
  } else {
    // if the file didn't open, print an error:
    //Serial.println("error opening test.txt");
  }
 
}// void loop()

void senddata()  {
  float humidity = sensor.readHumidity();
  float temperature_C = sensor.readTemperature();
  float temperature_F = sensor.readTemperature(true);
  if (isnan(humidity) || isnan(temperature_C) || isnan(temperature_F)) {

  return;
  }
  float heat_indexF = sensor.computeHeatIndex(temperature_F, humidity);
  float heat_indexC = sensor.convertFtoC(heat_indexF);

  if (webFile) {
  for(long minutes = 00; minutes < 60; minutes=minutes+5)  {
    
    sdcard_file.print(den);
    sdcard_file.print(".");
    sdcard_file.print(mesiac);
    sdcard_file.print(".");
    sdcard_file.print(rok);
    sdcard_file.print("   ");
    
    sdcard_file.print(hours);
    sdcard_file.print(":");
    sdcard_file.print(minutes);
     
    sdcard_file.print(",  ");
    sdcard_file.print(temperature_C);
    sdcard_file.print(",  ");
    sdcard_file.print(humidity);
    sdcard_file.print(", ");
    sdcard_file.println(heat_indexC);
 
    if (minutes==55)  {
      hours = hours + 1;
      minutes = 0;
    }
    if (hours>24)  {
      hours = 0;
      den=den+1;
    }
    if (den>31)  {
      den = 0;
      mesiac=mesiac+1;
    }
    sdcard_file.flush(); //saving the file
    sdcard_file.close();
   delay(300000);
     }
}   
}
bool ServiceClient(EthernetClient *client)
{
  static boolean currentLineIsBlank = true;
  char cl_char;
  //File webFile;
  // file name from request including path + 1 of null terminator
  char file_name[FILE_NAME_LEN + 1] = {0};  // requested file name
  char http_req_type = 0;
  char req_file_type = FT_INVALID;
  const char *file_types[] = {"text/html", "image/x-icon", "text/css", "application/javascript", "image/jpeg", "image/png", "image/gif", "text/plain"};
 
  static char req_line_1[40] = {0};  // stores the first line of the HTTP request
  static unsigned char req_line_index = 0;
  static bool got_line_1 = false;

  if (client->available()) {   // client data available to read
    cl_char = client->read();
    
    if ((req_line_index < 39) && (got_line_1 == false)) {
      if ((cl_char != '\r') && (cl_char != '\n')) {
        req_line_1[req_line_index] = cl_char;
        req_line_index++;
      }
      else {
        got_line_1 = true;
        req_line_1[39] = 0;
      }
    }
    
    if ((cl_char == '\n') && currentLineIsBlank) {
      // get HTTP request type, file name and file extension type index
      http_req_type = GetRequestedHttpResource(req_line_1, file_name, &req_file_type);
      if (http_req_type == HTTP_GET) {         // HTTP GET request
        if (req_file_type < FT_INVALID) {      // valid file type
          webFile = SD.open(file_name);        // open requested file
          if (webFile) {
            // send a standard http response header
            client->println(F("HTTP/1.1 200 OK"));
            client->print(F("Content-Type: "));
            client->println(file_types[req_file_type]);
            client->println(F("Connection: close"));
            client->println();
            // send web page
            while(webFile.available()) {
              int num_bytes_read;
              char byte_buffer[64];
              // get bytes from requested file
              num_bytes_read = webFile.read(byte_buffer, 64);
              // send the file bytes to the client
              client->write(byte_buffer, num_bytes_read);
            }
            webFile.close();
          }
          else {
            // failed to open file
          }
        }
        else {
          // invalid file type
        }
      }
      else if (http_req_type == HTTP_POST) {
        // a POST HTTP request was received
      }
      else {
        // unsupported HTTP request received
      }
      req_line_1[0] = 0;
      req_line_index = 0;
      got_line_1 = false;
      // finished sending response and web page
      return 1;
    }
    if (cl_char == '\n') {
      currentLineIsBlank = true;
    }
    else if (cl_char != '\r') {
      currentLineIsBlank = false;
    }
  }  // if (client.available())
  return 0;
}

// extract file name from first line of HTTP request
char GetRequestedHttpResource(char *req_line, char *file_name, char *file_type)
{
  char request_type = HTTP_invalid;  // 1 = GET, 2 = POST. 0 = invalid
  char *str_token;
 
  *file_type = FT_INVALID;
 
  str_token =  strtok(req_line, " ");    // get the request type
  if (strcmp(str_token, "GET") == 0) {
    request_type = HTTP_GET;
    str_token =  strtok(NULL, " ");      // get the file name
    if (strcmp(str_token, "/") == 0) {
      strcpy(file_name, "index.htm");
      *file_type = FT_HTML;
    }
    else if (strlen(str_token) <= FILE_NAME_LEN) {
      // file name is within allowed length
      strcpy(file_name, str_token);
      // get the file extension
      str_token = strtok(str_token, ".");
      str_token = strtok(NULL, ".");
      
      if      (strcmp(str_token, "htm") == 0) {*file_type = 0;}
      else if (strcmp(str_token, "ico") == 0) {*file_type = 1;}
      else if (strcmp(str_token, "css") == 0) {*file_type = 2;}
      else if (strcmp(str_token, "js")  == 0) {*file_type = 3;}
      else if (strcmp(str_token, "jpg") == 0) {*file_type = 4;}
      else if (strcmp(str_token, "png") == 0) {*file_type = 5;}
      else if (strcmp(str_token, "gif") == 0) {*file_type = 6;}
      else if (strcmp(str_token, "txt") == 0) {*file_type = 7;}
      else {*file_type = 8;}
    }
    else {
      // file name too long
    }
  }
  else if (strcmp(str_token, "POST") == 0) {
    request_type = HTTP_POST;
  }

  return request_type;
}

Nahlásit jako SPAM
IP: 5.22.154.–
gna
~ Anonymní uživatel
1891 příspěvků
13. 2. 2018   #2
-
0
-

Dejme tomu, že to jednotlivě nějak funguje. Když to pak spojíš tak asi dost vadí ten delay(300000);

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
14. 2. 2018   #3
-
0
-

#2 gna

#1 noro-nr
no já bych to viděl spíš na tu nekonečnou smyčku v senddata

 if (webFile) {
  for(long minutes = 00; minutes < 60; minutes=minutes+5)  {

...

  if (minutes==55)  {
      hours = hours + 1;
      minutes = 0;
    }

navíc tam po prvním průchodu zavře soubor.

měl by si uvědomit co, která část samostatně dělala a jestli je jde použít spolu, tak jak zamýšlí

Nahlásit jako SPAM
IP: 91.139.9.–
noro-nr0
Duch
14. 2. 2018   #4
-
0
-

#3 MilanL
Dakujem vám inač som nevedel ako tam dať čas. vyskúšám to bez toho.

Nahlásit jako SPAM
IP: 5.22.154.–
MilanL+1
Grafoman
14. 2. 2018   #5
-
0
-

v podstatě ta smyčka je nekonečná vzhledem k nulování minut v podmínce nikdy nedosáhne podmínky pro ukončení, aby se přerušila musel bys např u FOR do ukončovací podmínky dát např Mesic<13, to by ti na SD vygenerovalo soubor za celý rok a pak to skončí.

Mě připadá, že ta smyčka tam byla na otestování ukládání záznamů do souboru na SD,

No čas je třeba nějak vyřešit, bud přes externí/interní RTC pokud MCU/kit má, nebo třeba pomocí časovače/případně WDT.

Nenapsal jsi typ MCU případně sestavu na které to děláš, připadá mi to jako nějaký arduino + ethernet shield.

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý