Error conversion from 'char' to 'String' is ambiguous

Hi
I am planning to use MIT app inventor as input for Arduino input via bluetooth serial mode.
App is sending serial data to uno but there is a programming error "conversion from 'char' to 'String' is ambiguous"

data from app to board as follow:

%
2
5
.
1
2
%
2
5
.
1
2
%

and so on...

I dont understand where I am mistaking and need help

My coding as follow:

 */
char Incoming_value = 0;                //Variable for storing Incoming_value
void setup() 
{
  Serial.begin(9600);         //Sets the data rate in bits per second (baud) for serial data transmission
  pinMode(13, OUTPUT);        //Sets digital pin 13 as output pin
}
void loop()
{
    Incoming_value = Serial.read();      //Read the incoming data and store it into variable Incoming_value
    Serial.println(Incoming_value);        //Print Value of Incoming_value in Serial monitor

String readString = Incoming_value;

// Split the readString by a pre-defined delimiter in a simple way. '%'(percentage) is defined as the delimiter in this project.
int delimiter, delimiter_1, delimiter_2, delimiter_3;
delimiter = readString.indexOf("%");
delimiter_1 = readString.indexOf("%", delimiter + 1);
delimiter_2 = readString.indexOf("%", delimiter_1 +1);
delimiter_3 = readString.indexOf("%", delimiter_2 +1);

// Define variables to be executed on the code later by collecting information from the readString as substrings.
String first = readString.substring(delimiter + 1, delimiter_1);
String second = readString.substring(delimiter_1 + 1, delimiter_2);
String third = readString.substring(delimiter_2 + 1, delimiter_3);

}

Incoming_value is declared as a char hence you cannot copy it to a String using

  String readString = Incoming_value;

In any case, each time that line of code is executed a new String variable is created so even if the copy worked it would only have a single character in it. Take a look at the Serial.readString() function

To compound the problem your code does not check whether there is any data available before reading from Serial

The serial input basics tutorial may be of interest.

Hi
or try this way:

String Incoming_value = "";                //Variable for storing Incoming_value
void setup()
{
  Serial.begin(9600);         //Sets the data rate in bits per second (baud) for serial data transmission
  pinMode(13, OUTPUT);        //Sets digital pin 13 as output pin
}
void loop()
{
  Incoming_value = Serial.readString();      //Read the incoming data and store it into variable Incoming_value
  Serial.println(Incoming_value);        //Print Value of Incoming_value in Serial monitor

//  String readString = Incoming_value;

  // Split the readString by a pre-defined delimiter in a simple way. '%'(percentage) is defined as the delimiter in this project.
  int delimiter, delimiter_1, delimiter_2, delimiter_3;
  delimiter = Incoming_value.indexOf("%");
  delimiter_1 = Incoming_value.indexOf("%", delimiter + 1);
  delimiter_2 = Incoming_value.indexOf("%", delimiter_1 + 1);
  delimiter_3 = Incoming_value.indexOf("%", delimiter_2 + 1);

  // Define variables to be executed on the code later by collecting information from the Incoming_value as substrings.
  String first = Incoming_value.substring(delimiter + 1, delimiter_1);
  String second = Incoming_value.substring(delimiter_1 + 1, delimiter_2);
  String third = Incoming_value.substring(delimiter_2 + 1, delimiter_3);

}

Thanks, it's working, I will add now IF condition to have a serial check and will post back with correct code.

readString blocks and waits for Serial timeout. You can reduce the wait with Serial.setTimeout(..) say 2mS for 9600 baud.
Or you can check my tutorial Arduino Software Solutions for a variety of non-blocking solutions to reading from Serial into Strings each with their pros and cons

Thanks, its working like a charme, below code are working, taking values from MIT app bluetooth and coverts it to numeric value.

String Incoming_value = "";                //Variable for storing Incoming_value
void setup()
{
  Serial.begin(9600);         //Sets the data rate in bits per second (baud) for serial data transmission
  pinMode(13, OUTPUT);        //Sets digital pin 13 as output pin
}
void loop()
{
  if (Serial.available() > 0) 
    
{
  Incoming_value = Serial.readString();      //Read the incoming data and store it into variable Incoming_value
  Serial.println(Incoming_value);        //Print Value of Incoming_value in Serial monitor

//  String readString = Incoming_value;

  // Split the readString by a pre-defined delimiter in a simple way. '%'(percentage) is defined as the delimiter in this project.
  int delimiter, delimiter_1, delimiter_2, delimiter_3;
  delimiter = Incoming_value.indexOf("%");
  delimiter_1 = Incoming_value.indexOf("%", delimiter + 1);
  delimiter_2 = Incoming_value.indexOf("%", delimiter_1 + 1);
  delimiter_3 = Incoming_value.indexOf("%", delimiter_2 + 1);

  // Define variables to be executed on the code later by collecting information from the Incoming_value as substrings.
  String first = Incoming_value.substring(delimiter + 1, delimiter_1);
  String second = Incoming_value.substring(delimiter_1 + 1, delimiter_2);
  String third = Incoming_value.substring(delimiter_2 + 1, delimiter_3);

//Converting strings to numbers
float  firstvalue=  first.toFloat();
float  secondvalue= second.toFloat();
float  thirdvalue=  third.toFloat();

Serial.print("first ");
Serial.println(firstvalue);
Serial.print("second ");
Serial.println(secondvalue);
Serial.print("third ");
Serial.println(thirdvalue);

}

}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.