counter im void loop()

Gast #4091433
Lesenswert?
• ▲
▼
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
Gast #4091437
Lesenswert?
• ▲
▼
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.
Gast #4091452
Lesenswert?
• ▲
▼
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;}}

}
Gast #4091473
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.