Offline
Newbie
Karma: 0
Posts: 12
|
 |
« on: February 18, 2012, 09:25:44 am » |
Hi, wie kann ich am besten aus einer Datenreihe, welche ich auslese, (wird im Serial Monitor etwa in der Form angezeigt: SDFFF2005049850) z.B. jetzt immer die Stelle 8-11 auslesen? (Wäre in diesem Fall dann 0504) So, dass ich es entsprechend weiterverarbeiten kann?
|
|
|
|
|
Logged
|
|
|
|
|
Heidelberg
Offline
Full Member
Karma: 1
Posts: 209
Arduino rocks
|
 |
« Reply #1 on: February 18, 2012, 09:51:57 am » |
Na wenn du das in ein array einliest, kannst du ja beliebige Stellen desselben direkt ansprechen ...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 1
Posts: 260
|
 |
« Reply #2 on: February 18, 2012, 10:00:22 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #3 on: February 18, 2012, 11:23:21 am » |
Hi, danke mal soweit, ich hab´s jetzt mal mit String versucht, aber irgendwie klappts nicht. Mein Code sieht so aus: #include "Dcf77.h"
Dcf77 dcf77(1); String w1[26]= {dcf77.getDateTime()}; int Led = 13;
void setup() { Serial.begin(9600); pinMode(Led, OUTPUT); }
void loop() { const char *x = dcf77.getDateTime(); if (strcmp (x,"DCF77POLL") != 0) { Serial.println(dcf77.getDateTime()); } if (w1[13] == "2") { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); } } aus dcf77.getDateTime() wird folgendes ausgelesen: DCF77DATA 2012021861722CET (und im Serial Monitor auch angezeit) Also müsste doch die Pin13 Led leuchten oder?
|
|
|
|
|
Logged
|
|
|
|
|
Heidelberg
Offline
Full Member
Karma: 1
Posts: 209
Arduino rocks
|
 |
« Reply #4 on: February 18, 2012, 12:00:57 pm » |
Ähm? W1 ? wo kommt das her ?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #5 on: February 18, 2012, 12:30:04 pm » |
Von String w1[26] Oder ist das falsch?
|
|
|
|
|
Logged
|
|
|
|
|
Heidelberg
Offline
Full Member
Karma: 1
Posts: 209
Arduino rocks
|
 |
« Reply #6 on: February 18, 2012, 02:41:44 pm » |
Hier http://arduino.cc/en/Reference/StringConstructor sind die allgemeinen Regularien. Die eckige Klammer zeigt ein einzelnes Element eines Arrays an, wenn sie mit einem Integer belegt ist.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #7 on: February 18, 2012, 02:58:58 pm » |
Hab ich inzwischen auch so angepasst, aber es klappt immer noch nicht. Ich sehe den Fehler einfach nicht: int Led = 13;
void setup() { Serial.begin(9600); pinMode(Led, OUTPUT); }
void loop() { const char *x = dcf77.getDateTime(); if (strcmp (x,"DCF77POLL") != 0) { Serial.println(dcf77.getDateTime()); } String stringOne = String(dcf77.getDateTime()); if (stringOne.charAt(14) == 2) { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); } }
hast du ne Idee? Normal sollte die LED doch jetzt leuchten oder?
|
|
|
|
|
Logged
|
|
|
|
|
Bavaria Germany
Offline
Full Member
Karma: 0
Posts: 121
Arduino rocks
|
 |
