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
char in Variablen aufteilen
05.01.2019, 00:23
Beitrag #1
char in Variablen aufteilen
Hallo zusammen,
ich habe ein Problem, an dem ich jetzt seit Stunden zu knacken habe.
Ich möchte gerne per Smartphone meine Arduino Uhr stellen. Ich bekomme über die Schnittstelle den Char z.B. "15,10,16,5,04.01.2019" eigentlich könnte man den Wert so in die "void einstellenDS3231zeit "übergeben, leider geht es so nicht. Ich habe zwar im Forum diverse Ansätze gefunden, doch leider konnte ich keines so umsetzen, dass es in meinem Code funktioniert.
Über eure Hilfe würde ich mich sehr freuen.

Code:
void loop() {
while(Serial3.available())
  {
    char data;
    data = Serial3.read();
    einstellenDS3231zeit(data);
...

void einstellenDS3231zeit(byte sekunde, byte minute, byte stunde, byte wochentag, byte tag, byte monat, byte jahr) {
Wire.beginTransmission(DS3231_ADDRESSE);
  Wire.write(0);
  Wire.write(decToBcd(sekunde)); // Sekunden einstellen
  Wire.write(decToBcd(minute)); // Minuten einstellen
  Wire.write(decToBcd(stunde));
...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 00:39
Beitrag #2
RE: char in Variablen aufteilen
Da gibt es doch eine eine Lib zu. Unten ein Beispiel:

Gruß
Günter

Code:
/*
  DS3231_test.pde
  Eric Ayars
  4/11

  Test/demo of read routines for a DS3231 RTC.

  Turn on the serial monitor after loading this to check if things are
  working as they should.

*/

#include <DS3231.h>
#include <Wire.h>

DS3231 Clock;
bool Century = false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;

byte year, month, date, DoW, hour, minute, second;

void setup() {
  Serial.begin(115200);
  // Start the I2C interface
  Serial.println("Testprogramm gestartet");
  Wire.begin();
  Serial.println("Wire Begin fertig");
  if (true)
  {
    Clock.setSecond(00);//Set the second
    Clock.setMinute(12);//Set the minute
    Clock.setHour(22);  //Set the hour
    Clock.setDoW(6);    //Set the day of the week
    Clock.setDate(14);  //Set the date of the month
    Clock.setMonth(12);  //Set the month of the year
    Clock.setYear(15);  //Set the year (Last two digits of the year)
  }
  // Start the serial interface
  Serial.println("Setup fertig");
  
}
void ReadDS3231()
{
  int second, minute, hour, date, month, year, temperature;
  second = Clock.getSecond();
  minute = Clock.getMinute();
  hour = Clock.getHour(h12, PM);
  date = Clock.getDate();
  month = Clock.getMonth(Century);
  year = Clock.getYear();

  temperature = Clock.getTemperature();

  Serial.print("20");
  Serial.print(year, DEC);
  Serial.print('-');
  Serial.print(month, DEC);
  Serial.print('-');
  Serial.print(date, DEC);
  Serial.print(' ');
  Serial.print(hour, DEC);
  Serial.print(':');
  Serial.print(minute, DEC);
  Serial.print(':');
  Serial.print(second, DEC);
  Serial.print('\n');
  Serial.print("Temperature=");
  Serial.print(temperature);
  Serial.print('\n');
}
void loop() {
  ReadDS3231(); delay(1000);
  // send what's going on to the serial monitor.
  // Start with the year
  Serial.print("2");
  if (Century) {            // Won't need this for 89 years.
    Serial.print("1");
  } else {
    Serial.print("0");
  }
  Serial.print(Clock.getYear(), DEC);
  Serial.print('-');
  // then the month
  Serial.print(Clock.getMonth(Century), DEC);
  Serial.print('-');
  // then the date
  Serial.print(Clock.getDate(), DEC);
  Serial.print(' ');
  // and the day of the week
  //Serial.print(Clock.getDoW(), DEC);
  Serial.print(' ');
  // Finally the hour, minute, and second
  //Serial.print(Clock.getHour(h12, PM), DEC);
  Serial.print(':');
  Serial.print(Clock.getMinute(), DEC);
  Serial.print(':');
  Serial.print(Clock.getSecond(), DEC);
  // Add AM/PM indicator
  if (h12) {
    if (PM) {
      Serial.print(" PM ");
    } else {
      Serial.print(" AM ");
    }
  } else {
    Serial.print(" 24h ");
  }
  // Display the temperature
  Serial.print("T=");
  Serial.print(Clock.getTemperature(), 2);
  // Tell whether the time is (likely to be) valid
  if (Clock.oscillatorCheck()) {
    Serial.print(" O+");
  } else {
    Serial.print(" O-");
  }
  // Indicate whether an alarm went off
  if (Clock.checkIfAlarm(1)) {
    Serial.print(" A1!");
  }
  if (Clock.checkIfAlarm(2)) {
    Serial.print(" A2!");
  }
  // New line on display
  Serial.print('\n');
  // delay(1000);
  // Display Alarm 1 information
  Serial.print("Alarm 1: ");
  Clock.getA1Time(ADay, AHour, AMinute, ASecond, ABits, ADy, A12h, Apm);
  Serial.print(ADay, DEC);
  if (ADy) {
    Serial.print(" DoW");
  } else {
    Serial.print(" Date");
  }
  Serial.print(' ');
  Serial.print(AHour, DEC);
  Serial.print(' ');
  Serial.print(AMinute, DEC);
  Serial.print(' ');
  Serial.print(ASecond, DEC);
  Serial.print(' ');
  if (A12h) {
    if (Apm) {
      Serial.print("pm ");
    } else {
      Serial.print("am ");
    }
  }
  if (Clock.checkAlarmEnabled(1)) {
    Serial.print("enabled");
  }
  Serial.print('\n');
  // Display Alarm 2 information
  Serial.print("Alarm 2: ");
  Clock.getA2Time(ADay, AHour, AMinute, ABits, ADy, A12h, Apm);
  Serial.print(ADay, DEC);
  if (ADy) {
    Serial.print(" DoW");
  } else {
    Serial.print(" Date");
  }
  Serial.print(' ');
  Serial.print(AHour, DEC);
  Serial.print(' ');
  Serial.print(AMinute, DEC);
  Serial.print(' ');
  if (A12h) {
    if (Apm) {
      Serial.print("pm");
    } else {
      Serial.print("am");
    }
  }
  if (Clock.checkAlarmEnabled(2)) {
    Serial.print("enabled");
  }
  // display alarm bits
  Serial.print('\n');
  Serial.print("Alarm bits: ");
  Serial.print(ABits, DEC);


  Serial.print('\n');
  Serial.print('\n');
  delay(1000);

  // Display the time once more as a test of the getTime() function
  Clock.getTime(year, month, date, DoW, hour, minute, second);

  Serial.print(year, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(date, DEC);
  Serial.print("day of the week :");
  Serial.println(DoW, DEC);
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.println(second, DEC);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 10:37
Beitrag #3
RE: char in Variablen aufteilen
Schon mal vielen Dank für Deine Antwort. Ich bin beim Arduino noch Anfänger und möchte mich vorab schon für vielleicht blöde Fragen entschuldigen. Ich kann in dem Beispiel keine Verbindung zur Seriellen Schnittstelle finden.
Schönen Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 11:02
Beitrag #4
RE: char in Variablen aufteilen
Was meinst Du? "Serial.begin" steht doch am Anfang im setup. Und "wire.begin" startet I2C.

Gruß
GuaAck

(05.01.2019 10:37)fv1895 schrieb:  Schon mal vielen Dank für Deine Antwort. Ich bin beim Arduino noch Anfänger und möchte mich vorab schon für vielleicht blöde Fragen entschuldigen. Ich kann in dem Beispiel keine Verbindung zur Seriellen Schnittstelle finden.
Schönen Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 11:27
Beitrag #5
RE: char in Variablen aufteilen
char data ist genau 1 Zeichen.

Besser (einfacher für Dich) wäre ein Trennen mit einem einheitlichen Zeichen "15,10,16,5,04,01,2019" und einen Zeilenvorschub hintendran als Endekennzeichen.

Dann kannst Du das mit strtok einfach zerlegen und mit atoi in Zahlen umwandeln. Beispiele dazu hier und hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 11:41
Beitrag #6
RE: char in Variablen aufteilen
Wenn ich es richtig verstehe, wird im Setup der Serielle Monitor angesprochen, oder?
Ich möchte von meinem Handy per Bluetooth die Uhr im Arduino stellen.
Das Bluetoothmodul ist an Serial3 angeschlossen.


(05.01.2019 11:02)GuaAck schrieb:  Was meinst Du? "Serial.begin" steht doch am Anfang im setup. Und "wire.begin" startet I2C.

Gruß
GuaAck

(05.01.2019 10:37)fv1895 schrieb:  Schon mal vielen Dank für Deine Antwort. Ich bin beim Arduino noch Anfänger und möchte mich vorab schon für vielleicht blöde Fragen entschuldigen. Ich kann in dem Beispiel keine Verbindung zur Seriellen Schnittstelle finden.
Schönen Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2019, 00:36 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2019 00:43 von GuaAck.)
Beitrag #7
RE: char in Variablen aufteilen
Hallo,

"Serial" ist die Standard-Schnittstelle auf Arduinos. Die ist einerseits an den Pins RX/TX zugänglich, ist aber auch über USB als COM-Port vom PC aus erreichbar. In der "scheinbaren" COM-Verbindung zwischen PC und Arduino ist einfach USB über Umsetzer dazwischen.

Was Du mit "Serial" machst, das ist Deine Sache. Der "Serielle Monitor" schaltet sich einfach auf den COM-Port und wartet was passiert. Nicht ganz: Mit Start der Verbindung über USB wird auch ein Reset auf dem Arduino ausgelöst.

Weitere serielle Schnittstellen sind nur über die RXn/TXn erreichbar.

Deine Frage bezog sich auf die Uhr, zu Handy kann ich leider nichts beitragen.

Gruß
GuaAck




(05.01.2019 11:41)fv1895 schrieb:  Wenn ich es richtig verstehe, wird im Setup der Serielle Monitor angesprochen, oder?
Ich möchte von meinem Handy per Bluetooth die Uhr im Arduino stellen.
Das Bluetoothmodul ist an Serial3 angeschlossen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2019, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2019 12:00 von Tommy56.)
Beitrag #8
RE: char in Variablen aufteilen
(05.01.2019 11:41)fv1895 schrieb:  Das Bluetoothmodul ist an Serial3 angeschlossen.
Dann sollte ins setup ein Serial3.begin(Baudrate);
Im loop dann von Serial3 einlesen. Wie, steht in den von mir geposteten Links in #5.
Lass erst mal alles mit der Uhr weg und zerlege die ankommende Information in ihre Bestandteile und gib diese aus.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  string in char wandeln TT-Tom 3 181 04.11.2019 17:20
Letzter Beitrag: TT-Tom
  Textlänge (char) Array Blende8 3 593 08.04.2019 18:08
Letzter Beitrag: Tommy56
  Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop() pzYsTorM 14 1.204 19.03.2019 20:33
Letzter Beitrag: Hilgi
  Char in Int variable wandeln Rockman 5 843 06.03.2019 23:22
Letzter Beitrag: Tommy56
  Variable auf zwei Bytes aufteilen ? huber5093 4 836 05.03.2019 20:17
Letzter Beitrag: Tommy56
Question (Denk)Problem mit char array[] ? ManfredH 3 675 05.02.2019 12:01
Letzter Beitrag: ManfredH
  [Anfänger] Char Array Problem fp.blues2013 1 573 07.01.2019 13:06
Letzter Beitrag: Tommy56
  Variablen zu einem CHAR verbinden und einbinden Frank_aus_WOB 3 966 02.01.2019 09:07
Letzter Beitrag: Tommy56
  Verkettung von Variablen flint74 5 760 30.12.2018 14:33
Letzter Beitrag: Tommy56
  Variablen über Eingabe im Setup beschreiben heini320 3 678 30.12.2018 11:37
Letzter Beitrag: Tommy56

Gehe zu:


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