Go Down

Topic: Fehler im Sketch (Read 1 time) previous topic - next topic

XentriX5526

GELÖST!

hahaha...

*Schlafmangel*

FRAGE:

Wo ist der unteschied zwischen ==3 und >=3 ?

LÖSUNG:

Es gibt keinen!

Mein Sketch hat sich zum Schluss immer selbst ins Aus geschossen.

bei erreichen des Wert 3 für Zaehler wurde 1x der Blinkzyklus durchlaufen, danach sofort der Sketch abgebrochen.

DANKE:

...an all eure Hilfe.
Besonders an Tommy56 & HTML-Fan!

PS: dass er beim drücken nur einmal zählt habe ich mit 2 Variablen hinbekommen die in Sketch als "Register-Zustände" beide gleich sein müssen um den Wert um 1 zu erhöhen...

Ich werde nun meinen Sketch final fertig machen und dann nochmal posten.

 :)

XentriX5526

Code: [Select]
#include <MultiFuncShield.h>

const int Schalter = A1;
const int LED = 12;
int SchalterZustand;
int Merker;
int Zaehler = 0;

#define ON LOW
#define OFF HIGH

void setup() {
  Timer1.initialize();
  MFS.initialize(&Timer1); // initialize multi-function shield library
  MFS.write("Load");
  delay(500);
 
  pinMode(Schalter,INPUT);
  pinMode(LED,OUTPUT);
  digitalWrite(Schalter,HIGH);
}

void loop() {
  MFS.write(Zaehler);
  digitalWrite(LED,OFF);
  SchalterZustand = digitalRead(Schalter);
 
  if(SchalterZustand==LOW && Merker==LOW) {
    Zaehler++;
    MFS.write(Zaehler);
    Merker = HIGH;
  }

  if(SchalterZustand==HIGH && Merker==HIGH) {
    MFS.write(Zaehler);
    Merker = LOW;
  }
 
  if(Zaehler==3) {
    // Blinkzyklus
  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
  delay(50);

  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
  delay(50);
 
  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
 
  delay(500); 
    MFS.write(Zaehler);
  }
 
  if(Zaehler==4) {
    digitalWrite(LED,OFF);
    Zaehler = 0;
    MFS.write(Zaehler);
  }
}

HotSystems

FRAGE:

Wo ist der unteschied zwischen ==3 und >=3 ?

LÖSUNG:

Es gibt keinen!
Natürlich ist da ein Unterschied, oder siehst du das nur nicht ?
Beim Ersten passiert NUR bei "3" etwas, beim zweiten bei "3" und größer.
Nun sag nicht, da ist kein Unterschied.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HTML-Fan

Code: [Select]
#include <MultiFuncShield.h>

const int Schalter = A1;
const int LED = 12;
int SchalterZustand;
int Merker;
int Zaehler = 0;

#define ON LOW
#define OFF HIGH

void setup() {
  Timer1.initialize();
  MFS.initialize(&Timer1); // initialize multi-function shield library
  MFS.write("Load");
  delay(500);
  
  pinMode(Schalter,INPUT);
  pinMode(LED,OUTPUT);
  digitalWrite(Schalter,HIGH);
}

void loop() {
  MFS.write(Zaehler);
  digitalWrite(LED,OFF);
  SchalterZustand = digitalRead(Schalter);
  
  if(SchalterZustand==LOW && Merker==LOW) {
    Zaehler++;
    MFS.write(Zaehler);
    Merker = HIGH;
  }

  if(SchalterZustand==HIGH && Merker==HIGH) {
    MFS.write(Zaehler);
    Merker = LOW;
  }
  
  if(Zaehler==3) {
    // Blinkzyklus
  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
  delay(50);

  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
  delay(50);
  
  digitalWrite(LED,ON);
  delay(50);
  digitalWrite(LED,OFF);
  
  delay(500);  
    MFS.write(Zaehler);
  }
  
  if(Zaehler==4) {
    digitalWrite(LED,OFF);
    Zaehler = 0;
    MFS.write(Zaehler);
  }
}

