Hallo, ich bin gerade dabei für ein Fach einen Morsecodeübersetzer zu basteln und bin dabei auf ein Problem gestoßen. Ich möchte, dass sich eine Zählervariable bei jedem Durchlauf des "void loop()" um 1 erhöht. Ich habe bisher schon alles versucht (counter++, counter = counter + 1,...) aber es funktioniert nichts. Die Variable wird bei jedem Durchlauf wieder zurückgesetzt und ich ende immer wieder bei dem Wert 1. Kann mir irgendjemand sagen, ob es eine Möglichkeit gibt einen Zähler zu installieren der die Durchläufe des "void loop()" erfasst? Würde mir ungemein helfen!!! Grüße, Stephan
Du darfst die Zählervariable nicht im Loop mit einem festen Wert überschreiben. Irgendwo scheint dein Code genau das zu tun. Da du deinen Code jedoch nicht zeigst, kann dir leider niemand sagen an welcher Stelle das passiert und wie du das beheben kannst. Prinzipiell sollte für deinen Zweck nichts gegen ein Inkrement mit dem ++-Operator sprechen. Veröffentliche deinen Quelltext.
Möglichkeit 1: globale Variable Möglichkeit 2: static-Deklaration innerhalb der Funktion Diese Information findet man auch in jedem ordentlichen Lehrbuch für die von Dir verwendete, offenbar C-artige Programmiersprache.
Hallo, das geht ja hier wirklich schnell :)!
Ich habe bereits versucht die Variable (im Code unten "counter") als
globale Variable ohne Wert zu initialisieren. Des weiteren habe ich es
im "void setup()" versucht. Beides führt zum selben Ergebnis. Die
Variable wird nach jedem loop-Durchlauf wieder auf 0 zurückgesetzt und
ich Ende an der relevanten Stelle wieder bei counter = 1.
Nicht wundern der Code ist noch nicht fertig. Im Moment gehts mir nur
darum, dass beim ersten Durchlauf die Variable A einen neuen Wert (1
oder 2 für kurz oder lang) bekommt und beim zweiten Durchlauf der Loop
die Variable B.
Code:
int A;
int B;
//Light measurement
int lightpin = 0;
float state;
float threshold = 400;
//Time measure
unsigned long startS;
unsigned long finishS;
unsigned long startB;
unsigned long finishB;
unsigned long signtime;
void setup()
{
Serial.begin(9600);
ambient = analogRead(lightpin);
}
void loop()
{
state = analogRead(lightpin);
Serial.println(counter);
while(state >= threshold){
state = analogRead(lightpin);
startS = millis();
finishB = millis();}
while(state <= threshold){
state = analogRead(lightpin);
finishS = millis();}
startB = millis();
signtime = finishS - startS;
counter = counter++;
if(signtime <= 2000){
if(counter = 1){
A = 2;}
else if(counter = 2){
B = 2;}}
if(signtime <= 1000){
if(counter = 1){
A = 1;}
else if(counter = 2){
B = 2;}}
}
Stephan R schrieb: > counter = counter++; Wenn ich mich recht erinnere, ist das nicht definiert und darf alles bewirken. Außerdem sehe ich nicht, wo Counter deklariert wird.
Deklariere "counter" anständig Mach keine zusätzlichen Zuweisungen beim ++-Inkrement Schau dir Vergleichsoperatoren an! In die If-Verzweifungen gehören Vergleiche, keine Zuweisungen
Wenn das C ist, dann sind deine Vergleiche (auf Gleichheit) bei den if falsch.
Ach mist, jetzt habe ich die Version gepostet an der ich gerade rumgespielt habe :(. Die Deklarierung erfolgte in dieser Version ursprünglich als globale Variable. int counter; Allerdings scheint es mir als ob es ganz egal ist wo ich die Variable deklariere. Es funktioniert einfach nicht. Ich versuch es jetzt einmal mit einer static innerhalb der loop. Vielen Dank auf jedenfall für die Tipps und es ist echt großartig wie schnell einem hier geholfen wird! Grüße
Stephan R schrieb: > Allerdings scheint es mir als ob es ganz egal ist wo ich die Variable > deklariere. Es funktioniert einfach nicht. Ich versuch es jetzt einmal > mit einer static innerhalb der loop. Das wird dir auch nichts nützen. Daaaaaa: if(counter = 1) ^ mfg.
Stephan R schrieb: > counter = counter++; Das ist Unfug, weil undefiniert. Entweder ++counter; oder counter++; oder counter += 1; oder counter = counter + 1;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.