Invalid conversion from 'char' to 'const char*' [-fpermissive]
Привет, я новичок в кодировании arduino, и я пытаюсь проверить, есть ли в запросе get параметр a, который является строкой "1", но это приводит к ошибке
D:\hforr10\My Documents\Arduino\wifi_control_test\sketch_jul29a\sketch_jul29a.ino: In lambda function:
sketch_jul29a:38:24: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
if(Valuetwo == LedNumon){
^
In file included from C:\Users\hforr10\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Arduino.h:146:0,
from sketch\sketch_jul29a.ino.cpp:1:
C:\Users\hforr10\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/WString.h:190:23: note: initializing argument 1 of 'unsigned char String::operator==(const char*) const'
unsigned char operator ==(const char *cstr) const {
^
Multiple libraries were found for "WiFi.h"
Used: C:\Users\hforr10\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
invalid conversion from 'char' to 'const char*' [-fpermissive]
Мой код следовал этому руководству https://techtutorialsx.com/2017/12/17/esp32-arduino-http-server-getting-query-parameters/ чтобы вернуть параматеров.
код, который выдает ошибку, таков:
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
const char* ssid = "MyNetwrokName";
const char* password = "MyNetworkPassword";
AsyncWebServer server(80);
const int ledPin = 13;
void setup(){
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println(WiFi.localIP());
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
int paramsNr = request->params();
Serial.println(paramsNr);
for(int i=0;i<paramsNr;i++){
AsyncWebParameter* p = request->getParam(i);
Serial.print("Param name: ");
Serial.println(p->name());
Serial.print("Param value: ");
string Valuetwo = p->value();
Serial.print(Valuetwo);
char LedNumon = '1';
if(Valuetwo == LedNumon){ //this line throws the error
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Serial.println("------");
}
request->send(200, "text/plain", "message received");
});
server.begin();
}
void loop(){}
1 ответ
▲ 0
Это должна быть строка, а не строка в строке Valuetwo = p->значение();>
p->значение()>
тип возвращаемого значения-строка. так что
String Valuetwo = p->value();
if (Valuetwo.charAt(0) == '1')
или
const char* Valuetwo = p->value().c_str();
if (Valuetwo[0] == '1')
строка
со строчным регистром s является псевдонимом для символа const*
из стандартных библиотек C, включенных в ядро esp32 Arduino.
,
@Juraj
Смотрите также:
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Питание esp32cam от аккумулятора
- Контакты RX и TX на esp32
- ESP32: отключить детектор отключения питания
В вашем примере отсутствует слишком много кода, чтобы можно было определить, что происходит не так. Вы также не заметили, в какой строке отмечена ошибка, и не включили полный набор сообщений об ошибках из среды разработки Arduino., @Dougie
Я отредактировал вопрос, чтобы включить весь код, и я поместил комментарий в строку, в которой отмечена ошибка, и добавил полное сообщение об ошибке, если это не имеет смысла, дайте мне знать, и я попытаюсь это исправить :)), @Stephanie Forrest
это должна быть "Строка
, а не "строка" в " строковом значении Два = p->значение();
, @JurajВы не можете сравнивать строку и символ. Вам нужно сравнить строку со строкой., @Majenko
Вероятно, вам следует использовать "Valuetwo.compareTo(comparativeString)" для сравнения вашей строки со статической строковой константой. Смешивание строк с массивами символов* обречено на большую, чем ваша доля боли. https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/compareto/, @Dougie
как насчет
const char* Valuetwo = p->значение(); если (Значение два[0] == '1') ...
, @DataFiddler@DataFiddler, p->тип возвращаемого значения () - строка. так что
если (значение два.Чарат(0) == '1')
илиconst char* Значение два = p->значение().c_str(); если (Значение два[0] == '1')
, @Juraj@Juraj : Интересно, спасибо, но почему ошибка " недопустимое преобразование из 'char' в 'const char*' `, @DataFiddler
@DataFiddler, есть "строка" со строчными буквами s. Arduino esp32 имеет стандартные библиотеки C., @Juraj