Сам скетч (На кометарии в нутри особо внимания не оброщайте, писал для себя!!! ):
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <MCP23x17.h>
#include <MCP23017.h>
#include <Bounce.h> // Дребезг контактов
///// интернет////////////////////
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0, 25);
IPAddress gateway(192,168,0, 2);
IPAddress subnet(255, 255, 0, 0);
EthernetServer server(1010);
boolean alreadyConnected = false; // ли клиент был подключен ранее (отключаем всех клиентов)???
int inSize=0; // Переменная которая будет содержать размер буфера
char str[128]; // Так как типа string тут нет, будем использовать массив символов
//Создаем два объекта класса CMCP23017, но не инициализируем, т.к. шина I2C не готова
CMCP23017 mcp23_1;
CMCP23017 mcp23_2;
///////////////////// ПЕРЕМЕННЫЕ НА КНОПКИ///////////////
long int k3 ; // Состояние кнопки на 3 ноге
long int K3Ron; // Запуск работы на кнопке 3 нажатие кнопки
long int K3Roff; // Запуск работы на кнопке 3 отпускание кнопки
long int K3RS; // Счетчик колличества циклов отправки до подтверждения
long int previousMillis = 0; // храним время последнего переключения светодиода
long int interval_1 = 1; // интервал между включение/выключением первая отправка
long int interval_2 = 90; // интервал между включение/выключением цмкличная отправка
long int interval_Per ; // переменный интервал
void setup()
{
/////////////////// интернет /////////////////
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();// начать прослушивание для клиентов
//Инициализируем шину I2C
Wire.begin();
mcp23_1.init(0);
mcp23_2.init(1);
mcp23_1.pinMode(3, INPUT); // кнопка
mcp23_1.pinMode(6, OUTPUT); // свет
mcp23_1.pinMode(7, OUTPUT); //свет
Bounce bouncer = Bounce(3, 40); //создаем экземпляр класса Bounce для 3 вывода
}
void loop()
{
//////////////////////КНОПКИ//////////////////
unsigned long currentMillis = millis();
///////////////////////// ИНТЕРНЕТ////////////////
EthernetClient client = server.available(); // ожидание для нового клиента:
inSize=0; // Сбрасываем переменную
memset(str, '\0', 128); // Очищаем массив
if(client.available() > 0)
{
delay(50); // Ждем, для того, чтобы пришли все данные
inSize = client.available(); // Получаем длину строки и записываем ее в переменую
for (int w = 0; w < inSize; w++)
{
str[w] = client.read(); // Читаем каждый символ, и пишем его в массив
}
// Сравнять массив с строкой будем используя функцию strcmp
//
//
//
////// включам и выключаем 1 ногу////////////////
if (strcmp(str, "Pod:on1") == 0) // Включаем подогрев кнопка нажата
{
server.write ("Pod:on1_zd"); // Отправляем сообщение компьютеру
digitalWrite(7, HIGH);
}
else if (strcmp(str, "Pod:on0") == 0) // Включаем подогрев кнопка отпущена
{
server.write ("Pod:on0_zd"); // Отправляем сообщение компьютеру
digitalWrite(7, LOW);
}
//
//
///////// проверка соединения////////////////////
else if (strcmp(str, "Con") == 0) // Проверка соединения
{
server.write ("Con_on");
}
else
{
server.write ("Error command!");
}
}
if (bouncer.update()) { //если произошло событие на 3 пине
K3Ron = 0;
K3Roff = 0;
if (bouncer.read()==1) { //если кнопка нажата
K3Ron = 1;// если кнопка нажата То назначаем
K3RS =1;
}
else {
K3RS =0;
K3Roff = 1;
}
}
if (K3Ron >= 1 && K3Ron < 11 ) // отправка данных на комп
{
if (K3Ron == 1) {(interval_Per = interval_1);}
else (interval_Per = interval_2);
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis > interval_Per) {
// сохраняем время последнего переключен
previousMillis = currentMillis;
server.write ("On = ");
K3Ron = K3Ron + 1;
}
}
if (K3Roff >= 1 && K3Roff < 11 ) // отправка данных на ком
{
if (K3Roff == 1) {(interval_Per = interval_1);}
else (interval_Per = interval_2);
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis > interval_Per) {
// сохраняем время последнего переключен
previousMillis = currentMillis;
server.write ("Off = " );
K3Roff = K3Roff + 1;
}
}
}