Ahh, endlich klappt alles!
Kleiner Tipp, was den Speicherplatz betrifft: Es gibt statt int den Typ bool, der 0 oder 1, bzw. HIGH und LOW oder true oder false speichert. Diese Variable braucht weniger Speicher. Also kannst du den Merker und SchalterZustand zu bools machen. Auch bei dem Zähler kannst du mit dem Typ byte Speicherplatz sparen.
Noch was, so als Anregung: Momentan kann man jeden Tag einmal drücken und am dritten Tag wird der BlinkZyklus ausgeführt. Es sollte ja am Anfang ein "Geheim"-Code werden und da könnte man ja etwas programmieren, dass zwischen zwei Mal drücken nur eine Pause von 500ms oder so sein darf oder dass man einmal kurz, lang und wieder kurz drücken muss.

Tommy56

Ein bool bzw. boolean braucht 1 Byte.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

HTML-Fan

#35
Aug 01, 2018, 09:49 am Last Edit: Aug 01, 2018, 09:51 am by HTML-Fan
Ein bool bzw. boolean braucht 1 Byte.

Gruß Tommy
Ja, weswegen eigentlich? 0 oder 1 kann doch auch in einem Bit gespeichert werden.

HTML-Fan

Natürlich ist da ein Unterschied, oder siehst du das nur nicht ?
Beim Ersten passiert NUR bei "3" etwas, beim zweiten bei "3" und größer.
Nun sag nicht, da ist kein Unterschied.

Aber beides verursacht den gleichen Fehler. So war das, glaube ich, gemeint.

MicroBahner

#37
Aug 01, 2018, 11:11 am Last Edit: Aug 01, 2018, 11:14 am by MicroBahner
Ja, weswegen eigentlich? 0 oder 1 kann doch auch in einem Bit gespeichert werden.
Weil 1 Byte die kleinste Einheit ist, die der Compiler im RAM reservieren kann.

Wenn das RAM knapp ist, kannst du aber mittels eines struct mehrere boolean als 1-Bit-Werte in einem Byte unterbringen. ( Ok, geht natürlich auch wenn das RAM nicht knapp ist  :D  )
Gruß, Franz-Peter

HTML-Fan

Weil 1 Byte die kleinste Einheit ist, die der Compiler im RAM reservieren kann.

Wenn das RAM knapp ist, kannst du aber mittels eines struct mehrere boolean als 1-Bit-Werte in einem Byte unterbringen. ( Ok, geht natürlich auch wenn das RAM nicht knapp ist  :D  )
Doofe Frage: Was ist ein struct?

Tommy56

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Serenifly

Es gibt übrigens µC die Bit-adressierbar sind. Beim 8051/52 z.B. kann man in einem Teil des RAMs einzelne Bits ansprechen. Jedenfalls in Assembler

XentriX5526

Natürlich ist da ein Unterschied, oder siehst du das nur nicht ?
Beim Ersten passiert NUR bei "3" etwas, beim zweiten bei "3" und größer.
Nun sag nicht, da ist kein Unterschied.

So war es nicht gemeint... natürlich ist da ein unterschied...

aber wenn der Sketch sagt:

==3 Geh Links
>=3 Geh Rechts

Was würdest du dann machen wenn der Zaehler den Wert 3 erreicht ;)

HotSystems

Aber beides verursacht den gleichen Fehler. So war das, glaube ich, gemeint.
Dann sollte sich der TO zukünftig besser ausdrücken, wir können keine Gedanken lesen.
Aber wir arbeiten dran.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HotSystems

So war es nicht gemeint... natürlich ist da ein unterschied...

aber wenn der Sketch sagt:

==3 Geh Links
>=3 Geh Rechts

Was würdest du dann machen wenn der Zaehler den Wert 3 erreicht ;)
Siehe mein Post #42.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

XentriX5526

Dann sollte sich der TO zukünftig besser ausdrücken, wir können keine Gedanken lesen.
Aber wir arbeiten dran.

;) auch ich werde daran arbeiten.

Go Up