Arduino uno wifi rev2 застрял внутри цикла
Возможно глупый вопрос, но я не могу понять. При запуске кода ниже. Я хочу открыть коробку, когда код совпадет с кодом в API. Это все работает. Я даже могу закрыть коробку послесловием. Но тогда я застрял в своей петле. после того, как окно закрыто, я хочу, чтобы на экране было написано, что окно закрыто, а затем я хочу, чтобы цикл void() снова запускался. поэтому мой экран снова запрашивает код. Я пытался использовать перерыв и выход, но пока не повезло. весь код:
/* hardware libraries*/
#include <Key.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
/*Wifi and request libraries*/
#include <SPI.h>
#include <WiFiNINA.h>
#include <ArduinoJson.h>
#define HIGH 0x1
#define LOW 0x0
/* wifi credentials*/
char ssid[] = "ssid"; // SSID вашей сети (имя)
char pass[] = "password"; // ваш сетевой пароль (используйте для WPA или используйте в качестве ключа для WEP)
int keyIndex = 0;
int status = WL_IDLE_STATUS;
char server[] = "parcelbox.1819.caro.deweze.nxtmediatech.eu";
// Инициализируем клиентскую библиотеку Ethernet
// с IP-адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2); // ЖК-объект
Servo myservo; //сервообъект
boolean boxOpenend = false ;
/* Keypad*/
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {3, 4, 5, 6};
byte colPins[COLS] = {9, 8, 7};
Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String value = "";
void setup() {
lcd.begin(); // запуск ЖК
Serial.begin(9600);
myservo.attach(A0); // прикрепляем сервопривод к штифту
lcd.backlight(); // начальный экранный свет
/* connect to wifi */
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
// проверяем модуль WiFi:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// не продолжать
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < "1.0.0") {
Serial.println("Please upgrade the firmware");
}
// попытка подключения к сети Wi-Fi:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2. Измените эту строку, если используете открытую сеть или сеть WEP:
status = WiFi.begin(ssid, pass);
// ждем 10 секунд для соединения:
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop() {
lcd.clear();
lcd.print("Geef bestelcode");
char customKey = customKeypad.getKey(); // получаем нажатие клавиши
value = value + String(customKey);
lcd.setCursor(0, 1);
lcd.print(value);
if (customKey == '#') {
String response_Status = "";
Serial.println("\nStarting connection to server...");
// если вы установили соединение, сообщите об этом через последовательный порт:
if (client.connect(server, 80)) {
value.remove(16);
Serial.println(value);
Serial.println("connected to server");
// Делаем HTTP-запрос:
client.println("GET /api/boxes/1444/code/" + value + " HTTP/1.1");
client.println("Host: parcelbox.1819.caro.deweze.nxtmediatech.eu");
client.println("Connection: close");
client.println();
}
// если есть доступные входящие байты
// с сервера, прочитать их и распечатать:
StaticJsonBuffer<500> jsonBuffer;
while (client.connected()) {
String response = "";
bool begin = false;
while (client.available() || !begin) {
char c = client.read();
if (c == '{') {
begin = true;
}
if (begin) response += (c);
if (c == '"}') {
break;
}
delay(1);
}
int start = response.indexOf("status\":\"") + 11;
int end = start + 3;
response_Status = response.substring(start, end);
JsonObject& root = jsonBuffer.parseObject(response);
if (!root.success())
{
Serial.print("parseObject(");
Serial.print(response);
Serial.println(") failed");
break;
}
Serial.println(response_Status);
if (response_Status == "200") {
Serial.println("200");
boxOpenend = true;
while (boxOpenend) {
lcd.clear();
lcd.print("Box openend ,press");
lcd.setCursor(0, 1);
lcd.print(" * to close");
myservo.write(0);// повернуть сервопривод, чтобы открыть
delay(175);
char key = customKeypad.getKey(); // получаем нажатие клавиши
//значение = значение + строка (ключ);
if (key == '*') {
myservo.write(90); // повернуть сервопривод, чтобы заблокировать
value = ""; // очистить строку
boxOpenend = false;
}
// коробка возвращается, но я застрял в этом цикле, потому что ЖК-экран остается на «Ящик открыт, нажмите *, чтобы закрыть
}
}
else if (response_Status != "200") {
Serial.println("not 200");
lcd.clear();
lcd.print("wrong code or");
lcd.setCursor(0, 1);
lcd.print("already deliverd");
delay(175);
value = "";
exit;
}
// то же самое
break ;
}
// если сервер отключен, останавливаем клиент:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting from server.");
client.stop();
// ничего не делать навсегда:
while (true);
}
exit;
}
if (customKey == '*') {
myservo.write(90); // повернуть сервопривод, чтобы заблокировать
value = ""; // очистить строку
}
delay(175); // для оптимального просмотра ЖК-экрана
}
void printWifiStatus() {
// вывести SSID сети, к которой вы подключены:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// напечатать IP-адрес вашей платы:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// вывести мощность принятого сигнала:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Здесь код застревает. Он продолжает показывать открытое окно, нажмите *, чтобы закрыть. даже когда я нажимаю * и окно закрывается, оно продолжает говорить это
while (boxOpenend) {
lcd.clear();
lcd.print("Box openend ,press");
lcd.setCursor(0, 1);
lcd.print(" * to close");
myservo.write(0);// повернуть сервопривод, чтобы открыть
delay(175);
char key = customKeypad.getKey(); // получаем нажатие клавиши
//значение = значение + строка (ключ);
if (key == '*') {
myservo.write(90); // повернуть сервопривод, чтобы заблокировать
value = ""; // очистить строку
boxOpenend = false;
}
// box gaat terug toe maar ik blijf in deze loop zitten want lcd scherm blijft staan op "Box geopend, druk * om te sluiten
}
}
Возможно, у него есть простое решение, о котором я просто не думаю, но оно меня очень беспокоит!
ОБНОВЛЕНИЕ. Мы немного продвинулись в выяснении причин, по которым это не работает. код, который мы запускаем сейчас:
/* hardware libraries*/
#include <Key.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
/*Wifi and request libraries*/
#include <SPI.h>
#include <WiFiNINA.h>
#include <ArduinoJson.h>
#define HIGH 0x1
#define LOW 0x0
/* wifi credentials*/
char ssid[] = "XXXXXXX"; // SSID вашей сети (имя)
char pass[] = "XXXXXXX"; // ваш сетевой пароль (используйте для WPA или используйте в качестве ключа для WEP)
int keyIndex = 0;
int status = WL_IDLE_STATUS;
char server[] = "parcelbox.1819.caro.deweze.nxtmediatech.eu";
// Инициализируем клиентскую библиотеку Ethernet
// с IP-адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2); // ЖК-объект
Servo myservo; //сервообъект
boolean boxOpenend = false ;
/* Keypad*/
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {3, 4, 5, 6};
byte colPins[COLS] = {9, 8, 7};
Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String value = "";
void setup() {
lcd.begin(); // запуск ЖК
Serial.begin(9600);
myservo.attach(A0); // прикрепляем сервопривод к штифту
lcd.backlight(); // начальный экранный свет
/* connect to wifi */
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
// проверяем модуль WiFi:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// не продолжать
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < "1.0.0") {
Serial.println("Please upgrade the firmware");
}
// попытка подключения к сети Wi-Fi:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2. Измените эту строку, если используете открытую сеть или сеть WEP:
status = WiFi.begin(ssid, pass);
// ждем 10 секунд для соединения:
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop() {
lcd.clear();
lcd.print("Geef bestelcode");
char customKey = customKeypad.getKey(); // получаем нажатие клавиши
value = value + String(customKey);
lcd.setCursor(0, 1);
lcd.print(value);
if (customKey == '#')
{
Serial.println("PRESSED #");
String response_Status = "";
Serial.println("\nStarting connection to server...");
Serial.println("RESULT OF CLIENT.CONNECT()");
Serial.println(client.connect(server, 80));
// если вы установили соединение, сообщите об этом через последовательный порт:
if (client.connect(server, 80) == 1)
{
Serial.println("IK BEN HIER");
value.remove(4);
Serial.println(value);
Serial.println("connected to server");
// Делаем HTTP-запрос:
client.println("GET /api/boxes/1444/pin/" + value + " HTTP/1.1");
client.println("Host: parcelbox.1819.caro.deweze.nxtmediatech.eu");
client.println("Connection: close");
client.println();
}
else
{
Serial.println("client.connect() not successfull");
}
// если есть доступные входящие байты
// с сервера, прочитать их и распечатать:
StaticJsonBuffer<500> jsonBuffer;
if (client.connected())
{
Serial.println("CLIENT CONNECTED");
String response = "";
bool begin = false;
while (client.available() || !begin) {
char c = client.read();
if (c == '{') {
begin = true;
}
if (begin) {
response += (c);
}
if (c == '"}') {
break;
}
delay(1);
}
int start = response.indexOf("status\":\"") + 11;
int end = start + 3;
response_Status = response.substring(start, end);
Serial.println(response_Status);
// ответ успешен
if (response_Status == "200")
{
Serial.println("RESPONSE 200");
Serial.println("response state == 200");
// Сначала открываем коробку
// 0° означает открытое
Serial.println("OPEN BOX");
myservo.write(0);
delay(175);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Box opened ,press");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" * to close");
}
else
{
Serial.println("RESPONSE NOT 200");
Serial.println("not 200");
lcd.clear();
lcd.print("Foute code of");
lcd.setCursor(0, 1);
lcd.print("al afgeleverd");
delay(175);
}
}
// сброс значения
value = "";
}
// заблокировать ящик и сбросить значение
if (customKey == '*')
{
Serial.println("CLOSE BOX");
myservo.write(90);
value = "";
client.stop();
}
delay(175); // для оптимального просмотра ЖК-экрана
}
void printWifiStatus() {
// вывести SSID сети, к которой вы подключены:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// напечатать IP-адрес вашей платы:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// вывести мощность принятого сигнала:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
это последовательный вывод:
Понятно, что при первом запросе проверка кода проходит, но когда вы пытаетесь второй раз, он выходит пустым. Мы провели небольшое исследование и обнаружили, что в некоторых случаях сервопривод может плохо повлиять на запрос. Просто не уверен, что это правильно и как это исправить
@imkeVr, 👍2
Обсуждение2 ответа
Несмотря на то, что я не могу проверить свой код, я попытался изменить вашу программу. Вероятно, он не компилируется, и вам нужно внести некоторые исправления. Я изменил его так, как ожидал, что он сработает, и, надеюсь, я понял ваши намерения.
По крайней мере, мы могли бы использовать эту версию в качестве основы для совместной разработки рабочей версии.
#include <Key.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <SPI.h>
#include <WiFiNINA.h>
#include <ArduinoJson.h>
#define HIGH 0x1
#define LOW 0x0
char ssid[] = "ssid";
char pass[] = "password";
int keyIndex = 0;
int status = WL_IDLE_STATUS;
char server[] = "parcelbox.1819.caro.deweze.nxtmediatech.eu";
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
/* Keypad*/
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {3, 4, 5, 6};
byte colPins[COLS] = {9, 8, 7};
Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String value = "";
void setup()
{
lcd.begin();
Serial.begin(9600);
myservo.attach(A0);
lcd.backlight();
if (WiFi.status() == WL_NO_MODULE)
{
Serial.println("Communication with WiFi module failed!");
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < "1.0.0") { Serial.println("Please upgrade the firmware"); }
// попытка подключения к сети Wi-Fi:
while (status != WL_CONNECTED)
{
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop()
{
lcd.clear();
lcd.print("Geef bestelcode");
char customKey = customKeypad.getKey();
value = value + String(customKey);
lcd.setCursor(0, 1);
lcd.print(value);
if (customKey == '#')
{
String response_Status = "";
Serial.println("\nStarting connection to server...");
if ( client.connect( server, 80 ) )
{
value.remove(16);
Serial.println(value);
Serial.println("connected to server");
// Делаем HTTP-запрос:
client.println("GET /api/boxes/1444/code/" + value + " HTTP/1.1");
client.println("Host: parcelbox.1819.caro.deweze.nxtmediatech.eu");
client.println("Connection: close");
client.println();
}
StaticJsonBuffer<500> jsonBuffer;
if ( client.connected() )
{
String response = "";
bool begin = false;
// Я не понимаю, почему вы должны использовать || ! начинать
// Если у клиента нет доступного контента, вы не можете прочитать некоторые
// Не имеет значения, имеет ли значение begin значение true или false.
// Или я что-то пропустил?
while ( client.available() || ! begin )
{
char c = client.read();
if ( c == '{' ) { begin = true; }
if ( begin ) { response += (c); }
if ( c == '"}' ) { break; }
delay(1);
}
// Зачем вы разбираете текст json для специального
// атрибут, а затем снова разобрать его в объект json
// где можно прочитать этот атрибут?
int start = response.indexOf("status\":\"") + 11;
int end = start + 3;
response_Status = response.substring(start, end);
// Я закомментировал это, потому что вы не используете корневую переменную
// в следующем коде
// JsonObject& корень = jsonBuffer.parseObject(ответ);
// если (!root.success())
// {
// Serial.print("parseObject(");
// Serial.print(ответ);
// Serial.println(") не удалось");
// перерыв;
// }
Serial.println(response_Status);
if (response_Status == "200")
{
Serial.println("response state == 200");
// Сначала открываем коробку
// 0° означает открытое
myservo.write(0);
delay(175);
// Затем сообщаем пользователю, как его закрыть
lcd.clear();
// Я добавил позиционирование курсора.
// Насколько я знаю, clear не сбрасывает курсор.
lcd.setCursor(0, 0);
lcd.print("Box openend ,press");
lcd.setCursor(0, 1);
lcd.print(" * to close");
// затем проверяем, хочет ли пользователь закрыть его
char key;
do
{
key = customKeypad.getKey();
if (key == '*')
{
// 90° означает блокировку
myservo.write(90);
value = "";
}
}
while( key != '*' );
}
else
{
// Я заменил else if на простой if
// as (response_Status != "200") - это еще случай
// из (response_Status == "200")
Serial.println("response state != 200");
lcd.clear();
// добавлено "установить курсор"
lcd.setCursor(0, 0);
lcd.print("wrong code or");
lcd.setCursor(0, 1);
lcd.print("already deliverd");
delay(175);
value = "";
}
// я превращаю цикл while в блок if
// поэтому вам не нужен перерыв; здесь
}
// Здесь вы можете войти в состояние остановки без причины.
// Даже вы не собираетесь здесь останавливаться.
// если (!client.connected())
// {
// Serial.println();
// Serial.println("отключение от сервера.");
// клиент.стоп();
//
// // ничего не делать навсегда:
// пока (истина);
// }
}
if (customKey == '*')
{
// 90° означает блокировку
myservo.write(90);
value = "";
}
// для оптимального просмотра ЖК-экрана
delay(175);
}
void printWifiStatus()
{
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Это изменение связано с обновленной версией вашей программы.
Если вы закрываете окно нажатием клавиши, вы также останавливаете клиент с последней строкой.
Удалите следующую строку из программы.
// заблокировать ящик и сбросить значение
if (customKey == '*')
{
Serial.println("CLOSE BOX");
myservo.write(90);
value = "";
// удалите это, так как вы не можете подключиться к остановленному клиенту
// клиент.стоп();
}
Я попробовал ваш код, он отлично строится, я мог открыть коробку и закрыть ее, но на ЖК-дисплее продолжает отображаться «коробка открыта, нажмите *, чтобы закрыть». Ваш код намного читабельнее и структурированнее моего! я могу многому научиться из этого, @imkeVr
Спасибо за ответ и расширение вашего вопроса. Посмотрев на свой код, я увидел, что совершил ужасную ошибку. Возможно, я слишком долго программировал на JavaScript. В JS "" и '' одно и то же. В C/C++ это что-то совершенно другое. Строка while(key != "*")
всегда истинна, и Цикл никогда не покидает. Я исправил это в своем ответе. пока (ключ!= '*')
. Не могли бы вы также изменить его в своей программе и попробовать эту версию., @Peter Paul Kiefer
@imkeVr Я только что понял, что теперь вы используете совершенно другой код. И было бы лучше, если бы я заглянул в вывод раньше. ;-) Я не верю, что Сервер нарушил связь с клиентом. Я думаю, что вы просто не в состоянии открыть соединение с клиентом, который остановлен. Я обновлю ответ еще раз. ;-), @Peter Paul Kiefer
Я нашел способ, который работает для моей программы. Я поцарапал настройку Wi-Fi в настройке пустоты и переместил ее в свою собственную функцию вне какого-либо цикла или настройки. Таким образом, я мог бы вызвать функцию и восстановить соединение внутри самого цикла пустоты. Теперь он работает как надо. Спасибо за всю помощь, я многому научился, делая это!, @imkeVr
@imkeVr Было приятно с вами работать. Сначала я хотел предложить то, что вы сейчас сделали сами, но я не хотел слишком усложнять свой ответ. И теперь я вижу, что ты справился с этим, используя ту немногочисленную информацию, которую я тебе дал. Это один из моментов, который заставляет меня отвечать на вопросы по SE. И я мог представить, что, если продолжать быстро учиться, наш разговор в будущем будет с измененными рулонами. Я спрашиваю, а ты отвечаешь. Желаю вам и вашему партнеру успехов в проекте., @Peter Paul Kiefer
/* hardware libraries*/
#include <Key.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
/*Wifi and request libraries*/
#include <SPI.h>
#include <WiFiNINA.h>
#include <ArduinoJson.h>
#define HIGH 0x1
#define LOW 0x0
/* wifi credentials*/
char ssid[] = "sidd"; // SSID вашей сети (имя)
char pass[] = "pass"; // ваш сетевой пароль (используйте для WPA или используйте в качестве ключа для WEP)
int keyIndex = 0;
int status = WL_IDLE_STATUS;
char server[] = "parcelbox.1819.caro.deweze.nxtmediatech.eu";
// Инициализируем клиентскую библиотеку Ethernet
// с IP-адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2); // ЖК-объект
Servo myservo; //сервообъект
boolean boxOpenend = false ;
/* Keypad*/
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {3, 4, 5, 6};
byte colPins[COLS] = {9, 8, 7};
Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String value = "";
void setup() {
lcd.begin(); // запуск ЖК
Serial.begin(9600);
myservo.attach(A0); // прикрепляем сервопривод к штифту
lcd.backlight(); // начальный экранный свет
/* connect to wifi */
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
/*
// проверяем модуль WiFi:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// не продолжать
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < "1.0.0") {
Serial.println("Please upgrade the firmware");
}
// попытка подключения к сети Wi-Fi:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2. Измените эту строку, если используете открытую сеть или сеть WEP:
status = WiFi.begin(ssid, pass);
// ждем 10 секунд для соединения:
delay(10000);
}
Serial.println("Connected to wifi");*/
createConnection();
}
void loop() {
lcd.clear();
lcd.print("Bestelcode / pin");
char customKey = customKeypad.getKey(); // получаем нажатие клавиши
value = value + String(customKey);
lcd.setCursor(0, 1);
lcd.print(value);
if (customKey == '#')
{
createConnection();
Serial.println("PRESSED #");
String response_Status = "";
Serial.println("\nStarting connection to server...");
Serial.println("RESULT OF CLIENT.CONNECT()");
Serial.println(client.connect(server, 80));
// если вы установили соединение, сообщите об этом через последовательный порт:
if (client.connect(server, 80) == 1)
{
int valueLen = value.length();
if(valueLen == 5){
Serial.println("IK BEN een pin ");
value.remove(4);
Serial.println(value);
Serial.println("connected to server");
// Делаем HTTP-запрос:
client.println("GET /api/boxes/2025/pin/" + value + " HTTP/1.1");//1444
client.println("Host: parcelbox.1819.caro.deweze.nxtmediatech.eu");
client.println("Connection: close");
client.println();
}
if(valueLen ==17){
Serial.println("IK BEN een bestelcode");
value.remove(16);
Serial.println(value);
Serial.println("connected to server");
// Делаем HTTP-запрос:
client.println("GET /api/boxes/2025/code/" + value + " HTTP/1.1");//1444
client.println("Host: parcelbox.1819.caro.deweze.nxtmediatech.eu");
client.println("Connection: close");
client.println();
}
else{
Serial.println("invalid amount of numbers code");
/*lcd.clear();
lcd.print("ongeldige code");*/
}
}
else
{
Serial.println("client.connect() not successfull");
}
// если есть доступные входящие байты
// с сервера, прочитать их и распечатать:
StaticJsonBuffer<500> jsonBuffer;
if (client.connected())
{
Serial.println("CLIENT CONNECTED");
String response = "";
bool begin = false;
while (client.available() || !begin) {
char c = client.read();
if (c == '{') {
begin = true;
}
if (begin) {
response += (c);
}
if (c == '"}') {
break;
}
delay(1);
}
int start = response.indexOf("status\":\"") + 11;
int end = start + 3;
response_Status = response.substring(start, end);
Serial.println(response_Status);
// ответ успешен
if (response_Status == "200")
{
Serial.println("RESPONSE 200");
Serial.println("response state == 200");
// Сначала открываем коробку
// 0° означает открытое
Serial.println("OPEN BOX");
myservo.write(0);
delay(175);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Box open ,druk");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("* om te sluiten");
delay(5000);
}
else
{
Serial.println("RESPONSE NOT 200");
Serial.println("not 200");
lcd.clear();
lcd.print("Foute code of");
lcd.setCursor(0, 1);
lcd.print("al geleverd");
delay(2500);
}
}
// сброс значения
value = "";
}
// заблокировать ящик и сбросить значение
if (customKey == '*')
{
Serial.println("CLOSE BOX");
myservo.write(90);
value = "";
client.stop();
}
delay(175); // для оптимального просмотра ЖК-экрана
}
void createConnection() {
// Эта новая строка необходима для разрыва предыдущего соединения, иначе
// он попытается использовать старое соединение и никогда не переподключится в случае сбоя соединения
status = WiFi.disconnect();
// попытка подключения к сети Wi-Fi:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2. Измените эту строку, если используете открытую сеть или сеть WEP:
status = WiFi.begin(ssid, pass);
// ждем 10 секунд для соединения:
delay(10);
}
// теперь вы подключены, поэтому распечатайте статус:
printWifiStatus();
}
void printWifiStatus() {
// вывести SSID сети, к которой вы подключены:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// напечатать IP-адрес вашей платы:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// вывести мощность принятого сигнала:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Мне пришлось переписать мое Wi-Fi-соединение в функцию вне моей настройки. Потому что программа только установила соединение в начале и закрыла его после моего первого запроса. Предоставив ему собственную функцию, я мог вызывать его внутри своего цикла всякий раз, когда пользователь вводил код, программа могла восстановить соединение. Теперь моя программа работает так, как мне нужно.
- Мигните светодиодом 5 раз с помощью цикла for
- Чтение нескольких аналоговых входных контактов
- Ошибка при загрузке кода в esp8266 через arduino (FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error)))
- Как остановить цикл в последовательном мониторе?
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
- TCCR1B' не был объявлен в этой области
- Как запустить функцию каждый 10-й раз через цикл?
Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/103266/discussion-on-question-by-imkevr-arduino-uno-wifi-rev2-stuck-inside-loop)., @VE7JRO