INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
atof array ausgeben
27.11.2019, 10:52 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 10:57 von Pet.)
Beitrag #1
atof array ausgeben
Guten Tag ich habe ein Problem mit einem Projekt.

Ich lese mit dem Arduino eine Waage über RS232 Schnittstelle aus.

Die eingelesenen Daten werden in ein Array gespeichert,
anschließend sollen die Zahlen im Array in Float umgewandelt werden,
damit ich mit dem Microcontroller rechnen kann.
Der Microcontroller soll dann anhand des eingelesenen Gewichts eine Pumpe steuern.

Mein Problem: mittels atol oder atof gibt mir der Microcontroller nur das erste Zeichen des Arrays aus und nicht das ganze Array.

Das sieht dann etwa so aus:
Ascii --> 15.23
als Float wird 1.00 ausgegeben

/Ich weiß das es dazu schon einige Threads gibt, kann jedoch nicht meinen Fehler finden, ich hoffe ihr könnt mir weiterhelfen/

Ich habe jetzt etwa 3 Tage versucht die Zahlen die ich als ascii bekomme umzuwandeln und bekomme es nicht richtig hin.

Ich hoffe ihr könnt mir helfen, bin leider noch Anfänger.


Hier ist mein Programmcode

#include <SoftwareSerial.h>
#include <stdlib.h>


SoftwareSerial mySerial(10, 11); // RX, TX Pins at microcontroller
void setup()



{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial)
{
;
}


Serial.println("Start Messwertaufzeichnung!");
mySerial.flush();
// data rate for the SoftwareSerial port
mySerial.begin(9600);
}



void loop()
{ // run over and over
Serial.flush();
char zeichen;
char zeichenkette_raw[20];
char zeichenanzahl = 0;
//float gewicht =0;
int Gewicht =0;

while(1)
{

if (mySerial.available())
{
zeichen = mySerial.read();

if((zeichen == '.') || (zeichen == '+') || (zeichen == '-') || ((zeichen >= '0')&&(zeichen <='9')))
{
//Serial.write(zeichen);
zeichenkette_raw[zeichenanzahl] = zeichen;
zeichenanzahl++;
zeichenkette_raw[zeichenanzahl++] = '\r';
zeichenkette_raw[zeichenanzahl] = '\n';
}

if( zeichen == '\n' || zeichen == '\r' && zeichenanzahl > 1)
{
Serial.write(zeichenkette_raw);

long gewicht = atol(zeichenkette_raw);
Serial.println(gewicht);

Serial.flush();
zeichenanzahl = 0;
}
}
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:33 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 11:39 von MicroBahner.)
Beitrag #2
RE: atof array ausgeben
Setze deinen Code bitte in Codetags, das geht auch nachträglich:
Cursor vor den Code, dann '#' oben rechts anklicken, dann den Cursor hinter den Code, und nochmal das '#' anklicken.

Hast Du den Sketch selbst geschrieben, oder von irgendwoher kopiert? Eine while(1)-Schleife hat im loop nichts zu suchen, loop() ist bereits deine Endlosschleife. Schau bitte mal in den Beispielen der IDE, wie ein Sketch aufgebaut wird.

Dein eigentliches Problem liegt in diesen beiden Zeilen:
Code:
zeichenkette_raw[zeichenanzahl++] = '\r';
zeichenkette_raw[zeichenanzahl] = '\n';
die müssen komplett raus, damit zerhackst Du dir deine empfangene Zahl, und die kann dann nicht mehr ungewandelt werden.
Ausserdem must Du noch ein Abschlußzeichen '\0' anfügen, wenn Du ein '\r' oder '\n' empfangen hast.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:46
Beitrag #3
RE: atof array ausgeben
[quote='Pet' pid='64140' dateline='1574848327']
Guten Tag ich habe ein Problem mit einem Projekt.

Ich lese mit dem Arduino eine Waage über RS232 Schnittstelle aus.

Die eingelesenen Daten werden in ein Array gespeichert,
anschließend sollen die Zahlen im Array in Float umgewandelt werden,
damit ich mit dem Microcontroller rechnen kann.
Der Microcontroller soll dann anhand des eingelesenen Gewichts eine Pumpe steuern.

Mein Problem: mittels atol oder atof gibt mir der Microcontroller nur das erste Zeichen des Arrays aus und nicht das ganze Array.

Das sieht dann etwa so aus:
Ascii --> 15.23
als Float wird 1.00 ausgegeben

/Ich weiß das es dazu schon einige Threads gibt, kann jedoch nicht meinen Fehler finden, ich hoffe ihr könnt mir weiterhelfen/

Ich habe jetzt etwa 3 Tage versucht die Zahlen die ich als ascii bekomme umzuwandeln und bekomme es nicht richtig hin.

Ich hoffe ihr könnt mir helfen, bin leider noch Anfänger.


Hier ist mein Programmcode

Code:
#include <SoftwareSerial.h>
#include <stdlib.h>


SoftwareSerial mySerial(10, 11); // RX, TX Pins at microcontroller
void setup()



{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial)
  {
    ;
  }


  Serial.println("Start Messwertaufzeichnung!");
  mySerial.flush();
  // data rate for the SoftwareSerial port
  mySerial.begin(9600);
}



