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
sprintf invalid operands of types
07.12.2014, 14:40
Beitrag #17
RE: sprintf invalid operands of types
Hallo,

supi,
cih werde das dann mal testen,

versuche gerade den float-wert in int umzuwandeln und in die db zu schreiben.
Das funktioniert nun auch, jedoch kommen dort statt 20.5 die 20041.2 als Wert an.

Das ist für mich schonmal ein gewaltiger Fortschritt auch wenn die Umrechnung wohl noch nicht passt Sad

ich probier das noch ein wenig und teste dann den Code von Dir und melde mich später wieder.

Vielen dank einstweilen

Grüße Sepp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 14:45
Beitrag #18
RE: sprintf invalid operands of types
Zitat:versuche gerade den float-wert in int umzuwandeln und in die db zu schreiben.
Würde ich nicht machen. Durch den Aufruf von dtostrf wird der float Wert in ein char Array umgewandelt. Da der connector sowieso nur Strings entgegen nimmt sollte das passen. In der Tabelle musst du sie Spalte dann als float(5.2) definieren.
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 15:30 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2014 16:02 von sepp01.)
Beitrag #19
RE: sprintf invalid operands of types
was ich nun probierte hat eh nicht hin.
ich werde jetzt Deinen Lösungsansatz probieren.

Das mit dtostrf hatte ich schon irgendwo gelesen, da ich jedoch vom sprintf noch keine Ahnung hatte sagte mir die dort mit float-werten angebene Lösung gar nichts.
Ich muss da noch viel Try and error probieren Sad

hallo Ricardo

habe Deinen Lösung ausprobiert und etwas angepasst da ich ja 4 spalten in meiner Tabelle habe.

Folgendes steht nun im Sketch
Code:
dtostrf(sensors.getTempCByIndex(0), 5, 2,temp_val);
char buf[128];
sprintf(buf,"INSERT INTO dht22_test.temp_humid VALUES (NULL,%s,%i,%s)",temp_val, myDHT22.getHumidityInt(), temp_val);

ich wollte hier nicht groß rumpfuschen da ich erstmal sehen wollte ob es so geht .
ich habe also die ermittelten werte des DHT22 aus dem skript weggelassen!

Er schreibt nun alles rein was vor dem Komma steht. Also nur Ganzzahlen
ich bräuchte aber in der DB die werte mit 2 Nachkommastellen, eine wäre auch ok.

Hast Du da noch eine Lösung?
Grüße Sepp




es geeeeeeeeeeht
ich glaubs nicht


Dankeeeeee Ricardo

Eine Frage noch

ich bekomme ab und an mal Packet Error
Laut C.Bell muss ich einen Disconnect setzen.

Reicht das wenn ich diesen mit

my_conn.disconnect();

in der loop-anweisung aufrufe?

Grüße sepp

und vielen vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 16:55
Beitrag #20
RE: sprintf invalid operands of types
Hallo sepp,

freut mich, dass es grundsätzlich geht Smile
Nun zu deiner Frage:
Eine Gegenfrage: du benutzt das Ethernet-Shield mit dem W5100 Chip, also das Standardshield wie hier: http://arduino.cc/en/uploads/Main/Arduin..._Front.jpg ?
Wenn ja, dürfte es (nicht nur) am mysql connector liegen, sondern eher am zu schnellen senden der Daten per Ethernetclient.
Du müsstest also sowohl ein disconnect für den connector, als auch ein flush() und stop() für den Ethernetclient abarbeiten. Bis zum nächsten Start des Ethernetclient und der Verbindungsaufnahme zu mySql sollten dann ein paar Sekunden vergehen.
Für diese "Zeitverzögerung" solltest du aber nicht delay() benutzen, sondern ein millis()-Konstrukt wie zB. im allseits bekannten blinkwithoutdelay - Beispiel http://arduino.cc/en/Tutorial/BlinkWithoutDelay, da ansonsten die "Restverarbeitung" auf der Ethernetkarte stehen bleibt.
Hintergrund: Die Karte kann max. 4 Verbindungen öffnen. Wenn du im Loop() ohne Verzögerung immer wieder die Inserts reinprügelst, wird eine 5. Verbindung aufgemacht, ohne das die 1. Verbindung schon geschlossen wurde.
Daher steht da auch "Protokollfehler" (also IP-Protokoll) und kein mySql - Fehler.
Hoffe es bringt dich weiter!
Grüße Ricardo
PS: Du merkst schon...lesen, lesen, lesen...

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 17:06
Beitrag #21
RE: sprintf invalid operands of types
(07.12.2014 16:55)rkuehle schrieb:  Für diese "Zeitverzögerung"
solltest du aber nicht delay() benutzen, sondern ein millis()-Konstrukt
Hi,
Ich würde wetten, dass das egal ist. Ich kann mir nicht vorstellen, dass die Ethernet-Lib irgendwas zwischen den loop()-Aufrufen macht. Das geht doch bestimmt irgendwie mit Interrupts. Da sollte delay() kein Problem sein.
...aber später mal wird in dem Projekt ganz sicher ganz viel millis() vorkommen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 19:04
Beitrag #22
RE: sprintf invalid operands of types
Hi Thorsten,
Zitat:Ich würde wetten, dass das egal ist. Ich kann mir nicht vorstellen, dass die Ethernet-Lib irgendwas zwischen den loop()-Aufrufen macht. Das geht doch bestimmt irgendwie mit Interrupts
Eindeutig: Jain Smile
Die Ethernet-Lib selbst benutzt keine Interrupts, allerdings läuft die Kommunikation ja über SPI. Die SPI-Lib benutzt Interrupts.Da ich nie aus dem Kopf weiß welche Funktionen wirklich kommunizieren, mache ich die Zeiten immer über millis().
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 19:04 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2014 19:46 von sepp01.)
Beitrag #23
RE: sprintf invalid operands of types
(07.12.2014 16:55)rkuehle schrieb:  Hallo sepp,

