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
  Problem mit Variablen & Ergebnis rev.antun 11 151 26.11.2020 15:47
Letzter Beitrag: rev.antun
  Nextion Senden von Variablen Problem Tesla 10 477 08.11.2020 13:13
Letzter Beitrag: Tesla
  Benötige dringende Hilfe bei CHAR DO3GE 4 337 07.10.2020 10:41
Letzter Beitrag: Tommy56
  Problem mit AnotherIFTTTWebhook | cannot convert 'const char*' to 'char*' dani 3 273 02.10.2020 11:21
Letzter Beitrag: dani
Question [Syntax]char * und char[ ..] sind doch eigentlich das Gleiche ManniP 3 297 27.09.2020 13:01
Letzter Beitrag: ManniP
  Werte im Sketch in Variablen speichern Bitklopfer 4 476 06.09.2020 10:25
Letzter Beitrag: Bitklopfer
  map() mit Variablen anstatt Zahlen? Norman 15 1.339 16.05.2020 18:14
Letzter Beitrag: Norman
  Mega & SIM800L - Rufnummer Empfänger von String zu Char kiximek 6 898 12.05.2020 07:02
Letzter Beitrag: kiximek
  String, char - und wie die Trennung eines Inputs vornehmen rev.antun 1 616 11.05.2020 20:01
Letzter Beitrag: Tommy56
  Erweiterter ASCII im char Sh0rn 10 1.391 21.03.2020 16:33
Letzter Beitrag: Sh0rn

Gehe zu:


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