Pages: [1] 2   Go Down
Author Topic: Wert aus Datenreihe  (Read 1332 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Na wenn du das in ein array einliest, kannst du ja beliebige Stellen desselben direkt ansprechen ...
Logged

 

Offline Offline
Sr. Member
****
Karma: 2
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://arduino.cc/en/Tutorial/StringSubstring
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
danke mal soweit,
ich hab´s jetzt mal mit String versucht,
aber irgendwie klappts nicht.
Mein Code sieht so aus:
Code:
#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 Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ähm? W1 ? wo kommt das her ?
Logged

 

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Von
String w1[26]
Oder ist das falsch?
Logged

Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hab ich inzwischen auch so angepasst, aber es klappt immer noch nicht.
Ich sehe den Fehler einfach nicht:

Code:
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 Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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. smiley-wink

Gruß, mmi.
« Last Edit: February 19, 2012, 01:23:26 am by mmi » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi
Vielen Dank
etwas abgewandelt funktioniert es jetzt:

Code:
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 Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
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 Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube eher, dass es an

Code:
    if (x[22] == '5' && x[21] != '1'){

Liegt.
Verwende ich evtl != falsch?
Habe mal testweise
Code:
    if (x[22] == '5' && x[21] == '1'){

Versucht.
So würde es funktionieren.
Lässt sich != gar nicht mit && kombinieren?
Logged

Bavaria Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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

Pages: [1] 2   Go Up
Jump to: