RTC vs Ether shield, молчит - no response)

trade
Offline
Зарегистрирован: 03.07.2019

Добрый вечер!

Имеется : arduino uno, DS3231 , Ethernet shield w5200. Пытаюсь их всех подружить. не знаю почему, но когда подключаю библиотеку RTC функционал умирает, без него все работает.

У меня сервер и пару страниц с данными, на основной странице время смог прикрутить только после того как убрал не сколько условий типа, ну все это ж мелочь?!!:

else if (StrContains(HTTP_req, "GET /timer.png"))
//          {
//            webFile = SD.open("timer.png");
//            if (webFile)
//            {
//              client.println("HTTP/1.1 200 OK");
//              client.println();
//            }
//          }
на второй странице, по сути где я вообще не обращаюсь ко времени, пол функционала не хочет работать, загрузка страницы есть, имя файла в ардуино отправляет, а загружать данные из флешки и выводить на страницу не хочет. гугл показывает  net::ERR_EMPTY_RESPONSE (request.send(null);)
 
вот код  + html +js.  Суть, на флешке храниться данные в txt, на странице выбираю дату данных, которые хочу получить, отправляется в ардуино имя файла(н-р 20-05-02) путь постоянен(String fileName="data/"+dateName+".txt"),и считываю с кнопкой загрузка данные вида (10:30 22.04.2020- smth wrong), провожу некоторые манипуляции и вывожу в итоге в виде таблицы данные. Все.
P.S
P.S.S Если кто то протестит, в js нет условия на отсутствие файла с введеной датой.т.е будет пустая страница). 
 
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <DS3232RTC.h>
#define REQ_BUF_SZ 30

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //мак адрес
IPAddress ip(192, 168, 1, 5); // айпи адрес сервера
EthernetServer server(80); //порт сервера
File webFile;
EthernetClient client;

char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
String dateName;

void setup()
{
SD.begin(4);
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
setSyncProvider(RTC.get);
}

void loop()
{
String fileName="data/"+dateName+".txt";
//------------------------------ Код для шилда---------------------//// listen for incoming clients
client = server.available();
if (client) {
boolean currentLineIsBlank = true; // an http request ends with a blank line
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
if (c == '\n' && currentLineIsBlank) {
if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /chart.htm"))
{
clientPrintClose();
webFile = SD.open("index.htm");
}

else if (StrContains(HTTP_req, "GET /favicon.ico"))
{
webFile = SD.open("favicon.ico");
if (webFile)
{
client.println("HTTP/1.1 200 OK");
client.println();
}
}

//
// else if (StrContains(HTTP_req, "GET /fire.png"))
// {
// webFile = SD.open("EC.png");
// if (webFile)
// {
// client.println("HTTP/1.1 200 OK");
// client.println();
// }
// }
//

// else if (StrContains(HTTP_req, "GET /temp.png"))
// {
// webFile = SD.open("temp.png");
// if (webFile)
// {
// client.println("HTTP/1.1 200 OK");
// client.println();
// }
// }
//
// else if (StrContains(HTTP_req, "GET /timer.png"))
// {
// webFile = SD.open("timer.png");
// if (webFile)
// {
// client.println("HTTP/1.1 200 OK");
// client.println();
// }
// }
//

else if (StrContains(HTTP_req, "GET /style.css"))
{
webFile = SD.open("style.css");
if (webFile)
{
client.println("HTTP/1.1 200 OK");
client.println();
}
}

else if (StrContains(HTTP_req,"dat="))
{
String Temp = HTTP_req;
dateName=Temp.substring(11,19);
clientPrintClose();
}

else if (StrContains(HTTP_req, "ajax_alarm"))
{
webFile = SD.open(fileName);
if (webFile)
{
client.println(webFile.read());
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
}
}
if (webFile)
{
while (webFile.available())
{
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
Serial.println(HTTP_req);
Serial.println(dateName);
Serial.println(fileName);
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n')
{
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}

char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}

void clientPrintClose()
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
}

html+js

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Alarms</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="StyleSheet" href="style.css">
</head>

<body>
<header>
<hr noshade size="2px" color="white">
</header>

<main>
<div id="alarm" class ="grid">
<div style="margin:10px 0 0 0;" id="date_alarm_div"><input type="date" id="dat" onmouseout="dateSender()"><input class="buttonz" id="date_ALoader" type ="button" value="Load" onClick="GetAlarmState()"></div>
<div id="info_header"><div>Time</div> <div>State</div></div>
<div id="info"></div>
</div>
</main>

<footer>
<hr size="1px" color="white"> <!--Прямая линия под таблицей-->
</footer>

<script>
function GetAlarmState()
{
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if (this.readyState == 4&&this.status == 200)
{
if (this.responseText != null)
{
var info = this.responseText.split("\n");
var status=[];
var data=[];
var div=document.getElementById("info");
clear(div);
for (var i=0;i<info.length;i++)
{
data.push(info[i].split("-").slice(0,1).join());
status.push(info[i].split("-").slice(1,2).join());
var div_data=document.createElement("div");
var div_status=document.createElement("div");
var node_data=document.createTextNode(data[i]);
var node_status=document.createTextNode(status[i]);
div.appendChild(div_data);
div.appendChild(div_status);
div_data.appendChild(node_data);
div_status.appendChild(node_status);
}}}}
request.open("GET", "ajax_alarm" + nocache, true);
request.send(null);
}

function clear(elem) {elem.innerHTML = '';}

function dateSender()
{
var dat= document.getElementById("dat").value;
var request = new XMLHttpRequest();
request.open("GET", "dat="+dat, true);
request.send(null);
}
</script>

</Body>
</html>

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ставлю на недостаток RAM.

trade
Offline
Зарегистрирован: 03.07.2019

sadman41 пишет:
Ставлю на недостаток RAM.

иначе говоря, atmega328 не тянет мой проект?а могу я вывести в порт остаток RAM?чтоб убедиться

sadman41
Offline
Зарегистрирован: 19.10.2016
trade
Offline
Зарегистрирован: 03.07.2019

страница виснит. в порте остаток ОЗУ
Free RAM: 256
вызов функции отображение данных занимает 70 байт ОЗУ
 
sadman41
Offline
Зарегистрирован: 19.10.2016

250 - это мало. Тем более если оперировать стрингами. Откройте для себя макрос F() , избавьтесь от библиотеки SD, перенеся исходники страницы в PROGMEM и тогда влезет все написанное выше в 328-й МК.

trade
Offline
Зарегистрирован: 03.07.2019

sadman41 пишет:
250 - это мало. Тем более если оперировать стрингами. Откройте для себя макрос F() , избавьтесь от библиотеки SD, перенеся исходники страницы в PROGMEM и тогда влезет все написанное выше в 328-й МК.

Благодарю, уже начал разбираться с памятью.

около 260 байт уже не хочет ниче грузить, мк просто виснит.

хотя освободил 1 стринг (посредник задания пути), а ОЗУ все равно  осталось 260 и оно Грузит!