void loop()
{ // run over and over
   Serial.flush();
   char zeichen;
   char zeichenkette_raw[20];
   char zeichenanzahl = 0;
   //float gewicht =0;
   int Gewicht =0;

   while(1)
   {
  
   if (mySerial.available())
    {
      zeichen = mySerial.read();

      if((zeichen == '.') || (zeichen == '+') || (zeichen == '-') || ((zeichen >= '0')&&(zeichen <='9')))
       {
          //Serial.write(zeichen);
          zeichenkette_raw[zeichenanzahl] = zeichen;
          zeichenanzahl++;
          zeichenkette_raw[zeichenanzahl++] = '\r';
          zeichenkette_raw[zeichenanzahl] = '\n';
       }

    if( zeichen == '\n' || zeichen == '\r' && zeichenanzahl > 1)
     {
       Serial.write(zeichenkette_raw);
      
       long gewicht = atol(zeichenkette_raw);
       Serial.println(gewicht);
      
       Serial.flush();
       zeichenanzahl = 0;
     }
   }
  }
}
[code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:52
Beitrag #4
RE: atof array ausgeben
Oh vielen vielen Dank!!!
Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.

Es funktioniert jetzt.
Soll ich den Thread löschen?
Oder kann ich das überhaupt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 12:22
Beitrag #5
RE: atof array ausgeben
(27.11.2019 11:52)Pet schrieb:  Oh vielen vielen Dank!!!
Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.

Es funktioniert jetzt.
Soll ich den Thread löschen?
Oder kann ich das überhaupt?

Nein du brauchst nichts löschen.
lgbk Moderator

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 12:32 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 12:33 von MicroBahner.)
Beitrag #6
RE: atof array ausgeben
(27.11.2019 11:52)Pet schrieb:  Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.
Das liegt daran, dass der serielle Monitor das Zeichen bei der Ausgabe ignoriert, deshalb siehst Du das da nicht.
Denke auch daran, dich über den richtigen Aufbau eines Sketches schlau zu machen. Auch wenn es jetzt funktioniert - bei späteren Erweiterungen wird dir das auf die Füsse fallen.

Löschen kannst Du den Thread nicht. Die Info ist ja vielleicht auch für andere Anfänger interessant.
N.B. Du hättest die Code-Tags auch in deinen ersten Beitrag nachträglich einfügen können - ohne einen neuen Post zu erzeugen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 13:12
Beitrag #7
RE: atof array ausgeben
Alles klar vielen Dank für die Antworten.

Ich werde den Aufbau des Sketches nochmal überarbeiten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  wie kann ich ausgangspins aus einem array steuern? uwe.z 4 304 04.11.2019 21:46
Letzter Beitrag: Holzauge
  Falsche Werte im Array semmelsamu 6 354 27.10.2019 18:45
Letzter Beitrag: semmelsamu
  2D String Array DirkTH 5 467 08.10.2019 09:07
Letzter Beitrag: Tommy56
  Float array über NRF24L01 senden und empfangen Flo3107 6 536 04.09.2019 21:55
Letzter Beitrag: Tommy56
  String als autoscroll auf LCD ausgeben AnFi 17 1.404 29.08.2019 08:13
Letzter Beitrag: MartinZ
  Array mit Wochentage füllen Hoffmakl 5 980 23.06.2019 18:57
Letzter Beitrag: Hoffmakl
  Das Zeichen "°" (Grad) ausgeben Rockman 6 1.097 16.06.2019 16:39
Letzter Beitrag: Rockman
  MKR FOX 1200 - Spannung ausgeben Herby007 8 1.199 23.05.2019 00:47
Letzter Beitrag: Bitklopfer
  Textlänge (char) Array Blende8 3 627 08.04.2019 18:08
Letzter Beitrag: Tommy56
Question (Denk)Problem mit char array[] ? ManfredH 3 738 05.02.2019 12:01
Letzter Beitrag: ManfredH

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste