There is very likely to be some useful videos on YouTube too - a lot of enthusiasts for App Inventor and Arduino.
Arduino get String and convert to Float
// Juan Antonio Villalpando
// kio4.com
char caracter;
String datos;
String latitud;
String longitud;
float latitud_f;
float longitud_f;
int k1;
int k2;
void setup()
{
Serial.begin(9600);
}
void loop() {
if(Serial.available())
{
caracter = Serial.read();
datos = datos + caracter;
if (caracter == '*') {
Serial.println(datos);
k1 = datos.indexOf(',');
latitud = datos.substring(0, k1);
k2 = datos.indexOf(',', k1+1);
longitud = datos.substring(k1+1, k2);
Serial.print("Latitud = ");
Serial.println(latitud);
Serial.print("Longitud = ");
Serial.println(longitud);
datos = "";
latitud_f = latitud.toFloat();
longitud_f = longitud.toFloat();
Serial.println(latitud_f,6); // 6 decimals
Serial.println(longitud_f,6); // 6 decimals
}
}
}
Thank you all for all your help, but im am realy stuck. It is realy almost the last parameter of my app, and i can't finish it... If someone can add the building blocks and code to arduino it would be very much help for me. As you see i am using the cmd/param method for my other button actions, so it is realy difficult for me to put somewhere the code examples you sudgest.
Enter code here...
#include "MSP.h"byte cmd; // Stores the next byte of incoming data, which is a "command" to do somethingbyte param; // Stores the 2nd byte, which is the command parameter#define AUX1P 3#define AUX2P 4#define AUX3P 5#define AUX4P 6uint16_t AUX1=1000;uint16_t AUX2=1000;uint16_t AUX3=1000;uint16_t AUX4=1000;uint16_t SIGN[8]={0,0,0,0};//uint16_t AUX[4]={1000,1000,1000,1000};uint16_t ROLL=1500, PITCH=1500, TH=1000, YAW=1500;uint16_t aT=1000;uint16_t aR=1000;uint16_t aP=1000;uint16_t aY=1000;MSP msp;void setup(){Serial.begin(115200);Serial1.begin(115200); //MSPSerial3.begin(57600); //BTmsp.begin(Serial1);pinMode(AUX1P, INPUT);pinMode(AUX2P, INPUT);pinMode(AUX3P, INPUT);pinMode(AUX4P, INPUT);digitalWrite(AUX1P, LOW );digitalWrite(AUX2P, LOW );digitalWrite(AUX3P, LOW );digitalWrite(AUX4P, LOW );}void loop(){if ( Serial3.available() ) // if data is available to read{cmd = Serial3.read(); // read it and store it in 'cmd'//Serial.println(cmd);//delay(20);// Data format is byte 1 = command, byte 2 = parameter};switch ( cmd ) {case 1:// First byte contains a generic "command" byte. We arbitrarily defined '1' as the command to then check the 2nd parameter byte// User can additional commands by adding case 2, 3, 4, etc{// read the parameter byteparam = Serial3.read();switch (param){case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:digitalWrite(AUX1P, HIGH );//delay(20);break;case 8:digitalWrite(AUX1P, 0 );//delay(20);break;case 9:digitalWrite(AUX2P, HIGH );//delay(20);break;case 10:digitalWrite(AUX2P, 0 );// delay(20);break;case 11:digitalWrite(AUX3P, HIGH );//delay(20);break;case 12:digitalWrite(AUX3P, 0 );//delay(20);break;case 13:digitalWrite(AUX4P, HIGH );//delay(20);break;case 14:digitalWrite(AUX4P, 0 );//delay(20);break;default: break; // do nothing} // switch (param)} // switch (cmd) case 1default: break; // do nothing} // switch (cmd)Serial3.print(rawGps.numSat);Serial3.print("|");Serial3.print(Comp.distanceToHome);Serial3.print("|");Serial3.print(rawGps.groundSpeed*0.036, 1);Serial3.print("|");Serial3.print(rawGps.lat*0.0000001, 7);Serial3.print("|");Serial3.print(rawGps.lon*0.0000001, 7);delay(50);}}
void targetcoordinates(){
Serial.begin(9600);