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

Обсуждение

В вашем примере отсутствует слишком много кода, чтобы можно было определить, что происходит не так. Вы также не заметили, в какой строке отмечена ошибка, и не включили полный набор сообщений об ошибках из среды разработки 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


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.

,