Проблема с подключением Arduino по Ethernet.
Добавлено: Пт апр 29, 2016 11:12:49
Подскажите, пожалуйста, почему в одном скетче для Arduino одновременно не работают эти два фрагмента кода:
Первый:
Второй:
Весь код:
Подключение проходит, IP-адрес получаем,ответ на GET-запрос тоже получаем. Но в таком случае не работает соединение с терминалом.
Первый:
Спойлер
Код: Выделить всё
...
void loop()
{
// =============
if (client.available())
while (client.connected())
{
if (client.available())
{
char c = client.read();
Serial.print(c);
// =========
if (c == 'D')
{
memset (SECONDS, ' ', 3);
memset (MINUTES, ' ', 3);
memset (HOURS, ' ', 3);
memset (DATE, ' ', 3);
memset (MOUNTH, ' ', 4);
memset (YEAR, ' ', 3);
memset (DAY, ' ', 4);
memset (DATA_STRING,' ',35);
MARKER_DATA_STRING = true;
k = 0;
}
// =========
if ((MARKER_DATA_STRING == true) && (k < 36) && (c != 'T'))
{
DATA_STRING[k] = c;
k = k + 1;
}
// =========
if ((MARKER_DATA_STRING == true) && (k >= 36))
{
memset (SECONDS, ' ', 3);
memset (MINUTES, ' ', 3);
memset (HOURS, ' ', 3);
memset (DATE, ' ', 3);
memset (MOUNTH, ' ', 4);
memset (YEAR, ' ', 3);
memset (DAY, ' ', 4);
memset (DATA_STRING, ' ', 35);
k = 0;
}
// =========
if ((MARKER_DATA_STRING == true) && (c == 'T'))
{
DATA_STRING[k] = c;
MARKER_DATA_STRING = false;
k = 0;
// =========
if (DATA_STRING[29] != '0')
{
SECONDS[0] = (DATA_STRING[29]);
SECONDS[1] = (DATA_STRING[30]);
SECONDS[2] = ('\0');
}
else
{
SECONDS[0] = (DATA_STRING[30]);
SECONDS[1] = ('\0');
}
// =========
if (DATA_STRING[26] != '0')
{
MINUTES[0] = (DATA_STRING[26]);
MINUTES[1] = (DATA_STRING[27]);
MINUTES[2] = ('\0');
}
else
{
MINUTES[0] = (DATA_STRING[27]);
MINUTES[1] = ('\0');
}
// =========
if (DATA_STRING[23] != '0')
{
HOURS[0] = (DATA_STRING[23]);
HOURS[1] = (DATA_STRING[24]);
HOURS[2] = ('\0');
}
else
{
HOURS[0] = (DATA_STRING[24]);
HOURS[1] = ('\0');
}
// =========
if (DATA_STRING[11] != '0')
{
DATE[0] = (DATA_STRING[11]);
DATE[1] = (DATA_STRING[12]);
DATE[2] = ('\0');
}
else
{
DATE[0] = (DATA_STRING[12]);
DATE[1] = ('\0');
}
// =========
MOUNTH[0] = (DATA_STRING[14]);
MOUNTH[1] = (DATA_STRING[15]);
MOUNTH[2] = (DATA_STRING[16]);
MOUNTH[3] = ('\0');
if (strncmp (MOUNTH, "Jan", 3) == 0) {MOUNTH_INDEX[0] = '1'; }
if (strncmp (MOUNTH, "Feb", 3) == 0) {MOUNTH_INDEX[0] = '2'; }
if (strncmp (MOUNTH, "Mar", 3) == 0) {MOUNTH_INDEX[0] = '3'; }
if (strncmp (MOUNTH, "Apr", 3) == 0) {MOUNTH_INDEX[0] = '4'; }
if (strncmp (MOUNTH, "May", 3) == 0) {MOUNTH_INDEX[0] = '5'; }
if (strncmp (MOUNTH, "Jun", 3) == 0) {MOUNTH_INDEX[0] = '6'; }
if (strncmp (MOUNTH, "Jul", 3) == 0) {MOUNTH_INDEX[0] = '7'; }
if (strncmp (MOUNTH, "Aug", 3) == 0) {MOUNTH_INDEX[0] = '8'; }
if (strncmp (MOUNTH, "Sep", 3) == 0) {MOUNTH_INDEX[0] = '9'; }
if (strncmp (MOUNTH, "Oct", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '0';}
if (strncmp (MOUNTH, "Nov", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '1';}
if (strncmp (MOUNTH, "Dec", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '2';}
// =========
if (DATA_STRING[20] != '0')
{
YEAR[0] = (DATA_STRING[20]);
YEAR[1] = (DATA_STRING[21]);
YEAR[2] = ('\0');
}
else
{
YEAR[0] = (DATA_STRING[21]);
YEAR[1] = ('\0');
}
// =========
DAY[0] = (DATA_STRING[6]);
DAY[1] = (DATA_STRING[7]);
DAY[2] = (DATA_STRING[8]);
DAY[3] = ('\0');
if (strncmp (DAY, "Mon", 3) == 0) {DAY_INDEX[0] = '1'; }
if (strncmp (DAY, "Tue", 3) == 0) {DAY_INDEX[0] = '2'; }
if (strncmp (DAY, "Wed", 3) == 0) {DAY_INDEX[0] = '3'; }
if (strncmp (DAY, "Thu", 3) == 0) {DAY_INDEX[0] = '4'; }
if (strncmp (DAY, "Fri", 3) == 0) {DAY_INDEX[0] = '5'; }
if (strncmp (DAY, "Sat", 3) == 0) {DAY_INDEX[0] = '6'; }
if (strncmp (DAY, "Sun", 3) == 0) {DAY_INDEX[0] = '7'; }
// =========
time.settime(atoi(SECONDS), atoi(MINUTES), atoi(HOURS), atoi(DATE), atoi(MOUNTH_INDEX), atoi(YEAR), atoi(DAY_INDEX)); // сек, мин, час, число, месяц, год, день недели
// =========
}
// =========
if (!client.connected())
{
Serial.println();
Serial.println("disconnecting.");
client.stop();
while (true);
}
}
}
...
Второй:
Спойлер
Код: Выделить всё
...
void loop()
{
// =============
EthernetClient client = server.available();
if (client)
{//Serial.println("new client");
while (client.connected())
{
if (client.available())
{
char c = client.read();
// =========
if (c == '[')
{
memset (DATA_PWM,' ',4);
MARKER_PWM = true;
i = 0;
return;
}
// =========
if ((MARKER_PWM == true) && (i < 5) && (c != ']'))
{
DATA_PWM[i] = c;
i = i + 1;
}
// =========
if ((MARKER_PWM == true) && (i >= 5))
{
memset (DATA_PWM, ' ', 4);
i = 0;
}
// =========
if (c == ']')
{
MARKER_PWM = false;
i = 0;
Serial.println(DATA_PWM);
client.println(DATA_PWM);
analogWrite(11, atoi(DATA_PWM));
myFile = SD.open("DATALOG.txt", FILE_WRITE);
if (myFile)
{
Serial.print("Writing to log file...");
myFile.print(time.gettime("d-m-Y, H:i:s, D")); // выводим время
myFile.print(" : Change PWM value to: "); // выводим время
myFile.println(DATA_PWM);
myFile.close();
Serial.println("done.");
}
else
{
Serial.println("error opening log file");
}
}
// =========
}
}
}
}
// ===========
Весь код:
Спойлер
Код: Выделить всё
#include <SD.h>
#include <RTC.h>
#include <SPI.h>
#include <Ethernet.h>
// =====
RTC time;
File myFile;
boolean MARKER_PWM = false;
boolean MARKER_DATA_STRING = false;
char DATA_PWM[4];
char DATA_STRING[35];
char i;
char k;
char SECONDS[3];
char MINUTES[3];
char HOURS[3];
char DATE[3];
char MOUNTH[4];
char YEAR[3];
char DAY[4];
char MOUNTH_INDEX[2];
char DAY_INDEX[1];
// =====
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
char serv[] = "www.mail.ru"; // name address for Google (using DNS)
EthernetClient client;
EthernetServer server(8888);
// ===========
void setup()
{
// =====
Serial.begin(9600);
// ========
while (!Serial)
{
; // wait for serial port to connect. Needed for native USB port only
}
// ========
Serial.print("Initializing SD card...");
pinMode(4, OUTPUT);
if (!SD.begin(4))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// =====
delay(1000);
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
for(;;);
}
Serial.println(Ethernet.localIP());
server.begin();
pinMode(5, OUTPUT);
// =====
delay(300);
time.begin(RTC_DS1302,2,5,3); // 10-2, 12-3,13-5
//time.settime(0,42,14,26,4,16,2); // сек, мин, час, число, месяц, год, день недели*/
// =====
pinMode(11, OUTPUT);
// =====
delay(1000);
Serial.println("connecting...");
if (client.connect(serv, 80))
{
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.mail.ru");
client.println("Connection: close");
client.println();
}
else
{
Serial.println("connection failed");
}
// =====
}
// ===========
void loop()
{
// =============
if (client.available())
while (client.connected())
{
if (client.available())
{
char c = client.read();
Serial.print(c);
// =========
if (c == 'D')
{
memset (SECONDS, ' ', 3);
memset (MINUTES, ' ', 3);
memset (HOURS, ' ', 3);
memset (DATE, ' ', 3);
memset (MOUNTH, ' ', 4);
memset (YEAR, ' ', 3);
memset (DAY, ' ', 4);
memset (DATA_STRING,' ',35);
MARKER_DATA_STRING = true;
k = 0;
}
// =========
if ((MARKER_DATA_STRING == true) && (k < 36) && (c != 'T'))
{
DATA_STRING[k] = c;
k = k + 1;
}
// =========
if ((MARKER_DATA_STRING == true) && (k >= 36))
{
memset (SECONDS, ' ', 3);
memset (MINUTES, ' ', 3);
memset (HOURS, ' ', 3);
memset (DATE, ' ', 3);
memset (MOUNTH, ' ', 4);
memset (YEAR, ' ', 3);
memset (DAY, ' ', 4);
memset (DATA_STRING, ' ', 35);
k = 0;
}
// =========
if ((MARKER_DATA_STRING == true) && (c == 'T'))
{
DATA_STRING[k] = c;
MARKER_DATA_STRING = false;
k = 0;
// =========
if (DATA_STRING[29] != '0')
{
SECONDS[0] = (DATA_STRING[29]);
SECONDS[1] = (DATA_STRING[30]);
SECONDS[2] = ('\0');
}
else
{
SECONDS[0] = (DATA_STRING[30]);
SECONDS[1] = ('\0');
}
// =========
if (DATA_STRING[26] != '0')
{
MINUTES[0] = (DATA_STRING[26]);
MINUTES[1] = (DATA_STRING[27]);
MINUTES[2] = ('\0');
}
else
{
MINUTES[0] = (DATA_STRING[27]);
MINUTES[1] = ('\0');
}
// =========
if (DATA_STRING[23] != '0')
{
HOURS[0] = (DATA_STRING[23]);
HOURS[1] = (DATA_STRING[24]);
HOURS[2] = ('\0');
}
else
{
HOURS[0] = (DATA_STRING[24]);
HOURS[1] = ('\0');
}
// =========
if (DATA_STRING[11] != '0')
{
DATE[0] = (DATA_STRING[11]);
DATE[1] = (DATA_STRING[12]);
DATE[2] = ('\0');
}
else
{
DATE[0] = (DATA_STRING[12]);
DATE[1] = ('\0');
}
// =========
MOUNTH[0] = (DATA_STRING[14]);
MOUNTH[1] = (DATA_STRING[15]);
MOUNTH[2] = (DATA_STRING[16]);
MOUNTH[3] = ('\0');
if (strncmp (MOUNTH, "Jan", 3) == 0) {MOUNTH_INDEX[0] = '1'; }
if (strncmp (MOUNTH, "Feb", 3) == 0) {MOUNTH_INDEX[0] = '2'; }
if (strncmp (MOUNTH, "Mar", 3) == 0) {MOUNTH_INDEX[0] = '3'; }
if (strncmp (MOUNTH, "Apr", 3) == 0) {MOUNTH_INDEX[0] = '4'; }
if (strncmp (MOUNTH, "May", 3) == 0) {MOUNTH_INDEX[0] = '5'; }
if (strncmp (MOUNTH, "Jun", 3) == 0) {MOUNTH_INDEX[0] = '6'; }
if (strncmp (MOUNTH, "Jul", 3) == 0) {MOUNTH_INDEX[0] = '7'; }
if (strncmp (MOUNTH, "Aug", 3) == 0) {MOUNTH_INDEX[0] = '8'; }
if (strncmp (MOUNTH, "Sep", 3) == 0) {MOUNTH_INDEX[0] = '9'; }
if (strncmp (MOUNTH, "Oct", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '0';}
if (strncmp (MOUNTH, "Nov", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '1';}
if (strncmp (MOUNTH, "Dec", 3) == 0) {MOUNTH_INDEX[0] = '1'; MOUNTH_INDEX[1] = '2';}
// =========
if (DATA_STRING[20] != '0')
{
YEAR[0] = (DATA_STRING[20]);
YEAR[1] = (DATA_STRING[21]);
YEAR[2] = ('\0');
}
else
{
YEAR[0] = (DATA_STRING[21]);
YEAR[1] = ('\0');
}
// =========
DAY[0] = (DATA_STRING[6]);
DAY[1] = (DATA_STRING[7]);
DAY[2] = (DATA_STRING[8]);
DAY[3] = ('\0');
if (strncmp (DAY, "Mon", 3) == 0) {DAY_INDEX[0] = '1'; }
if (strncmp (DAY, "Tue", 3) == 0) {DAY_INDEX[0] = '2'; }
if (strncmp (DAY, "Wed", 3) == 0) {DAY_INDEX[0] = '3'; }
if (strncmp (DAY, "Thu", 3) == 0) {DAY_INDEX[0] = '4'; }
if (strncmp (DAY, "Fri", 3) == 0) {DAY_INDEX[0] = '5'; }
if (strncmp (DAY, "Sat", 3) == 0) {DAY_INDEX[0] = '6'; }
if (strncmp (DAY, "Sun", 3) == 0) {DAY_INDEX[0] = '7'; }
// =========
time.settime(atoi(SECONDS), atoi(MINUTES), atoi(HOURS), atoi(DATE), atoi(MOUNTH_INDEX), atoi(YEAR), atoi(DAY_INDEX)); // сек, мин, час, число, месяц, год, день недели
// =========
}
// =========
if (!client.connected())
{
Serial.println();
Serial.println("disconnecting.");
client.stop();
while (true);
}
}
}
// =============
EthernetClient client = server.available();
if (client)
{//Serial.println("new client");
while (client.connected())
{
if (client.available())
{
char c = client.read();
// =========
if (c == '[')
{
memset (DATA_PWM,' ',4);
MARKER_PWM = true;
i = 0;
return;
}
// =========
if ((MARKER_PWM == true) && (i < 5) && (c != ']'))
{
DATA_PWM[i] = c;
i = i + 1;
}
// =========
if ((MARKER_PWM == true) && (i >= 5))
{
memset (DATA_PWM, ' ', 4);
i = 0;
}
// =========
if (c == ']')
{
MARKER_PWM = false;
i = 0;
Serial.println(DATA_PWM);
client.println(DATA_PWM);
analogWrite(11, atoi(DATA_PWM));
myFile = SD.open("DATALOG.txt", FILE_WRITE);
if (myFile)
{
Serial.print("Writing to log file...");
myFile.print(time.gettime("d-m-Y, H:i:s, D")); // выводим время
myFile.print(" : Change PWM value to: "); // выводим время
myFile.println(DATA_PWM);
myFile.close();
Serial.println("done.");
}
else
{
Serial.println("error opening log file");
}
}
// =========
}
}
}
}
// ===========
Подключение проходит, IP-адрес получаем,ответ на GET-запрос тоже получаем. Но в таком случае не работает соединение с терминалом.