SIM900 Shield - Grad und Prozent senden

Hab hier ein kleines Projekt om einen Wohnwagen abzufragen.

Trailer Project

Das funktioniert soweit auch ganz gut. Kann vier relays steuern und die Temperatur abfragen.
Nun würde ich gerne auch "°" und "%" senden können. Hab schon einiges probiert aber erfolglos.

SIM900.println("AT + CMGS = \"+46123xxxx\"");                 // recipient's mobile number, in international format
  delay(100);
  SIM900.println("Indoor temp:");                                 // message to send                         
  SIM900.println(t);  
  SIM900.println("Indoor humidity:"); 
  SIM900.println(h); 
  SIM900.println("Outoor temp:");                                 // message to send                         
  SIM900.println(t2);

Wer kann mir da weiter helfen ?

Welche Zeichen hast Du versucht und was kommt heraus?
Grüße Uwe

  SIM900.println("Indoor temp:");                                 // message to send                         
  SIM900.println(t);("°");  
  SIM900.println("Indoor humidity:"); 
  SIM900.println(h);("%");
  SIM900.println("Indoor temp:");                                 // message to send                         
  SIM900.println(t)+ "°";  
  SIM900.println("Indoor humidity:"); 
  SIM900.println(h)+ "%";

Passiert leider nix ...

SIM900.println(char(37));

So sollte laut ascii Code ein Prozent Zeichen übertragen werden. Nur den Code für das Grad Zeichen weiß ich nicht.

Gruß

AndreasVan:
Passiert leider nix ...

nix heißt es kommen die 2 Zeichen nicht an oder es kommt gar nichts an oder es kommen für die 2 andere Zeichen an??
Deine Antwort läßt viel Spielraum für Interpretationen.
Grüße Uwe

Prozent sollte eigentlich gehen. Aber das Grad-Zeichen ist in der erweiterten ASCII Tabelle (176):

Da gibt man den Code direkt mit write() an. Oder innerhalb eines Strings mit \xNNN in Hex.

Hallo,
mich irritiert ein wenig die obige Konstruktion wie z.B.:

  SIM900.println(t)+ "%";

Ich kann das zwar nur für ein LCD-Display testen, aber wenn ich es dort in dieser Form sende, dann kommt hinter "t" auch nur Käse an. Muss das "%" nicht innerhalb der .println()-Funktion gesendet werden?? So im Sinne von:

SIM900.print(t);  
SIM900.println("%");

??
Rudi

*grummel,
da habe ich doch glatt den letzen Satz von Serenifly überlesen ...

RudiDL5:
mich irritiert ein wenig die obige Konstruktion wie z.B.:

  SIM900.println(t)+ "%";

Und das zu Recht. Lässt sich das wirklich übersetzen?

println sollte doch ein size_t der ausgegeben Zeichen zurückgeben,
da kann man nicht einfach eine Zeichenkette addieren...

Ja, das geht natürlich nicht. Das ist wieder mal so ein Fall wo man Warnungen aktivieren sollte. Dann sieht man sofort dass was nicht stimmt:

warning: value computed is not used [-Wunused-value]

Compilieren lässt sich dass, weil man eine Konstante zu einem Zeiger addieren kann (d.h. die Adresse der Strings)

Serenifly:
Compilieren lässt sich dass, weil man eine Konstante zu einem Zeiger addieren kann (d.h. die Adresse der Strings)

Ja, da hast du völlig Recht, daran hatte ich nicht gedacht.

Compilieren lässt sich dass, weil man eine Konstante zu einem Zeiger addieren kann (d.h. die Adresse der Strings)

Alles sehr interessant. Auf diese Weise kommt eine Erfahrung zur Nächsten - und bewahrt einen vor Fallen in die man tappen könnte...

Danke für die Antworten.
Ist alles gar nicht so einfach :wink:

uwefed:
nix heißt es kommen die 2 Zeichen nicht an oder es kommt gar nichts an oder es kommen für die 2 andere Zeichen an??
Deine Antwort läßt viel Spielraum für Interpretationen.
Grüße Uwe

Sorry :-[
Es kommt nix an. Also nur der reine Zahlenwert ohne ° oder %

Scherheinz:

SIM900.println(char(37));

So sollte laut ascii Code ein Prozent Zeichen übertragen werden. Nur den Code für das Grad Zeichen weiß ich nicht.

Gruß

SIM900.println("%");

Ich bekomme auch ein einzelnes Prozentzeichen gesendet. Mein problem ist es ja das an den Wert anzuhängen

zb. 44.00 %

Scherheinz:

SIM900.println(char(37));

Ich kann das zwar nur für ein LCD-Display testen, aber wenn ich es dort in dieser Form sende, dann kommt hinter "t" auch nur Käse an. Muss das "%" nicht innerhalb der .println()-Funktion gesendet werden?? So im Sinne von:

SIM900.print(t);  

SIM900.println("%");

In diesem Fall bekomme ich als Meldung

Indoor temp:
19.00
%

Ich erreiche halt nicht das das Prozentzeichen bzw. das Gradsymbol hinter dem Zahlenwert erscheint.

Ich hab ja nicht die gleiche Möglichkeiten wie beim LCD Display

         lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Temp.: "); 
          lcd.print(t);
          lcd.print(" ° ");
          lcd.setCursor(0,2); 
          lcd.print("Humidity: "); 
          lcd.print(h);
          lcd.print(" %\t");

*seufz, leider kann ich das mangels Shield nicht testen... aber ich habe folgende Seite gefunden:

http://linksprite.com/wiki/index.php5?title=SIM900_GPRS/GSM_Shield

Etwa ab dem Ende des 1. Drittels des Dokumentes sind einige Code-Schnippsel zu sehen, wie man diverse Ausgaben aufbereitet. Vielleicht hilft das ja weiter, wahrscheinlich müsste man die zu sendende Zeichenkette vorher und inklusive % und ° entsprechend aufbereiten?

AndreasVan:
In diesem Fall bekomme ich als Meldung

Indoor temp:
19.00
%

Wenn t in dem Kode eine Zahl ist, hast du für den obigen Output einen anderen Kode benutzt, ich tippe mal auf

SIM900.println(t);  
SIM900.println("%");