« Reply #8 on: February 19, 2012, 01:14:06 am » |
Warum die mehrfachen Aufrufe von dcf77.getDateTime ? Die Funktion gibt offensichtlich einen Pointer zurück, nur wenn kein "DCF77POLL" soll die LED leuchten, ungetesteter Ansatz: void loop() { const char *x = dcf77.getDateTime(); if (strcmp (x,"DCF77POLL") != 0) { Serial.println(x); if (x[13] == '2') { digitalWrite(Led,HIGH); // hier evtl. testweise ein delay von z.B. 1 sec einfuegen, damit die LED auch sichtbar leuchten kann } } else { digitalWrite(Led,LOW); } }
Ich programmiere kein C++, kenne also die String-Klasse nicht, deshalb pures C.  Gruß, mmi.
|
|
|
|
« Last Edit: February 19, 2012, 01:23:26 am by mmi »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #9 on: February 19, 2012, 05:56:25 am » |
Hi Vielen Dank etwas abgewandelt funktioniert es jetzt: void loop() { const char *x = dcf77.getDateTime(); if (strcmp (x,"DCF77POLL") != 0) { Serial.println(x); } if (x[13] == '2') { digitalWrite(Led,HIGH); } } Warum das aber mit dem String Befehl nicht klappt erschließt sich mir aber immer noch nicht.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #10 on: February 19, 2012, 11:10:10 am » |
Und direkt das nächste Problem: Wenn nun x[22] 5 entspricht wird im Seriellen Port gar nichts ausgegeben, bis der Wert sich auf 6 erhöht. void setup() { Serial.begin(9600); pinMode(Led, OUTPUT); pinMode(Led2, OUTPUT); pinMode(Led3, OUTPUT); pinMode(Led4, OUTPUT); }
void loop() { const char *x = dcf77.getDateTime(); if (strcmp (x,"DCF77POLL") != 0) { Serial.println(x); } if (x[22] == '4' || x[22] == '9') { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); } if (x[22] == '1' || x[22] == '6') { digitalWrite(Led2,HIGH); } else { digitalWrite(Led2,LOW); } if (x[22] == '2' || x[22] == '7') { digitalWrite(Led3,HIGH); } else { digitalWrite(Led3,LOW); }
if (x[22] == '5' && x[21] != '1'){ digitalWrite(Led4,HIGH); } else { digitalWrite(Led4,LOW); } } Müsste aber doch eigentlich so passen oder?
|
|
|
|
« Last Edit: February 19, 2012, 01:47:53 pm by ALEX7786 »
|
Logged
|
|
|
|
|
Bavaria Germany
Offline
Full Member
Karma: 0
Posts: 121
Arduino rocks
|
 |
« Reply #11 on: February 19, 2012, 03:11:55 pm » |
Auch wenn x[22] == '5', muß über serial eine Ausgabe erfolgen. Die Ausgabe wird ja nur unterdrückt, wenn als terminierter String "DCF77POLL" zurückgegeben wird.
Laß Dir doch erstmal alles über die serielle Schnittstelle ausgeben, dann lässt sich der Fehler sicher schnell eingrenzen. Ich weiß nicht, was "DCF77GetDateTime" alles zurückgeben kann - kann Dir deshalb auch nicht weiterhelfen.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #12 on: February 19, 2012, 03:25:33 pm » |
Ich glaube eher, dass es an if (x[22] == '5' && x[21] != '1'){ Liegt. Verwende ich evtl != falsch? Habe mal testweise if (x[22] == '5' && x[21] == '1'){ Versucht. So würde es funktionieren. Lässt sich != gar nicht mit && kombinieren?
|
|
|
|
|
Logged
|
|
|
|
|
Bavaria Germany
Offline
Full Member
Karma: 0
Posts: 121
Arduino rocks
|
 |
« Reply #13 on: February 19, 2012, 04:14:25 pm » |
Beides sind korrekte Ausdrücke (&& und != kombiniert). Oben schreibst Du "keine Ausgabe über serial" - gemeint ist dann wohl eher "digitalWrite"!! Mach doch an dieser Stelle auch eine serielle Ausgabe, dann siehst Du doch den Fehler.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #14 on: February 19, 2012, 04:53:30 pm » |
Es funktioniert weder die Ausgabe in dieser Minute (der Wert wird jede Minute ausgegeben) Noch geht die LED an. Ich denke, dass er solange die Bedingung erfüllt ist, dass x22 5 entspricht und x21 nicht 1 ist, sich irgendwie aufhängt oder so. Allerdings kann ich das nicht so recht nachvollziehen, da wenn ich es anders herum Teste (mit 2 mal ==) es ja funktioniert.
|
|
|
|
|
Logged
|
|
|
|
|
|