Programmcode läuft nicht richtig ab

Hallo,

für ein Projekt meiner Hochschule habe ich ein kleines Testprogramm geschrieben, in dem eine LED angesteuert werden soll. Bei der Überprüfung des Programms und beim Hochladen gibt es keine Fehler, jedoch wird nicht der ganze Code ausgeführt. In meinem Programm leuchtet die LED im ersten Schritt für ein paar Sekunden durchgehend, soll dann aber in bestimmten Zeitintervallen blinken. Dies wird über for-Schleifen geregelt, jedoch wird keine der For-Schleifen ausgeführt, lediglich der Teil des Codes, der sich vor den Schleifen befindet. Kann mir da jemand weiterhelfen? Im Folgenden mein Code:

int led=13; //LED-Pin

int t_1=2; //Zeitintervall 1
int t_2=3; //Zeitintervall 2
int t_3=4; //Zeitintervall 3

float schrittweite_dbl;
int schrittweite_int;
int delay_zeit=100; // in ms


void setup() {
 // put your setup code here, to run once:
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}

void loop() {
 // put your main code here, to run repeatedly:

digitalWrite(led, HIGH);
delay(t_1*1000);
digitalWrite(led, LOW);

for (int i=1; i=t_2; i=i+1);{
 schrittweite_dbl = 1000/(i +1);
 schrittweite_int = (int)schrittweite_dbl; //abrunden falls Kommazahl bei Berechnung entsteht
 

 for (int j=1; j=i; j=j+1);{
   digitalWrite(led, HIGH);
   delay(schrittweite_int-delay_zeit/2);
   digitalWrite(led, LOW);
   delay(delay_zeit);
   digitalWrite(led, HIGH);
   }
 delay(1000-i*(schrittweite_int+delay_zeit));
}

for (int k=1; k=t_3; k=k+1);{
 digitalWrite(led, HIGH);
 delay(schrittweite_int-delay_zeit/2);
 digitalWrite(led, LOW);
 delay(delay_zeit);
 digitalWrite(led, HIGH);
 delay(1000-t_2*(schrittweite_int+delay_zeit));
}//next k
}

Es gibt einen Unterschied zwischen = und ==

Aktiviere die Warnungen dann sollte das auch angezeigt werden

Das ist eine Integer-Division:

schrittweite_dbl = 1000/(i +1);

Wenn du in Float rechnen willst musst du das dem Compiler sagen. Wobei das völlig überflüssig ist wenn du sowieso runden willst. Dann kannst du auch gleich mit Ganzzahlen rechnen

i=t_2+1
j=i+1
Wenn Er aus diesen Schleifen raus käme, wäre
k=t_3+1

Da Du aber als mittlere 'Zahl' eine Zuweisung hast (Die gibt in jedem dem Fall true zurück, wenn die Zuweisung !=0 / NULL erfolgte) und die FOR-Schleife in der Mitte die Bedingung hat, wird diese Schleife NIE beendet - zumindest sehe ich nicht, wie.

Du willst wohl eher

for (int i=1;i<=t_2;i++){
...
   for (int j=1;j<=i;j++){
...
   }
}
for (int k=1;k<=t_3;k++){
...
}

MfG

PS: Es macht durchaus Sinn, den Dingern sinnvolle Namen zu beben.
Auch kannst Du Dinge, Die konstant sind, so benennen - die Pins werden sich während der Laufzeit nicht ändern -> const
const byte led=13; (byte, da wir wohl mit 255 als Maximum hinkommen - wenn's bei const wohl auch egal ist, sollte man sich angewöhnen, den Typ zu nehmen, Den man maximal braucht)

Edit
Aufgrund #4 !=0/NULL eingesetzt

Ja, das auch noch. Das heißt zwar "Abbruchbedingung", aber das ist ähnlich zu einer while-Schleife. Eine for-Schleife wird auch ausgeführt solange die Bedingung wahr ist

postmaster-ino:
Da Du aber als mittlere 'Zahl' eine Zuweisung hast (Die gibt in jedem Fall true zurück)

Nicht in jedem Fall, sondern nur dann, wenn der zugewiesene Wert != 0 oder != NULL ist.

Gruß Tommy