freut mich, dass es grundsätzlich geht Smile
Nun zu deiner Frage:
Eine Gegenfrage: du benutzt das Ethernet-Shield mit dem W5100 Chip, also das Standardshield wie hier:

ja genau , dieses shield benutze ich.
ok werde mich da mal einlesen und dann auch das shield säubern.

Später wenn mal das prog steht wird eh nicht mehr so häufig geschrieben und abgefragt nur mit den Beispielscripts die ja in einer ständigen schleife laufen ist das momentan noch so.
Auf jeden Fall werde ich aber trotzdem auch später im Programm das Shield entsprechend mit dem flush bearbeiten.

danke für den Hinweis!!!

Grüße Sepp

Hallo,

Frage.

ich bin gerade dabei mein RTC-Modul mit einzubauen.
Die Uhrzeit etc. bekomme ich.

Frage:
da ich den Arduino in Kombination mit dem raspberry auf dem ja der webserver und dei mysql-db läuft verwende, ist es da sinnvoll Datetime aus dem RTC-Modul vom Arduino in die DB zu schreiben?
Ich könnte ja einfach auch den Timestamp der mysql-db verwenden.

Aktuell wollte ich aus dem RTC-Modul das Datum und die Uhrzeit auslesen, mit strcat zu einem string verbinden und dann an die mysql-db mit dem Temeparturwerten senden.

Weiss aber nicht ob das sinnvoll ist und wenn ja ob da strcat das richtige ist.

Ich bekomme die Werte der Uhrzeit und das Datums
so:
now.day();
now.month();
now.year();
now.minute();
now.hour();
now.second();

ich müsste sie jetzt mit "-" und ":" verbinden um die richtige Schreibweise für mein Mysql-datenfeld zu bekommen.

Grüße Sepp

Hallo,

habe jetzt das mit den Wartezeiten, stop() und flush() gesetzt.
Irgendwas as passt ihm nicht

jetzt kommt zwar der connect und das erste Schreiben in die DB recht fix zustande aber dann kommt der packet error

hier das aus dem Seriel-monitor

Connecting...
Connected to server version 5.5.35-0+wheezy1-log
Data read and recorded.
Disconnected.
Packet error.
Data read and recorded.

hier was ich deklariert habe
EthernetClient client;
//wartezeit des Ethernetshiels bis Neuafbau setzen
long previousMillis = 0;
long interval = 10000;

hier der Befehl der nach dem Insert in die mysql-db kommt
.
.
my_conn.cmd_query(buf);
Serial.println("Data read and recorded.");
my_conn.disconnect();
break;
.

hier was im lopp steht

void loop() {

unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
delay(read_delay);
read_data();
client.stop();
client.flush();
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 20:11
Beitrag #24
RE: sprintf invalid operands of types
Hi,
sollte der flush nicht vor dem stop kommen?

Zum Thema Uhr: Wenn Du eh einen RasPi laufen hast, dann würde ich das den RasPi machen lassen.
Ich würde sowieso das meiste im RasPi machen. Dort könnte einfach ein Programm laufen, welches den Arduino abfragt und dann die Daten in die DB schreibt. Der Arduino wäre dann ein kleiner Webserver. Ich glaube, dass es so herum einfacher wäre.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme mit sprintf() und dtostrf() GMBU 11 819 22.06.2016 10:52
Letzter Beitrag: GMBU
  invalid conversion from 'const char*' to 'char' toto1975 8 885 31.03.2016 12:49
Letzter Beitrag: hotsystems
  sprintf() plus scanf() : ständig Fehler, warum? HaWe 15 1.831 28.02.2015 15:31
Letzter Beitrag: HaWe
  Funktion ähnlich variabel definieren wie sprintf HaWe 21 1.800 24.02.2015 11:12
Letzter Beitrag: HaWe
  sprintf formatiert völlig falsch ! HaWe 15 1.607 13.12.2014 10:04
Letzter Beitrag: HaWe

Gehe zu:


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