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
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);
}
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);
}
}