с сишкой таких проблем бы не было, на ардуине у меня даже коды из примеров не работают, а мне всего-то строку разбить надо
это просто LOL
Дессан, не позорьтесь. "Язык ардуино" - это самый натуральный С/С++. А то, что мы обсуждаем в вашей ветке - это вообще чистый Си, никаким "ардуино" тут и не пахнет
Ну, хрен с Вами. Я сейчас в командировке, торчу один в гостинице и делать мне нехрен.
В общем, от Вас не просят никакой особой логики. От Вас просят словами написать что именно Вы собираетесь делать. Просто словами написать. Не вываливать Ваши идеи как это облечь в операции языка и функции волшебных библиотек, а написать словами. Если Вы не можете это сделать, то никакие библиотеки Вам не помогут.
Ну чего тут сложного, ну смотрите. Ставим простую задачу: принимаем из Serial символы по одному, пока не накопится строка (признаком конца строки является символ '\n' или '\r'). Как только строка пришла – печатаем её и принимаем следующую. Пока же строка приходит (посимвольно) занимаемся своими делами, т.е. не блокируем программу ожиданием конца строки. Пустые строки «съедаем».
Ну и давайте расписывать:
ПРИ КАЖДОМ ПРОХОЖДЕНИИ loop
ЕСЛИ пришёл символ ТО
Читаем пришедший символ
ЕСЛИ это символ конца строки
ЕСЛИ принятая строка не пуста
Передаём принятую строку на обработку (печать)
КОНЕЦ ЕСЛИ
Обнуляем принимающий буфер (для приёма новой строки)
ИНАЧЕ
Запоминаем принятый символ в буфере
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
Вот собственно и всё. Мы описали как мы будем принимать строки посимвольно, а по мере прихода целой строки их обрабатывать (печатать).
Теперь, когда словами написано, код пишется на раз, просто записью этих слов на языке программирования. Вот смотрите. Я тут всю работу со строкой в отдельную функцию выделил, но в целом тут написано РОВНО тоже, что и выше. Всё работает, запускайте, смотрите.
#define BUF_LEN 200 // Длина буфера
char buffer [BUF_LEN];
bool receiveCharacter(void) {
static int bufPtr = 0; // Указатель следующего свобоного байта в приёмном буфере
if (! Serial.available()) return false; // Если ничего не пришло, выходим сразу (строка не готова)
const char c = Serial.read(); // Читаем символ
if (c == '\n' || c == '\r') { // Если прочитанный символ - конец строки, то
const bool retVal = bufPtr > 0; // запоминаем, была ли у нас строка
buffer[bufPtr] = 0; // пишем в буфер признак конца
bufPtr = 0; // В следующий раз начнём с начала
return retVal; // Строка сформирована
}
buffer[bufPtr++] = c; // запоминаем вновь полученный символ
if (bufPtr == BUF_LEN) {/* что-то делаем */} // Реакция на переполнение буфера (пока никакой)
return false; // строка не готова
}
void setup(void) {
Serial.begin(57600);
}
//
// Здесь мы обязательно дергаем receiveCharacter
// он получит символ (если пришёл) и вернёт истину
// если строка полностью пришла. Пока он не вернул
// истину не паримся. а занимаемся своими делами
//
void loop(void) {
if (receiveCharacter()) Serial.println(buffer);
// ...
// что-то нужное и важное
}
Теперь для разминки попробуйте усовершенствовать код так, чтобы он принимал только строки, начинающиеся со слова GET, а другие съедал. Опять же, сначала распишите словами, потому уж беритесь программировать
Спасибо огромное за код, ещё не проверял, отпишусь позже. Честно, не знаю как эту функцию теперь всунуть. Сразу хочу написать по поводу логики.
В жизни такую логику не придумал бы...Вот наша строка:
GET /?username=Dessan&password=12345 HTTP/1.1/n/r (надеюсь /n/r я верно поставил)
/r - отсутствие символа, /n - новая строка
ПРИ КАЖДОМ ПРОХОЖДЕНИИ loop
ЕСЛИ пришёл символ ТО
Читаем пришедший символ
ЕСЛИ это символ конца строки
ЕСЛИ принятая строка не пуста
Передаём принятую строку на обработку (печать)
КОНЕЦ ЕСЛИ
Обнуляем принимающий буфер (для приёма новой строки)
ИНАЧЕ
Запоминаем принятый символ в буфере
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
Летит символ G: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ E: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ T: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ ПРОБЕЛ: конец строки?-нет - Запоминаем принятый символ в буфере
далее все символы влетают так же и проходят проверку аж до /n: /?username=Dessan&password=12345 HTTP/1.1/n
Я до сих пор не догоняю где происходит фильтрация...Вы могли бы пояснить на примере букв? Понимаю, что я случай тяжёлый, но я очень буду стараться всё понять.
И за несколько часов до Вашего поста я написал вот такой код наивно полагая, что он заработает:
char parsed_Req[100];
boolean run = false;
char tempChar;
String Bufer;
int i = 0;
...
void loop() {
client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
tempChar = client.read();
if (tempChar == '?'){ // если символ '?' (начинаются нужные нам данные) то run становится True
run = true;
}
if((tempChar != '=') && (tempChar != '&') && (tempChar != ' ') && (run = true)){
Bufer += tempChar; // записываем все символы что удовлетворяют условию в буфер
}
if ((tempChar == '=') || (tempChar == '&')){ // если появился символ = или &
parsed_Req[i] = Bufer; //присваиваем содержимое буфера нашему массиву под нужным индексом
Bufer = " "; //обнулили буфер
i+= 1; // прибавили счётчик индекса
//break; //не знаю нужно прерывать код или нет и вообще break ли прерывает
}
if (tempChar == ' '){ //если появился символ Пробела
parsed_Req[i] = Bufer; //присваиваем содержимое буфера нашему массиву под нужным индексом
Bufer = " "; //обнулили буфер
i = 0; //обнулили счётчик на всякий случай
run = false; // флажок run выключаем
//break;
}
}
}
}
}// end while
Serial.println(parsed_Req);
Serial.println(parsed_Req[0]);
Serial.println(parsed_Req[1]);
Serial.println(parsed_Req[2]);
Serial.println(parsed_Req[3]);
...
И всё посыпалось на типах данных, как тип данных не меняю - новая ошибка...Я таких ругательств от ардуино не ожидал. Идея была в том, чтоб создать массив и распарсенные куски строк вписывать в массив под нужным мне индексом. А потом их от туда под индексом и извлекать. Сделал на if как самый простой и понятный вариант.
Dessan, как только Вы написали слово while, Вы тут же тормознули весь остальной код. Потом не спрашивайте "А почему у меня во время приёма данных кнопки не реагируют?". Я Вам показал как делать без него, есть символ - получаем, нету - в другой раз получим и никаких тормозов.
И как там, ардуины уже строем по плацу ходят, бордюры красят, нужники драют?
Я туда еще не добрался. Приехал сегодня, т.к. завтра ещё кое с кем надо пересечься, а мероприятие в "Эре" начинается во вторник. Вот тогда и посмотрю.
Но не думаю, что ардуины. Насколько я знаю, эти ребята на такое не размениваются. Там всё по взрослому: "клавиатура компьютерная - 200 тыс. руб.", "монитор компьютерный 14" - 980 тыс. руб." (зато с военной приёмкой и защищённые от вражеских сниферов) Какие уж тут ардуины. Там если кто и драит, так совсем другие устройства. Вояки - они во всём мире одинаковые.
Так проверяю строку, если пришёл символ '?' , то ставим run = true , чтоб знатьс какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
Так проверяю строку, если пришёл символ '?' , то ставим run = true , чтоб знатьс какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
Dessan, как только Вы написали слово while, Вы тут же тормознули весь остальной код. Потом не спрашивайте "А почему у меня во время приёма данных кнопки не реагируют?". Я Вам показал как делать без него, есть символ - получаем, нету - в другой раз получим и никаких тормозов.
Да, куда мне там что писать если я типы данных подружить не могу даже. В ардуино есть стандартный пример Ethernet - WebServer, я посмотрел с десяток роликов про эту плату в которых никто ничего не переделывал,а делал из двух плат бутерброд, запускал этот пример, показывал как подключить кабель и заходил через браузер на сервер с гордой надписью "Hello World!" , потом на этой основе другие люди делали уже типа "умные дома" с двумя убогими кнопками и каким-то лейблом, то есть у них сервер отсылал запросы сам себе. Я захотел отправлять запросы не со страницы веб сервера, а с любой страницы браузера формировать Get запрос и обрабатывать его на сервере ардуино. Таких роликов я почему-то не нашёл. Вот Get запрос я сформировал, принял его на ардуино, обрадовался и решил, что распарсить его пятиминутное дело. Вот идёт четвёртый день.
Хотя, может, я с какого-то форума взял код, но что на форумах, что на ютьюб каналах, что в примерах ардуино - эти коды все как под копирку и везде цикл while. И я взял первый попавшийся рабочий код и методом тыка начал его править. Так что никакие while циклы я не создавал, я, наоборот, постирал всё, что считал лишним.
Так проверяю строку, если пришёл символ '?' , то ставим run = true , чтоб знатьс какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
вам пишут не про 16-ую строчку, а про 19-ую
Я тоже про 19. Все 4 условия должны выполниться.
Парни, Вы меня уж не распинайте как студента на экзамене, который ни на одной паре не был. Я пояснил свою логику, я не спорю, что она глупая. Как по-другому построить код?
И Вы мне обещали код в 3-5 строчек одним только чтением и сравнением символов. Очень хочется его увидеть
Не поверите...умный дом. Только не такой как на форумах с кучей кнопок на сером фоне и циферками, а с неограниченным ресурсом html,css и javascript, чтоб сделать красивую панель управления и заходить локально с любого устройства
И Вы мне обещали код в 3-5 строчек одним только чтением и сравнением символов. Очень хочется его увидеть
А чё, то, что я дал нещитова?
Вы мне дали нечто супер крутое на что мне нужно будет выделить день и понять как работает эта функция, потом взять стандартный пример WebServer из ардуино, выкинуть от туда цикл while, прикрутить Вашу функцию и заставить всё это работать.
А перед этим мне нужно на примерах изучить типы переменных и как их "дружить" друг с другом
Теперь дошло!)Это я опечатался...код всё равно не работает из-за неправильного типа данных
вы таким образом "опечатались" уже второй раз. Что говорит о том, что вы плохо понимаете разницу. Ну и вся работа с массивами в вашем последнем коде показывает тоже самое - вы очень мало понимаете даже в том коде, что сами пишете
Сядьте и прочитайте любой учебник по языку - хотя бы первую половину
практически все не так. Вот, например, строка 25 кода - чушь:
parsed_Req[i] = Bufer;
Bufer - это вся строка, а parsed_Req[i] - это один единственный символ. И как вы думаете, что получится. если присвоить строку одному символу? - точно не то, что вы планировали
С планшета управляю через POST запросы программкой HTTP Shortcuts.
Код парсинга, скорее всего кривой, но зато мой.
Проблема в том, что после отправки Post запроса, гирлянда реагирует через 5-7 секунд (примерно). При этом на планшете выходит, что вышел таймаут. Думаю что именно функция парсинга тормозит. Нужно как-то по другому парсинг завершать?
#include <ESP8266WiFi.h>
#define FASTLED_ESP8266_RAW_PIN_ORDER
#include "FastLED.h"
#define NUM_LEDS 50
#define PIN D8
#define COLOR_ORDER RGB
#define lenArr(sizedArr) sizeof(sizedArr)/sizeof(*sizedArr)
#define MODE 0
#define NUM 1
#define BRIGHT 2
#define RED_C 3
#define GREEN_C 4
#define BLUE_C 5
const char* ssid = "LuminousBall";
const char* password = "12345678";
IPAddress local_IP(10, 10, 10, 1);
IPAddress gateway(10, 10, 10, 1);
IPAddress subnet(255, 255, 255, 0);
WiFiServer server(80);
CRGB leds[NUM_LEDS];
const char nameP[][16] {
{"mode"},
{"num"},
{"bright"},
{"red"},
{"green"},
{"blue"}
};
uint8_t const lenNameP = lenArr(nameP);
uint8_t valueP[lenNameP] {};
void parsing(char const c) {
static bool go = 0, nameS=0, valueS=0;
static char nameStr[16];
static uint8_t iNameP=0, value=0, iValue=0;
if (go) {
if (nameS && c != '=') {nameStr[iNameP] = c; iNameP++;} else if (c == '=') nameStr[iNameP] = '\0';
if (valueS && (c != '&' && c != ' ')) value = value * 10 + (uint8_t(c) - 48);
}
if (c == '?') go = 1;
if (go) {
if (c == '?' || c == '&') {nameS = 1; valueS = 0; for (uint8_t i = 0; i < 16; i++) nameStr[i] = ' ';}
if (c == '&' || c == ' ') valueP[iValue] = value;
if (c == '=') {
valueS = 1; nameS = 0; value = 0; iNameP=0;
for (uint8_t i = 0; i < lenNameP; i++)
if (strcmp(nameP[i], nameStr) == 0) { iValue = i; break;}
}
}
if (c == ' ') {go = 0; nameS = 0; valueS = 0;}
}
void allLeds(uint8_t red, uint8_t green, uint8_t blue, uint8_t bright) {
for (uint8_t i=0; i< NUM_LEDS; i++) leds[i] = CRGB(red, green, blue);
FastLED.setBrightness(bright);
}
void setup() {
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP(ssid, password);
server.begin();
FastLED.addLeds<WS2811, PIN>(leds, NUM_LEDS);
}
void loop() {
WiFiClient client = server.available();
while (client.connected())
if (client.available()) parsing(client.read());
if (!client.connected())
client.stop();
if (valueP[MODE]) {
switch (valueP[MODE]) {
case 2: {
allLeds(valueP[RED_C], valueP[GREEN_C], valueP[BLUE_C], valueP[BRIGHT]);
break;
}
}
FastLED.show();
for (uint8_t i = 0; i < lenNameP; i++) valueP[i] = 0;
}
delay(10);
}
что-то как-то сетевые настройки при такой маске у тебя странноваты )))
Это намек на "192.168" и так далее? Так никто не мешает делать как автор (и не запрещает этого!).
У меня действительно была ошибка в 22 строке, уже подредактировал, в маску не попадало. А так у нас на работе и 10.10.10.0 /24 тоже технологическая сеть используется.
Смысл клиента вай-фай понимаешь? Ему подключиться к вайфаю нужно и все. Дальше железки сами общаются по tcp/ip.
Переподключаться к сети вай-фай при отключении вай-фай или потери сигнала железка сама должна. Но можешь для успокоения души конечно налепить что-то еще в лупе, но я лично точно это не знаю.
Смысл клиента вай-фай понимаешь? Ему подключиться к вайфаю нужно и все. Дальше железки сами общаются по tcp/ip.
Переподключаться к сети вай-фай при отключении вай-фай или потери сигнала железка сама должна. Но можешь для успокоения души конечно налепить что-то еще в лупе, но я лично точно это не знаю.
У меня же nodeMCU это точка доступа, а к ней уже клиенты подключаются.
Почитаю. Но уточню, nodeMCU на данный момент у меня точка доступа (позже в планах добавить настройку на подключение к произвольному wifi роутеру), сейчас должно работать без роутера. Веб сервера на nodeMCU не будет, будет управляться POST запросами. Ну это как я вижу, ещё разбираюсь.
b707, у меня не повторяющиеся символы а чередующиеся = и & из постоянных только ? и новая строка
к чему это? не понял
Штудируйте код #10. а ошибки вам подсказал sadman41
Что ж в нём хорошего?Во-первых там блокирующий While, а даже если от него избавиться, то проверка
if
(tempChar ==
'?'
){
будет true только 1 разDessan - вместо того чтоб спорить и задавать все новые и новые глупые вопросы - попытайтесь понять те ответы, что вам уже дали.
Удачи
дессан ставь visualstudio бери книжку кернигана и ричи и учи сишку там а потом велком в ардуинку)
дессан ставь visualstudio бери книжку кернигана и ричи и учи сишку там а потом велком в ардуинку)
с сишкой таких проблем бы не было, на ардуине у меня даже коды из примеров не работают, а мне всего-то строку разбить надо
с сишкой таких проблем бы не было, на ардуине у меня даже коды из примеров не работают, а мне всего-то строку разбить надо
это просто LOL
Дессан, не позорьтесь. "Язык ардуино" - это самый натуральный С/С++. А то, что мы обсуждаем в вашей ветке - это вообще чистый Си, никаким "ардуино" тут и не пахнет
Ну, хрен с Вами. Я сейчас в командировке, торчу один в гостинице и делать мне нехрен.
В общем, от Вас не просят никакой особой логики. От Вас просят словами написать что именно Вы собираетесь делать. Просто словами написать. Не вываливать Ваши идеи как это облечь в операции языка и функции волшебных библиотек, а написать словами. Если Вы не можете это сделать, то никакие библиотеки Вам не помогут.
Ну чего тут сложного, ну смотрите. Ставим простую задачу: принимаем из Serial символы по одному, пока не накопится строка (признаком конца строки является символ '\n' или '\r'). Как только строка пришла – печатаем её и принимаем следующую. Пока же строка приходит (посимвольно) занимаемся своими делами, т.е. не блокируем программу ожиданием конца строки. Пустые строки «съедаем».
Ну и давайте расписывать:
ПРИ КАЖДОМ ПРОХОЖДЕНИИ loop
ЕСЛИ пришёл символ ТО
Читаем пришедший символ
ЕСЛИ это символ конца строки
ЕСЛИ принятая строка не пуста
Передаём принятую строку на обработку (печать)
КОНЕЦ ЕСЛИ
Обнуляем принимающий буфер (для приёма новой строки)
ИНАЧЕ
Запоминаем принятый символ в буфере
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
Вот собственно и всё. Мы описали как мы будем принимать строки посимвольно, а по мере прихода целой строки их обрабатывать (печатать).
Теперь, когда словами написано, код пишется на раз, просто записью этих слов на языке программирования. Вот смотрите. Я тут всю работу со строкой в отдельную функцию выделил, но в целом тут написано РОВНО тоже, что и выше. Всё работает, запускайте, смотрите.
Теперь для разминки попробуйте усовершенствовать код так, чтобы он принимал только строки, начинающиеся со слова GET, а другие съедал. Опять же, сначала распишите словами, потому уж беритесь программировать
Я сейчас в командировке, торчу один в гостинице и делать мне нехрен.
Случайна, не в Н-ске?
Да, ты чо? Нешто я б тебе не позвонил бы. Думаю, мне было бы чем заняться вместо писания тривиальных скетчей :-)
Не, я вот здеся дурочку валяю.
И как там, ардуины уже строем по плацу ходят, бордюры красят, нужники драют?
Командировки - это хорошо, больше денег платят.
Спасибо огромное за код, ещё не проверял, отпишусь позже. Честно, не знаю как эту функцию теперь всунуть. Сразу хочу написать по поводу логики.
В жизни такую логику не придумал бы...Вот наша строка:
GET /?username=Dessan&password=12345 HTTP/1.1/n/r (надеюсь /n/r я верно поставил)
/r - отсутствие символа, /n - новая строка
ПРИ КАЖДОМ ПРОХОЖДЕНИИ loop
ЕСЛИ пришёл символ ТО
Читаем пришедший символ
ЕСЛИ это символ конца строки
ЕСЛИ принятая строка не пуста
Передаём принятую строку на обработку (печать)
КОНЕЦ ЕСЛИ
Обнуляем принимающий буфер (для приёма новой строки)
ИНАЧЕ
Запоминаем принятый символ в буфере
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
Летит символ G: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ E: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ T: конец строки?-нет - Запоминаем принятый символ в буфере
Летит символ ПРОБЕЛ: конец строки?-нет - Запоминаем принятый символ в буфере
далее все символы влетают так же и проходят проверку аж до /n: /?username=Dessan&password=12345 HTTP/1.1/n
Я до сих пор не догоняю где происходит фильтрация...Вы могли бы пояснить на примере букв? Понимаю, что я случай тяжёлый, но я очень буду стараться всё понять.
И за несколько часов до Вашего поста я написал вот такой код наивно полагая, что он заработает:
...
И всё посыпалось на типах данных, как тип данных не меняю - новая ошибка...Я таких ругательств от ардуино не ожидал. Идея была в том, чтоб создать массив и распарсенные куски строк вписывать в массив под нужным мне индексом. А потом их от туда под индексом и извлекать. Сделал на if как самый простой и понятный вариант.
вы неисправимый (подставить самому)
почему в строке 15 вы пишите
а в 19, опять
???
Dessan, как только Вы написали слово while, Вы тут же тормознули весь остальной код. Потом не спрашивайте "А почему у меня во время приёма данных кнопки не реагируют?". Я Вам показал как делать без него, есть символ - получаем, нету - в другой раз получим и никаких тормозов.
И как там, ардуины уже строем по плацу ходят, бордюры красят, нужники драют?
Я туда еще не добрался. Приехал сегодня, т.к. завтра ещё кое с кем надо пересечься, а мероприятие в "Эре" начинается во вторник. Вот тогда и посмотрю.
Но не думаю, что ардуины. Насколько я знаю, эти ребята на такое не размениваются. Там всё по взрослому: "клавиатура компьютерная - 200 тыс. руб.", "монитор компьютерный 14" - 980 тыс. руб." (зато с военной приёмкой и защищённые от вражеских сниферов) Какие уж тут ардуины. Там если кто и драит, так совсем другие устройства. Вояки - они во всём мире одинаковые.
Так проверяю строку, если пришёл символ '?' , то ставим
с какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
run =
true ,
чтоб знатьТак проверяю строку, если пришёл символ '?' , то ставим
с какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
run =
true ,
чтоб знатьвам пишут не про 16-ую строчку, а про 19-ую
Dessan, как только Вы написали слово while, Вы тут же тормознули весь остальной код. Потом не спрашивайте "А почему у меня во время приёма данных кнопки не реагируют?". Я Вам показал как делать без него, есть символ - получаем, нету - в другой раз получим и никаких тормозов.
Да, куда мне там что писать если я типы данных подружить не могу даже. В ардуино есть стандартный пример Ethernet - WebServer, я посмотрел с десяток роликов про эту плату в которых никто ничего не переделывал,а делал из двух плат бутерброд, запускал этот пример, показывал как подключить кабель и заходил через браузер на сервер с гордой надписью "Hello World!" , потом на этой основе другие люди делали уже типа "умные дома" с двумя убогими кнопками и каким-то лейблом, то есть у них сервер отсылал запросы сам себе. Я захотел отправлять запросы не со страницы веб сервера, а с любой страницы браузера формировать Get запрос и обрабатывать его на сервере ардуино. Таких роликов я почему-то не нашёл. Вот Get запрос я сформировал, принял его на ардуино, обрадовался и решил, что распарсить его пятиминутное дело. Вот идёт четвёртый день.
Хотя, может, я с какого-то форума взял код, но что на форумах, что на ютьюб каналах, что в примерах ардуино - эти коды все как под копирку и везде цикл while. И я взял первый попавшийся рабочий код и методом тыка начал его править. Так что никакие while циклы я не создавал, я, наоборот, постирал всё, что считал лишним.
Так проверяю строку, если пришёл символ '?' , то ставим
с какого момента начинать обрабатывать get запрос и записывать символы в буфер. То есть пока true - мы обрабатываем. Совсем плохо?
run =
true ,
чтоб знатьвам пишут не про 16-ую строчку, а про 19-ую
Я тоже про 19. Все 4 условия должны выполниться.
Парни, Вы меня уж не распинайте как студента на экзамене, который ни на одной паре не был. Я пояснил свою логику, я не спорю, что она глупая. Как по-другому построить код?
И Вы мне обещали код в 3-5 строчек одним только чтением и сравнением символов. Очень хочется его увидеть
А что Вы, вообще, за устройство-то делаете?
Не поверите...умный дом. Только не такой как на форумах с кучей кнопок на сером фоне и циферками, а с неограниченным ресурсом html,css и javascript, чтоб сделать красивую панель управления и заходить локально с любого устройства
А... с неограниченным... Blynk, Arduino Mega Server не подходит?
вам пишут не про 16-ую строчку, а про 19-ую
Я тоже про 19. Все 4 условия должны выполниться. Я пояснил свою логику, я не спорю, что она глупая.
пилять... причем тут ваша логика? вы разницу между
run =
true
иrun ==
true
понимаете?А... с неограниченным... Blynk, Arduino Mega Server не подходит?
Не очень впечатляет, интересно сколько оно стоит всё.
Что-то типа https://www.google.com.ua/search?biw=1366&bih=656&tbm=isch&sxsrf=ACYBGNR9UXnQXaQFaWlE-pnOQKIg295QbQ%3A1571600866381&sa=1&ei=4rmsXbTsFsvI6QSsx4OgDw&q=%D1%83%D0%BC%D0%BD%D1%8B%D0%B9+%D0%B4%D0%BE%D0%BC&oq=%D1%83%D0%BC%D0%BD%D1%8B%D0%B9+%D0%B4%D0%BE%D0%BC&gs_l=img.3..35i39l2j0i67l5j0l2j0i67.208776.208776..209450...0.0..0.143.143.0j1......0....1..gws-wiz-img.F1DN99hd9Bs&ved=0ahUKEwi05fm6zavlAhVLZJoKHazjAPQQ4dUDCAc&uact=5#imgrc=vbNJZAlYe7SHOM:
пилять... причем тут ваша логика? вы разницу между
run =
true
иrun ==
true
понимаете?Так вот в чём дело. Первое - присваивание, второе - сравнение
Так вот в чём дело. Первое - присваивание, второе - сравнение
я бы выразился сильнее - в одном случае код рабочий, а в другом - полная туфта
И Вы мне обещали код в 3-5 строчек одним только чтением и сравнением символов. Очень хочется его увидеть
А чё, то, что я дал нещитова?
Теперь дошло!)Это я опечатался...код всё равно не работает из-за неправильного типа данных
Не поверите...умный дом.
Вот это, что-ли?
И Вы мне обещали код в 3-5 строчек одним только чтением и сравнением символов. Очень хочется его увидеть
А чё, то, что я дал нещитова?
Вы мне дали нечто супер крутое на что мне нужно будет выделить день и понять как работает эта функция, потом взять стандартный пример WebServer из ардуино, выкинуть от туда цикл while, прикрутить Вашу функцию и заставить всё это работать.
А перед этим мне нужно на примерах изучить типы переменных и как их "дружить" друг с другом
Теперь дошло!)Это я опечатался...код всё равно не работает из-за неправильного типа данных
вы таким образом "опечатались" уже второй раз. Что говорит о том, что вы плохо понимаете разницу. Ну и вся работа с массивами в вашем последнем коде показывает тоже самое - вы очень мало понимаете даже в том коде, что сами пишете
Сядьте и прочитайте любой учебник по языку - хотя бы первую половину
Не поверите...умный дом.
Вот это, что-ли?
Примерно это, только с проводами в стене.
Баловство, конечно, но почему бы и нет
Ну и вся работа с массивами в вашем последнем коде показывает тоже самое - вы очень мало понимаете даже в том коде, что сами пишете
Мне тут читать на месяц вперёд уже.
А с массивами-то что не так у меня?Или Вы про типы данных?
Да, error: cannot convert 'String' to 'char' in assignment
Буду исправляться
Хорошо, всем спасибо за помощь и участие, эту тему можно закрывать.
Учиться и учиться...
А с массивами-то что не так у меня?
практически все не так. Вот, например, строка 25 кода - чушь:
parsed_Req[i] = Bufer;
Bufer - это вся строка, а parsed_Req[i] - это один единственный символ. И как вы думаете, что получится. если присвоить строку одному символу? - точно не то, что вы планировали
Bufer - это вся строка, а parsed_Req[i] - это один единственный символ.
Как это единственный символ...
Вот же примеры на этом же сайте...
int
myArray[10]={9,3,2,4,3,2,7,8,9,11};
// myArray[0] первый элемент, содержит 9
// myArray[9] последний элемент, содержит 11
// myArray[10] это неверно возможно возвращение произвольного значения из области памяти не относящийся к массиву
Присваиваем значение элементу массива:
mySensVals[0] = 10;
Нулевому элементу значение 10 присвоили. Здесь же не один единственный символ присвоили.
Хорошо, я неверно понял значит. Пошёл читать матчасть.
Да, ты чо? Нешто я б тебе не позвонил бы. Думаю, мне было бы чем заняться вместо писания тривиальных скетчей :-)
Не, я вот здеся дурочку валяю.
А, ну в Анапах-то лучше, канеш. У нас с утра -12 было. Кот морду всеми лапами закрывает, видимо, усы подмерзают-таки.
Пробую связку NodeMCU V3 CH340G + WS2811 (50 шт.).
С планшета управляю через POST запросы программкой HTTP Shortcuts.
Код парсинга, скорее всего кривой, но зато мой.
Проблема в том, что после отправки Post запроса, гирлянда реагирует через 5-7 секунд (примерно). При этом на планшете выходит, что вышел таймаут. Думаю что именно функция парсинга тормозит. Нужно как-то по другому парсинг завершать?
что-то как-то сетевые настройки при такой маске у тебя странноваты )))
что-то как-то сетевые настройки при такой маске у тебя странноваты )))
22 строка там в принципе и не нужна, но исправил.
что-то как-то сетевые настройки при такой маске у тебя странноваты )))
Это намек на "192.168" и так далее? Так никто не мешает делать как автор (и не запрещает этого!).
По теме вопроса - перемести вот это:
В Setup()
что-то как-то сетевые настройки при такой маске у тебя странноваты )))
Это намек на "192.168" и так далее? Так никто не мешает делать как автор (и не запрещает этого!).
У меня действительно была ошибка в 22 строке, уже подредактировал, в маску не попадало. А так у нас на работе и 10.10.10.0 /24 тоже технологическая сеть используется.
У меня действительно была ошибка в 22 строке, уже подредактировал, в маску не попадало.
Видимо редактировал до того как я посмотрел - ничего криминального там не увидел ))
По теме вопроса - перемести вот это:
В Setup()
А ну да, он то и тормозит, ну думаю тут надо по другому.
Так вроде.
Проверил, заработало нормально.
Но в HTTP Shortcuts ошибка unexpected end of stream on connection
Ну если это все в setup() перенес, то работать только 1 раз будет. Надо примерно так:
А мне не нужно только раз, клиент может подключаться несколько раз.
Пробовал тот код, что я привел?
Смысл клиента вай-фай понимаешь? Ему подключиться к вайфаю нужно и все. Дальше железки сами общаются по tcp/ip.
Переподключаться к сети вай-фай при отключении вай-фай или потери сигнала железка сама должна. Но можешь для успокоения души конечно налепить что-то еще в лупе, но я лично точно это не знаю.
Пробовал тот код, что я привел?
Смысл клиента вай-фай понимаешь? Ему подключиться к вайфаю нужно и все. Дальше железки сами общаются по tcp/ip.
Переподключаться к сети вай-фай при отключении вай-фай или потери сигнала железка сама должна. Но можешь для успокоения души конечно налепить что-то еще в лупе, но я лично точно это не знаю.
У меня же nodeMCU это точка доступа, а к ней уже клиенты подключаются.
Ну а причем тут клиент тогда? (особо в код не вчитывался)
http://www.joyta.ru/12628-sozdanie-prostogo-veb-servera-nodemcu-esp8266-v-arduino-ide/
Читай.
Ну а причем тут клиент тогда? (особо в код не вчитывался)
http://www.joyta.ru/12628-sozdanie-prostogo-veb-servera-nodemcu-esp8266-v-arduino-ide/
Читай.
Почитаю. Но уточню, nodeMCU на данный момент у меня точка доступа (позже в планах добавить настройку на подключение к произвольному wifi роутеру), сейчас должно работать без роутера. Веб сервера на nodeMCU не будет, будет управляться POST запросами. Ну это как я вижу, ещё разбираюсь.
Веб сервера на nodeMCU не будет, будет управляться POST запросами.
Тогда заодно еще и читай что такое POST-запросы на WEB-СЕРВЕР. )))