hheck
February 11, 2022, 7:27pm
1
int alt1 = 0;
int neu1 = 0;
unsigned long start1 = millis();
unsigned long stop1 = 0;
unsigned long dif1 = 500;
unsigned long Zahl1 = 0;
int alt2 = 0;
int neu2 = 0;
unsigned long start2 = millis();
unsigned long stop2 = 0;
unsigned long dif2 = 500;
unsigned long Zahl2 = 0;
String str = "";
//==============================
void setup()
{
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
Serial.begin(9600);
}
//=================================
void loop()
{
neu1 = digitalRead(3);
neu2 = digitalRead(4);
//===========================
if (neu1 < alt1) // FALLING
{ stop1 = millis();
dif1 = stop1 - start1 ;
start1 = millis();
//str = String(millis()) + " - " + String(dif1) + " - " + String(dif2);
Ausgabe2();
//Serial.println(str);
//for (int i = 0; i < str.length(); i++)
//{
//Serial.print(str.charAt(i));
//}
//Serial.println(millis());
//Serial.println(dif1);
//Serial.println(dif2);
//Serial.println();
}
else if ((millis() - start1) > 1800500)
{ dif1 = 1800500;
start1 = millis();
}
alt1 = neu1;
//===============================
if (neu2 < alt2) // FALLING
{ stop2 = millis();
dif2 = stop2 - start2 ;
start2 = millis();
//str = String(millis()) + " - " + String(dif1) + " - " + String(dif2);
Ausgabe2();
//Serial.println(str);
//for (int i = 0; i < str.length(); i++)
//{
// Serial.print(str.charAt(i));
//}
//Serial.println(millis());
//Serial.println(dif1);
//Serial.println(dif2);
//Serial.println();
}
else if ((millis() - start2) > 1800500)
{ dif2 = 1800500;
start2 = millis();
}
alt2 = neu2;
}
//================================
void Ausgabe()
{
Serial.print(millis());
Serial.print(" , ");
Serial.print(dif1);
Serial.print(" , ");
Serial.println(dif2);
}
void Ausgabe2()
{
Serial.println("OPW SO.DAT");
str = String(millis());
Aus();
str = " , ";
Aus();
str = String(dif1);
Aus();
str = " , ";
Aus();
str = String(dif2);
Aus();
Serial.println("CLF SO.DAT");
}
void Aus()
{
Serial.println(str.length());
for (int i = 0; i < str.length(); i++)
{
char a = (str.charAt(i));
Serial.println ("WRF 0001");
Serial.print(a);
}
}
Guten Tag,
steh mal wieder aufm Schlauch.
Aus der "Ausgabe2()" wird die "Aus()" aufgerufen, in der verschiedene Daten zeichenweise an einen USB-Stick (via Vdrive2) übergeben werden sollen.
Da das nicht passiert, hab ich mal die Länge der String-Variablen mit ausgedruckt .
Was beweist, daß die Routine aufgerufen wird, aber dank der Länge 0 nicht ausgeführt wird. (str iat als String deklariert).
Wo muß ich noch suchen?
Gruß
Helle`
serieller Monitor:
OPW SO.DAT
0
0
0
0
0
CLF SO.DAT
Kannst Du bitte Deinen Code in codetags hier einfügen? Keine Bildschirmfotos!
Tommy56
February 11, 2022, 7:57pm
3
Aus den Fragmenten kann keiner etwas herauslesen. Gib uns bitte einen compilierfähigen Code.
Gruß Tommy
hheck:
str = String(millis());
Das wird nichts.
Auf was für einem Controller soll denn das laufen?
Tommy56
February 11, 2022, 8:34pm
7
String auf einem AtTiny grenzt an Selbstmord.
Gruß Tommy
hheck:
Attiny45
Dann verabaschiede Dich von String und bau charArray.
hheck:
str = " , ";
Das soll ein hinten angesetzt werden oder soll die Zeichenkette genau so zugewiesen werden?
combie
February 11, 2022, 8:35pm
9
Das tuts auf allen Arduinos.
hheck:
Ein Attiny45,
Aber nicht das Serial.print() das kennt der Tiny nicht.
hheck
February 11, 2022, 8:39pm
10
Na ja, in "Ausgabe()" hab ich die Daten auf den SerMonitor geschrieben , und da tut Serial.Print()
combie
February 11, 2022, 8:44pm
11
Wundert mich etwas, denn der Tiny hat gar keine UART.
Welche Harwaredefinition verwendest du denn?
Ohne String Objekte und besonders ohne die globale Variable
String str;
wird alles viel einfacher. Entweder dein Problem ist dann weg, oder man kann dir helfen.
wno158
February 11, 2022, 9:20pm
14
Ich halte es für überflüssig, millis() nochmals aufzurufen.
Eigentlich gibt es ja einen String()
-Konstruktor für unsigned long
(jedenfalls lt. Referenz ) - da würde ich mal das versuchen:
str = String(start1) + " - " + String(dif1) + " - " + String(dif2);
Über Funktionsaufrufe zur Initialisierung von Variablen vor dem setup()
möchte ich nicht philosophieren.
unsigned long start1 = millis();
unsigned long start2 = millis();
Ein Compiler-Warnung kannst Du DIr ersparen, wenn der Schleifenzähler nicht vom Typ int
ist:
for (size_t i = 0; i < str.length(); i++)
Da ich die Tinys nicht in meiner IDE habe: Wenn der Code ähnlich fett wird wie beim Uno würde es den Speicher vom 45 schon sprengen
Globale Variablen verwenden 262 Bytes (12%) des dynamischen Speichers, 1786 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
wno158
February 11, 2022, 9:56pm
16
Ja, tut mir auch weh - würde ich immer mit C-Strings/Char-Arrays machen; wenn der Controller es hergibt mit snprintf
, das ist ausreichend bequem.
Stammt aber aus dem Sketch aus #1 - nur halt nicht mit millis() (auskommentierte Zeile vor Ausgabe2()
).
hheck
February 12, 2022, 7:41pm
17
Bin noch nicht weiter.
Aber zunächst eine Zwischenfrage:
strang ist ein String,
sizeof(strang) liefert mir die Länge 6, also von "strang",
ich will aber nicht die Länge vom Namen der Variablen, sondern von deren momentanem Inhalt
Wie geht das?
ic
wno158
February 12, 2022, 7:42pm
18
Ist die Länge immer noch 6, wenn Du strang überall in Deinem Sketch umbenennst in strangabc ?
combie
February 12, 2022, 7:45pm
19
hheck:
strang ist ein String,
sizeof(strang) liefert mir die Länge 6, also von "strang",
ich will aber nicht die Länge vom Namen der Variablen, sondern von deren momentanem Inhalt
Wie geht das?
Man kann nicht die Länge eines Variablennamens ermitteln.
Du irrst!
Wenn das ein String ist, dann strang.length();
hheck
February 12, 2022, 7:51pm
20
@WNO158 : muß ich probieren
@combie : hatte ich doch schon ganz am Anfang, lieferte die Länge 0