WERT in einer Variablen Speichern

Hallo Zusammen,

versuche ein Wert in einer Variablen zu speichern leider übernimmt er es nicht und schmeißt im Seriellen Monitor nur dieses Zeichen aus:

gps.getPar(lon, lat, alt, time, vel);
    while (o++ <= 1) {
      Position1 = lon;
      Position2 = lat;

Serial.println(“Position;”);
Serial.println(Position1);

20:48:10.214 -> Position;
20:48:10.247 -> ⸮

Kennt jmd das Problem? Kann mir jmd Helfen?

Vielen Dank im Voraus

Das Problem liegt darin, dass mit diesem Fragment keiner etwas anfangen kann. Z.B. wie ist o definiert unf initialisiert?
Poste bitte den gesamten Sketch bzw. einen gekürzten aber kompilierbaren, der das Problem zeigt.

Gruß Tommy

#include "SIM900.h"
#include <SoftwareSerial.h>

#include "sms.h"
#include "gps.h"

SMSGSM sms;
GPSGSM gps;

//GSM Variablen
boolean started = true;

int i = 2;

//GPS Arays
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

char Position1;
char Position2;

char Position3;
char Position4;

char stat;

int o = 0;

void setup()
{
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(2400)) {
    Serial.println("\nstatus=READY");
    started = true;
  } else Serial.println("\nstatus=IDLE");

  GPSlokation();
  Serial.println("Position;");
  Serial.println(Position1);

};

void loop() {

}

void sendSMS() {
  if (started) {
    Serial.println("schritt 1");
    Serial.println(i);
    while (i <= 2) {
      Serial.println(i);
      if (sms.SendSMS("----------",Position3))
        delay(1000);
      // sms.SendSMS("", "Arduino SMS, Fahrzeug in bewegung. GPS Daten: ");
      Serial.print("\nSMS sent OK");
      i++;
    }
  }
}

void GPSlokation() {
  if (started) {
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");

    delay(20000);  //Time for fixing
    stat = gps.getStat();
    if (stat == 1)
      Serial.println("NOT FIXED");
    else if (stat == 0)
      Serial.println("GPS OFF");
    else if (stat == 2)
      Serial.println("2D FIXED");
    else if (stat == 3)
      Serial.println("3D FIXED");
    delay(5000);
    //Get data from GPS
    gps.getPar(lon, lat, alt, time, vel);
    while (o++ <= 1) {
      Position1 = lon;
      Position2 = lat;
    }
    Serial.println(Position1);
    Serial.println(Position2);

    Position3 = lon;
    Position4 = lat;

  }
}

Hi

Position1 ist als char deklariert, hat also einen Wertebereich von -128...127.
Es ist eher unwahrscheinlich, daß die Rückgabe des GPS-Modul aus zwei char besteht - eher zwei float.
(meine die ersten beiden Werte, Die dann auch noch als Referenz übergeben werden müssten, damit die Funktion Diese ändern kann - oder?)
Der Kompiler wird Dir, wenn Du die Warnungen eingeschaltet hast, dazu wohl eine Solche bringen.

Woher hast Du den Sketch?
Was schreiben Die Da dazu?

MfG

char Position1;
Ein char…

Und das soll reichen um lon aufzunehmen?
Nee, oder?
Das solltest du ändern.

Zusätzlich:
Du möchtest sicherlich strcpy() verwenden, oder so…

Habe nun die Positionen auf float oben geändert.

//GPS Arays
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

float Position1;
float Position2;

float Position3;
float Position4;

if (sms.SendSMS("----------------","GPS Daten:" + Position1))

Dadurch erscheinen diese folge Fehler:

Arduino: 1.8.7 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"

GPS_SMS_SEND_V.1.1:71:52: error: invalid operands of types 'const char [11]' and 'float' to binary 'operator+'

if (sms.SendSMS("......................","GPS Daten:" + Position1))

^

GPS_SMS_SEND_V.1.1:101:17: error: cannot convert 'char [15]' to 'float' in assignment

Position1 = lon;

^

GPS_SMS_SEND_V.1.1:102:17: error: cannot convert 'char [15]' to 'float' in assignment

Position2 = lat;

^

GPS_SMS_SEND_V.1.1:107:15: error: cannot convert 'char [15]' to 'float' in assignment

Position3 = lon;

^

GPS_SMS_SEND_V.1.1:108:15: error: cannot convert 'char [15]' to 'float' in assignment

Position4 = lat;

^

exit status 1
invalid operands of types 'const char [11]' and 'float' to binary 'operator+'

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

okay habe herraus gefunden das ich versucht habe, Ein array zu ein float speichern wollte.

Bei der Position:

    Position3 = lon;
    Position4 = lat;

Gibt es andere Möglichkeiten die Positionen LAT und LON abzuspeichern in einer Variablen

combie:
Du möchtest sicherlich strcpy() verwenden, oder so....

Oder die Zeichenkette in Float umwandeln...
Aber dann verlierst du (deutlich) Genauigkeit.

Festkommaarithmetik ?

Oder die funktion strcpy(textB, “xyz”); ???

die oben in einer Antwort steht.

Kopiert ja die Variable bzw. Array in ein anderen Array wie ich eigentlich will

Habe dann aber immer noch das Problem, dass ein Array nicht in ein float gespeichert werden kann. >:(

Kann man ein Array, also so wie ich das Ausgeben will so erreichen???

char Position1[15];

gps.getPar(lon, lat, alt, time, vel);

strcpy(Position1[15], lon);

Serial.println(Position1[15]);

Falls du lon (nur) ausgeben willst geht das mit:

Serial.print(lon);

Da ist kein Kopieren und kein zweites anderes Array nötig.

Falls du mit den Daten von lon (etc.) Berechnungen machen willst, dann musst du dir etwas einfallen lassen. Es einfach in float umzuwandeln ist zwar möglich (siehe atof), allerdings leidet dabei (wie bereits erwähnt wurde) die Genauigkeit.

Es ist eher unwahrscheinlich, daß die Rückgabe des GPS-Modul aus zwei char besteht - eher zwei float.

Es ist eher unwahrscheinlich, dass ein GPS-Modul lat und lon als float32 liefert, weil da viel Genauigkeit verloren geht. Da der Sketch kompiliert, sind die zwei char-Arrays doch offensichtlich gut.

Das sind gute Variable, um die GPS-Koordinaten zu speichern.

Wenn du diese Text Variable mit anderem Text kombinieren willst um das als SMS zu verschicken, ist ein + natürlich ein unsinniger Operator. strcat oder strcpy wäre da sinnvoller.

Oder so ähnlich:

char smstext [100] = "GPS Daten: " ;
char* lat = smstext+10; // hinter dem festen Text
char* lon = smstext+20;
gps.getPar(lon, lat, alt, time, vel);
Serial.println (smstext);
sms.SendSMS("----------",smstext);

Vermutlich schließt getPar die Texte mit Endekennungen ab, die du dann im Gesamttext wieder rausputzen musst:

for (int i = 10; i < 20; i++)
   if (smstext [i] == 0) smstext [i] = '-';

nur als Anregung, nicht als fertige Lösung gedacht.

Vielen Dank für die Infos.

Werde das mit der Funktion strcpy durchführen das ist das beste.

ps wird in ein char zurück gegeben.

ps wird in ein char zurück gegeben.

sicher nicht.

Du bist zwar nicht allein, aber du solltest den großen und wesentlichen Unterschied zwischen char und char* lernen.
Und bei dieser Gelegenheit auch den Zusammenhang von char* und char