Nano. Нужен исполнитель.
- Войдите на сайт для отправки комментариев
Необходимо написать или переписать данный код. Необходима работа без Deley, то есть что-бы цикл задержек всегда можно было остановить. Данный вариант кода не работает, почему я не знаю, автор не общительный. Нужно добавить дополнительно: контролировать положение LOW или HIGH на digital pin 2, объяснить мне как это значение контролировать с помощью POST запроса. То есть от положения контакта должна загораться лампочка на другой вебстранице, сообщающая о готовности устройства к работе. Доступ к редактору страницы доступен через TeamViewer. Так же создать условие запрещающее перевод digital pin 8 в положение LOW, пока на digital pin 2 не будет LOW. Вывод информации на html страницу не нужен, ниже будет скрипт с помощью которого на другой вебстранице осуществляется управление кнопками "Пуск" "Стоп". С помощью подобного скрипта необходимо зажигать лампочку о готовности без обновления страницы.
001 | #include <SPI.h> |
002 | #include <Ethernet.h> |
003 | boolean newInfo = 0; |
004 | byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; |
005 | byte gateway[] = { 192, 168, 4, 1 }; |
006 | byte subnet[] = { 255, 255, 255, 0 }; |
007 | IPAddress ip(192,168,4,70); |
008 | |
009 | EthernetServer server(80); |
010 | int a; |
011 | int count; |
012 | int operation; |
013 | void setup () |
014 | { |
015 | cli(); |
016 | pinMode(8, OUTPUT); |
017 | digitalWrite(8,HIGH); |
018 | Ethernet.begin(mac, ip); |
019 | server.begin(); |
020 | Serial .begin(9600); |
021 | /* |
022 | * Настройка таймера по переполнению |
023 | */ |
024 | TCCR1A = 0; // установить TCCR1A регистр в 0 |
025 | OCR1A = 15624; // установка регистра совпадения |
026 | TCCR1B |= (1 << WGM12); // включение в CTC режим |
027 | TIMSK1 = (1 << OCIE1A); //включить прерывание Timer1 overflow |
028 | TCCR1B |= (1 << CS12); |
029 | TCCR1B |= (0 << CS11); |
030 | TCCR1B |= (1 << CS10); |
031 | sei(); |
032 | |
033 | a = 0; |
034 | count = 0; |
035 | operation = 0; |
036 | } |
037 | ISR(TIMER1_COMPA_vect) |
038 | { |
039 | switch (a){ |
040 | case 1: |
041 | count = 0; |
042 | break ; |
043 | case 2: |
044 | count = count + 1; |
045 | break ; |
046 | default :; |
047 | } |
048 | if (a == 1)blinker(); |
049 | } |
050 | void blinker() |
051 | { |
052 | /* |
053 | digitalWrite(8, LOW); |
054 | delay(8000); |
055 | digitalWrite(8, HIGH); |
056 | delay(5000); |
057 | digitalWrite(8, LOW); |
058 | delay(8000); |
059 | digitalWrite(8, HIGH); |
060 | delay(10000); |
061 | digitalWrite(8, LOW); |
062 | delay(210000); |
063 | digitalWrite(8, HIGH); |
064 | */ |
065 | if (operation == 1){ |
066 | digitalWrite(8, HIGH); |
067 | operation = 2; |
068 | a = 1; |
069 | } |
070 | if ((operation == 2) && (count == 8)){ |
071 | digitalWrite(8, LOW); |
072 | operation = 3; |
073 | count = 0; |
074 | } |
075 | if ((operation == 3) && (count == 5)){ |
076 | digitalWrite(8, HIGH); |
077 | operation = 4; |
078 | count = 0; |
079 | } |
080 | if ((operation == 4) && (count == 8)){ |
081 | digitalWrite(8, LOW); |
082 | operation = 5; |
083 | count = 0; |
084 | } |
085 | if ((operation == 5) && (count == 10)){ |
086 | digitalWrite(8, HIGH); |
087 | operation = 6; |
088 | count = 0; |
089 | } |
090 | if ((operation == 6) && (count == 210)){ |
091 | digitalWrite(8, LOW); |
092 | operation = 0; |
093 | a = 0; |
094 | } |
095 | } |
096 | |
097 | void loop () |
098 | { |
099 | EthernetClient client = server.available(); |
100 | if (client){ |
101 | boolean currentLineIsBlank = true ; |
102 | while (client.connected()) { |
103 | if (client.available()) { |
104 | char c = client.read(); |
105 | |
106 | if (newInfo && c == ' ' ){ |
107 | newInfo = 0; |
108 | } |
109 | |
110 | if (c == '$' ){ |
111 | newInfo = 1; |
112 | } |
113 | |
114 | if ((newInfo == 1) && (operation == 0)){ |
115 | Serial .println(c); |
116 | if (c == '1' ){ |
117 | Serial .println( "ON" ); |
118 | operation = 1; |
119 | blinker(); |
120 | } |
121 | |
122 | if (c == '2' ){ |
123 | Serial .println( "OFF" ); |
124 | digitalWrite(8, HIGH); |
125 | } |
126 | } |
127 | |
128 | if (c == '\n' ) { |
129 | currentLineIsBlank = true ; |
130 | } |
131 | else if (c != '\r' ) { |
132 | currentLineIsBlank = false ; |
133 | } |
134 | |
135 | if (c == '\n' && currentLineIsBlank) { |
136 | client.println( "HTTP/1.1 200 OK" ); |
137 | client.println( "Content-Type: text/html" ); |
138 | client.println( "Connection: close" ); |
139 | client.println( "Refresh: 30" ); |
140 | client.println(); |
141 | client.println( "<!DOCTYPE HTML>" ); |
142 | client.println( "<html>" ); |
143 | client.print( "<title>Web Server</title>" ); |
144 | client.print( "<H1>Web Server</H1>" ); |
145 | client.print( "<a href=\"/$1\"><button>On</button></a>" ); |
146 | client.print( "<a href=\"/$2\"><button>Off</button></a>" ); |
147 | client.println( "<br />" ); |
148 | client.println( "</html>" ); |
149 | break ; |
150 | } |
151 | |
152 | } |
153 | |
154 | } |
155 | delay(1); |
156 | client.stop(); |
157 | } |
158 | } |
01 | <script> |
02 | $(function(){ |
03 |
04 |
05 | $( '#pusk' ).click(function() { |
06 | $.post( '<a href="http://192.168.4.70/$1" rel="nofollow">http://192.168.4.70/$1</a>' , { "url" : '$1' ,}, |
07 | function(data){ |
08 | if (data.success) { |
09 | $( '#result' ).html(data.success.msg); |
10 | } else { |
11 | $( '#result' ).html(data.error.msg); |
12 | } |
13 | }, "json" ); |
14 | return false ; |
15 | }); |
16 |
17 | }); |
18 |
19 | $(function(){ |
20 |
21 |
22 | $( '#stop' ).click(function() { |
23 | $.post( '<a href="http://192.168.4.70/$2" rel="nofollow">http://192.168.4.70/$2</a>' , { "url" : '$2' ,}, |
24 | function(data){ |
25 | if (data.success) { |
26 | $( '#result' ).html(data.success.msg); |
27 | } else { |
28 | $( '#result' ).html(data.error.msg); |
29 | } |
30 | }, "json" ); |
31 | return false ; |
32 | }); |
33 |
34 | }); |
35 | </script> |
Цикл задержек остановить чем? Пулеметной очередью, ударом кузнечного молота? Как исполнитель должен это требование реализовывать? Вы так и не желаете учиться оценивать перспективу, замечаете только delay().
Данное устройство будет работать 24\7 в ожидании команды запуска 1 раз в месяц. Воля исполнителя применить какие-то доработки оптимизирующие безперебойную работу сети. Участник sadman41 писал по этому поводу здесь http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/vopros-novichka#comment-557784
Здесь http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/snova-voprosy?page=2 было обсуждение данной поделки. В теме дано много подсказок, но я не понимаю как применить их на практике.
Просто остановиться в ожидании запуска. По истечению 210 секунд перейти из LOW в HIGH и ждать следующего запуска.
Наверное в этом форуме отсутствует возможность написания личных сообщений. Я много раз хотел написать вам в личку но никак. Хотел попросить вас закончить эту эпопею, не бесплатно конечно.
напишу правильно работающий скетч заново. 2тр. man9913@mail.ru
Я сейчас наслаждаюсь прелестями "медициносодержащей услуги" от Минздрава, так что браться пока за это не буду. А с учётом уже озвученных 2 тыщ при тех проблемах , что мне уже известны, данный заказ вообще становится не очень привлекателен.
Выше написали только за скетч, про зажигание лампочек ничего не говорилось. Мне нужно все вместе сделать или по отдельности но без обратной связи никак.
2 тысячи это совершенно не серьёзно или исполнитель не понял задачи
2 тысячи это совершенно не серьёзно или исполнитель не понял задачи
Он не понял. В течении часа в почте веду переписку.
чтобы он понял, надо нормально задачу формулировать, чтобы исполнитель клещами не вытаскивал информацию из вас по крупинкам, это кстати увеличивает стоимость выполнения.
чтобы он понял, надо нормально задачу формулировать, чтобы исполнитель клещами не вытаскивал информацию из вас по крупинкам, это кстати увеличивает стоимость выполнения.
на прямо заданные вопросы ответа не было, если это дизель-генератор, к примеру из серии ДГА-48 и далее, то они оборудованы шкафами автоматики, ранее это было на логике-Т, то-есть можно получить часть данных со шкафа, для ручного управления там две кнопки (режим ручной проверки), пуск и стоп, сначала включается насос прокачки масла, далее, по истечении определённого периода времени если с давлением всё в норме включается запуск либо от аккумуляторов 24 вольта либо от рессиверов с воздухом и должен произойти выход на рабочие обороты (1500 об/мин) за определённое время, нет выхода - авария, стоп...
Так и не услышал, что за дизеля там такие и система автоматики к ним... а сейчас идёт обсуждение "сферического коня в вакууме"... и таких коней аж 7 вроде )))
посмотрел представленный код... блинкер вызывается в обработке запроса сервера? :) ну-ну...
Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?
посмотрел представленный код... блинкер вызывается в ответе сервера? :) ну-ну...
Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?
Я инициатор, я заказчик, я исполнитель. Платить исполнителю буду из своей зарплаты, сколько бы это не стоило. Стоимость не оглашал, надеялся на предложения. Код выложил с последними изменениями. Если хотите, то вот последний рабочий вариант:
001
#include <SPI.h>
002
#include <Ethernet.h>
003
boolean newInfo = 0;
004
byte
mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
005
byte
gateway[] = { 192, 168, 4, 1 };
006
byte
subnet[] = { 255, 255, 255, 0 };
007
IPAddress ip(192,168,4,70);
008
EthernetServer server(80);
009
010
011
void
setup
()
012
{
013
pinMode(8, OUTPUT);
014
digitalWrite(8,HIGH);
015
Ethernet.begin(mac, ip);
016
server.begin();
017
Serial
.begin(9600);
018
}
019
020
void
blinker()
021
{
022
digitalWrite(8, LOW);
023
delay(8000);
024
digitalWrite(8, HIGH);
025
delay(5000);
026
digitalWrite(8, LOW);
027
delay(8000);
028
digitalWrite(8, HIGH);
029
delay(10000);
030
digitalWrite(8, LOW);
031
delay(210000);
032
digitalWrite(8, HIGH);
033
}
034
035
036
void
loop
()
037
{
038
EthernetClient client = server.available();
039
if
(client){
040
boolean currentLineIsBlank =
true
;
041
while
(client.connected()) {
042
if
(client.available()) {
043
char
c = client.read();
044
045
if
(newInfo && c ==
' '
){
046
newInfo = 0;
047
}
048
049
if
(c ==
'$'
){
050
051
newInfo = 1;
052
}
053
054
055
if
(newInfo == 1){
056
Serial
.println(c);
057
if
(c ==
'1'
){
058
Serial
.println(
"ON"
);
059
digitalWrite(8, LOW);
060
blinker();
061
}
062
063
if
(c ==
'2'
){
064
Serial
.println(
"OFF"
);
065
digitalWrite(8, HIGH);
066
}
067
}
068
069
if
(c ==
'\n'
) {
070
currentLineIsBlank =
true
;
071
}
072
else
if
(c !=
'\r'
) {
073
currentLineIsBlank =
false
;
074
}
075
076
if
(c ==
'\n'
&& currentLineIsBlank) {
077
client.println(
"HTTP/1.1 200 OK"
);
078
client.println(
"Content-Type: text/html"
);
079
client.println(
"Connection: close"
);
080
client.println(
"Refresh: 1"
);
081
client.println();
082
client.println(
"<!DOCTYPE HTML>"
);
083
client.println(
"<html>"
);
084
client.print(
"<title>Alarm</title>"
);
085
client.print(
"<H1>Block 1</H1>"
);
086
if
(digitalRead(8))
087
{
088
client.println(
"<h3>OFF</h3>"
);
089
}
090
else
091
{
092
client.println(
"<h3>ON</h3>"
);
093
}
094
client.println(
"<br />"
);
095
client.println(
"</html>"
);
096
break
;
097
}
098
099
}
100
101
}
102
delay(1);
103
client.stop();
104
}
105
}
Разве системы ГО и ЧС не требуют сертификатов на продукцию? От них жизнь людей зависит. А ну как зависнет эта ваша конструкция через пару недель, а никто и знать не будет, пока не жахнет.
Я, конечно, понимаю, что в это верить не хочется, но когда начнут искать виноватых - мысли в голове будут совсем другие: "на кой хер я взялся жопу начальству прикрывать и ещё за свой счёт?"
Вот по этому я долгое время скрывал настоящие цели, но шила в мешке не утаишь...
Сейчас ответственность за эти блоки государство перенесло на плечи предприятий где они установлены. Я работаю на одном из таких предприятий и когда зависнет, буду первый кто получит по шапке. Зачем мне это? Интерес и опыт какой-то. Тут или вперед или никто не поймет, почему проект был свернут в самый разгар.
Ну и зря скрывали. Никакая опасность потерять работу не стоит 5 лет колонии.
А уж начальники, будьте уверены, все оформят самоуправством за милую душу.
И, вообще, такая постановка задачи, в корне меняет подход к проектированию системы.
Почему "никто не поймет?"
Есть факт - система работает неустойчиво, к вводу в эксплуатацию допущена быть не может. Все.
Хорошо. Какие вы предлагаете изменения для получения стабильности?
Сертифицированное оборудование, а не нанки, у которых не дай бог кварцы поотваливаются после эксплуатации в промышленных условиях.
Я вижу - вы упрямо желаете стать фигурантом "Зимней Вишни - 2". Это крайне печально.
Просто я помню недавнюю историю с сертифицированным оборудованием...
Решили значит в цехах и не только заменить старые побитые жизнью алюминиевые рупоры для громкоговорящей связи. Питаются они от трансляционной линии 120 вольт. Фирма смонтировала свои сертифицированные рупоры, а усилители остались старыми. Через месяц начали гореть эти рупоры как семечки, фирма исчезла, а мы выколуповали из старых колоколов трансформаторы и меняли их в новых колоколах. Вот еще осталась кучка этих китайских типа трансформаторов, у них даже между собой параметры разные. Хотел этим сказать, что с сиренами которые включают 1 раз в месяц для проверки будет та же история, а включают их подпирая вручную палочкой контакты пускателя в назначенное время уже лет 10 если не больше. А видео наблюдение? Лучше промолчу! Нет веры никому, только себе. Нашу скромную электро-мастерскую нужно переименовать в бюро доводок и доделок.
я вам советую разделить задачу на понятные части.
Для начала закажите отдельно переписывание этого кода без делей. Только это, без всяких модификаций, без добавления чтения каких-то пинов и посылки POST запроса. Это относительно несложная задача, и, главное - на нее уже есть ТЗ.
Думаю, на это вы исполнителя найдете легко.
А потом, когда эта часть заработает - может напрягетесь и сумеете внятно сформулировать. что там вам за управление пинами через POST запросы нужно, потому как пока я абсолютно ничего не понял.
посмотрел представленный код... блинкер вызывается в обработке запроса сервера? :) ну-ну...
Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?
ващето blinker вызывается из прерывания если чё.
точно, не увидел...
Не сложилось у вас с ТС. я так понял?
точно, не увидел...
Не сложилось у вас с ТС. я так понял?
исполнителем этого проекта я не являюсь.
сейчас мяч на стороне ТС'а. задача в принципе понятна и решаема. загвоздка там в том, что, как я понял, http запросы к ардуино делает веб сервер крутящийся на локальном ПК. ТС,у надо написать соответствующий php скрипт под openserver, который по его словам ему сделает веб-программист когда у него найдётся на это время.
Начинается пожар, электричество вырубается, ПК в дауне, свичи в дауне - что делает система оповещения? Спокойно себе догарает.
Просто отлично.
И про вачдог не забывайте! На не «old bootloder” он прекрасно фунциклирует.
Просто отлично.
Это не пожарная сигнализация, это сирена по типу авианалета или химической опасности. Она не такая значимая, но ее проверяют 1 раз в месяц.
Вот такая же https://youtu.be/T1SBljDADto
UW5EGA - вся эта идея с кучей веб-серверов, которые что-то передают друг другу - абсолютно неприемлема для любой ответственной системы. Я вам еще в самом начале обсуждения сказал, что 7 вебсерверов для семи ардуино - это бредятина. Но вы же никого не слушаете...
Вот ведь удивительно - чтобы переписать простенький код без делеев - вы ищете исполнителя, чтобы сбацать какой-то там пхп-скрипт на сервер - просите веб-программиста, но по вопросам общего проектирования системы ничьих советов не слушаете и упорно строите какую-то городулю из гнилых палок и костылей...
то есть реально ни в чем конкретно не разбираетесь -но уверены что надо делать именно так...
упорно строите какую-то городулю из гнилых палок и костылей...
UDP широковещательного тут бы видимо хватило:
01
#if defined(EthModule)
02
const
byte
RemoteDevice =
's'
;
03
const
byte
ThisDevice =
'r'
;
04
bool
EnableEthernet = 1;
05
bool
EnableDHCP = 1;
06
long
GetNetIdTimer[2]{0,2000};
07
// #include <util.h>
08
#include <Ethernet.h>
09
#include <EthernetUdp.h>
10
// #include <Dhcp.h>
11
// #include <EthernetServer.h>
12
#include <SPI.h>
13
byte
LastMac = 0x00 + NET_ID;
14
15
byte
mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, LastMac};
16
IPAddress ip(192, 168, 1, 222);
// IP
17
IPAddress gateway(192, 168, 1, 200);
// GATE
18
IPAddress subnet(255, 255, 255, 0);
// MASK
19
IPAddress myDns(8, 8, 8, 8);
// DNS (google pub)
20
EthernetServer server(80);
// Web server PORT
21
String HTTP_req;
22
23
unsigned
int
UdpCommandPort = 88;
// local UDP port listen to command
24
// #define UDP_TX_PACKET_MAX_SIZE 30 // MIN 30
25
// unsigned char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
26
unsigned
char
packetBuffer[30];
//buffer to hold incoming packet,
27
int
UDPpacketSize;
28
EthernetUDP UdpCommand;
// An EthernetUDP instance to let us send and receive packets over UDP
29
IPAddress BroadcastIP(0, 0, 0, 0);
// Broadcast IP address
30
int
BroadcastPort = 88;
// destination broadcast packet port
31
IPAddress RemoteSwIP(0, 0, 0, 0);
// remote UDP IP switch - set from UDP DetectRemote array
32
int
RemoteSwPort = 0;
// remote UDP IP switch port
33
byte
DetectedRemoteSw[16][5];
// detect by RX broadcast packet - storage by ID (ID=rows)
34
int
BandDecoderChange = 0;
// If band change, send query packet to Remote IP switch
35
long
RemoteSwLatency[2];
// start, stop mark
36
byte
RemoteSwLatencyAnsw = 0;
// answer (offline) detect
37
byte
TxUdpBuffer[10];
38
long
IpTimeout[1][2] = {0, 60000};
// UDP Broadcast packet [8][0-timer/1-timeout]
39
40
bool
EthLinkStatus = 0;
41
long
EthLinkStatusTimer[2]{1500,1000};
42
uint8_t EthChar[8] = {0x0,0x0,0x1f,0x11,0x11,0x1b,0x1f,0x0};
43
#endif
Широковещательный UDP не хорош тем, что нужно смотреть за настройками сети. Вдруг на каком-то шлюзе или маршрутизаторе их прохождение не настроено?
Широковещательный UDP не хорош тем, что нужно смотреть за настройками сети. Вдруг на каком-то шлюзе или маршрутизаторе их прохождение не настроено?
это уже к сетевикам вопросы )))
Посоветовал UDP вместо TCP, чем ещё больше снизил надёжность системы и задействовал ещё пару человек в обслуживании. Это такой конкурс тут у радиогубителей - сделать так, чтобы ломалось не просто от пердежа, а ещё только при мысли о нем? Да тогда просто семь веревок натяните и к рубильникам привяжите. Эффективность даже выше будет.
тогда всегда можно скинуть с себя в зону ответственности сетевиков )))
Грустный, ваще то TCP не лучше UDP. У них просто разное назначение. Если все правильно делать и понимать что делаешь, то команды как раз удобнее передавать используя UDP. Если шлешь большие куски и тебе важен порядок, то с TCP просто будет удобнее работать. Тут дело не в том на каком уровне отправляются данные, а в том как это делается. Кстати UDP пролезет в большее количество дыр. Кроме того, например если делать сетку например на ESP то используя TCP получишь ограничение в 5 нод (если у тебя держатель сети ESP). А с UDP этой траблы не будет.
А с UDP этой траблы не будет.
он еще и внимательно код не смотрел, код не мой, нагло заимствован )))
Мне достаточно того факта, что UDP-пакет вполне "по стандарту" может похерить любой промежуточный хост и об этом никто даже и не узнает. В данном случае UDP тут ничего не улучшает - ни скорости не требуется, ни экономии трафика. А вот потенциальный геморрой в поиске проблем доставки и усложнение на прикладном уровне - извольте, прям на блюде.
Вполне по стандарту и любой TCP пакет так же может быть похерен. Если мы не знаем настройки шлюза, то мы об этом и говорить можем сколь угодно долго и бесполезно.
я бы делал с обратным каналом, там датчик звуковой просится, и контроль прохождения пакетов, раз в пять минут - состояние канала, а на запрос включения (изменение состояния ) сразу и вэбформы тут вообще лишние
Сообщение для Gri_Gori_Y:
Это раздел для размещения платных заказов ("Ищу исполнителя"). Не нужно писать в чужие темы свои вопросы, не касающиеся этих платных заказов. Да и вообще в чужие темы по совсем другим вопросам (оффтоп). Вам было ранее неоднократно сказано создать СВОЮ тему и вести обсуждение в ней. Если Вам не нужны платные услуги и Вы хотите чему-то научиться, спросить совета - создайте тему в разделе "Песочница". Для этого перейдите в главный раздел "Форумы" и справа вверху нажмите на надпись "Создать материал", затем "Тема форума". Укажите тему Вашего обращения и правильно выберите раздел (Песочница).
Если всё таки понадобятся платные услуги - опять же, создайте СВОЮ тему в разделе "Ищу исполнителя". Не нужно писать в чужих.
Приложите некоторые усилия для правильного размещения ваших сообщений, а не где попало по всему форуму...
01
#include <SPI.h>
02
#include <Ethernet.h>
03
boolean newInfo = 0;
04
byte
mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
05
byte
gateway[] = { 192, 168, 4, 1 };
06
byte
subnet[] = { 255, 255, 255, 0 };
07
IPAddress ip(192,168,4,70);
08
EthernetServer server(80);
09
10
void
setup
()
11
{
12
pinMode(8, OUTPUT);
13
pinMode(6, OUTPUT);
14
pinMode(3, INPUT_PULLUP);
15
digitalWrite(8,HIGH);
16
digitalWrite(6,HIGH);
17
Ethernet.begin(mac, ip);
18
server.begin();
19
Serial
.begin(9600);
20
}
21
22
void
loop
()
23
{
24
EthernetClient client = server.available();
25
if
(client){
26
boolean currentLineIsBlank =
true
;
27
while
(client.connected()) {
28
if
(client.available()) {
29
char
c = client.read();
30
31
if
(newInfo && c ==
' '
){
32
newInfo = 0;
33
}
34
35
if
(c ==
'$'
){
36
37
newInfo = 1;
38
}
39
40
41
if
(newInfo == 1){
42
Serial
.println(c);
43
if
(c ==
'1'
){
44
Serial
.println(
"ON"
);
45
digitalWrite(8, LOW);
46
}
47
48
if
(c ==
'2'
){
49
Serial
.println(
"OFF"
);
50
digitalWrite(8, HIGH);
51
digitalWrite(6,HIGH);
52
}
53
54
if
(c ==
'3'
){
55
Serial
.println(
"ON"
);
56
digitalWrite(6, LOW);
57
}
58
}
59
60
if
(c ==
'\n'
) {
61
currentLineIsBlank =
true
;
62
}
63
else
if
(c !=
'\r'
) {
64
currentLineIsBlank =
false
;
65
}
66
67
if
(c ==
'\n'
&& currentLineIsBlank) {
68
client.println(
"HTTP/1.1 200 OK"
);
69
client.println(
"Content-Type: text/html"
);
70
client.println(
"Connection: close"
);
71
client.println(
"Refresh: 1"
);
72
client.println();
73
client.println(
"<!DOCTYPE HTML>"
);
74
client.println(
"<html>"
);
75
client.print(
"<title>Alarm</title>"
);
76
client.print(
"<H1>Block 1</H1>"
);
77
if
(digitalRead(3))
78
{
79
client.println(
"<h3>OFF</h3>"
);
80
}
81
else
82
{
83
client.println(
"<h3>ON</h3>"
);
84
}
85
client.println(
"<br />"
);
86
client.println(
"</html>"
);
87
break
;
88
}
89
90
}
91
92
}
93
delay(1);
94
client.stop();
95
}
96
}
После добавления еще одного реле и контроля состояния входа все это вешается при работе. Заменил все провода на экранированные и все равно вешается, такое ощущение, что он зависает не из за наводок, а сам по себе. Допустим я уже решил, что оно зависло, а оно за секунду может прощелкать всеми контактами и остановиться. Как ПК виснет, а потом открывает 10 окон сразу. Все я отказался от дальнейшего воплощения, но только для себя может с годами доведу все до ума. Заяву на расчет написал.
Хорошо. Какие вы предлагаете изменения для получения стабильности?
Жаль что сдались. Решение могу предложить.