byte vs. int

Hallo,
ich habe folgenden Sketch einmal mit zwei unterschiedlichen Variablendeklarationen ausprobiert.
i habe ich einmal als Byte deklariert. Die LED blendet von dunkel bis hell auf und dann beginnt das Spielchen von vorne.
Auf dem Seriellen Monitorerscheint nur
Hallo
start
und dann nichts mehr.
Wenn ich i als int deklariere läuft alles erwartungsgemäß, sprich auf dem seriellen Monitor erscheint:
Hallo
start
ende
start
ende usw.
Woran könnte es liegen? i läuft von 0 bis 255, somit müsste Byte doch eigentlich ausreichen.
Vielen Dank im Voraus
Gruß
Ardubu

// Dim an LED using a PWM pin
int PWMpin = 13; // LED in series with 470 ohm resistor on pin 13
byte i=0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Hallo");
}

void loop()
{
  Serial.println("start");
  for (i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   }
  Serial.println("ende");
}

[EDIT] Sketch in CODE TAGs gegeben. Uwe[/EDIT]

Dieser Quelltext beeindruckt mich sehr.

Edit: Wegen Uwe´s Änderung könnt ihr meinen Post ignorieren.

Nicht nur dich :wink: Irgendwo wieder abgeschrieben :drooling_face:

i wird nie wieder zurückgesetzt, es kommt zum Overflow. Mehr kann ich da ohne Kopfschmerzen nicht lesen

// Dim an LED using a PWM pin
int PWMpin = 13; // LED in series with 470 ohm resistor on pin 13
byte i=0;

void setup()
{
Serial.begin(9600);
Serial.println("Hallo");
}

void loop()
{
Serial.println("start");
for (i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
Serial.println("ende");
}

So ists besser lesbar, glaub ich...

Die Variable läuft im letzten Schritt von 255 auf 0 über und die Schleife wird damit immer ausgeführt.

Sieht man hiermit:

for(byte i = 250; i <= 255; i++)
{
   Serial.println(i);
   delay(200);
}

Hat nichts mit Rücksetzen zu tun, sondern einfach damit, dass beim letzten Inkrementieren (und bevor die Bedingung überprüft wird) 255 + 1 = 256 gemacht wird.

clockwork orange XD

byte geht bis 255, Bedingung lautet i <=255

also erst unwahr wenn i > 255 , geht aber nicht bei byte!!!
schleife läuft nicht bis ende sondern 'overflow' mit restart

Grüsse
Christian

und der Sketch funktioniert mit int nur, weil dieser auf 256 geht. 256 wäre aber keine Wert für PWM mehr. Sprich PWM dürfte dann wieder auf 0 stehen, obwohl der Wert 256 in i steht.

Vielen Dank nochmal an alle für die rege Beteiligung, es hat mir gut weiter geholfen.
Gruß
Ardubu

Außerdem ist pin 13 beim Arduino UNO kein PWM-Pin.
@Marcus W bitte benutze für den sketch die CODE TAGS (so wie ich Deinen ersten Post ausgebessert habe). Die CODE TAGS bekommst du mit dem #-Ikone oberhalb des Editorfensters.
Grüße Uwe

@Uwe: ich glaube, du hast da was verwechselt. Ich hab lediglich dem sinnlos verwüsteten Code durch direktes Posten seinen BB-Code-Schrecken genommen :grin:

Oh entschuldige
@ardubu bitte benutze für den Sketch die CODE TAGS (so wie ich Deinen ersten Post ausgebessert habe). Die CODE TAGS bekommst Du mit dem #-Ikone oberhalb des Editorfensters.
Grüße Uwe

Ach Mööönsch Uwe, nun ist mein Beitrag #1 nutzlos geworden und ich kann den nun auch editieren. Ich hätte den Quelltext so gelassen, um zu zeigen was richtiges C ausmacht. :smiley: :smiley:

Hallo Uwe,
sorry für den nicht leserlichen Code, aber ich habe den Code mit # eingesetzt, und dann hat der Editor, das was ihr gesehen habt, daraus gemacht. Was habe ich falsch gemacht?
Gruß
Ardubu

Jop, beim kopieren hast du den Fehler gemacht. In der Arduino IDE nicht "Für Forum kopieren" auswählen sondern einfach kopieren. Dann entsprechend mit [code] .... [/code] hier einfügen.

Hallo sschultewolter,
danke für den Hinweis, ich hatte es mit "Für Forum Kopieren gemacht".

:slight_smile: