Basit bir soru. if döngüsünden atlama

Başlatan veliusta, 15 Aralık 2015, 21:50:13

veliusta

if(MOD==0){
 X Yap;
 BEKLE_BAKALIM();
 Y Yap;
 BEKLE_BAKALIM();
 .
 .
 . 
}

void BEKLE_BAKALIM(){
delay_ms(10000);
 if(butona basarsan){
 MOD=1;
 }
}


MOD değeri 1 olduğunda MOD==0 döngüsünü bitirmeden atlamıyor.
Bu yüzden bende
BEKLE_BAKALIM(); 'ın altına tekrar tekrar if(MOD==0){ koşulunu koyuyorum.

Başka bir yöntem var mıdır?

Gökhan BEKEN

Neden MOD=1 yaptın? MOD değişkenini nerde kullanıyorsun? Döngü içinde sürekli mi yapıyorsun? Main fonksiyonun nerde?
Özel mesaj okumuyorum, lütfen göndermeyin.

veliusta

#2
int main(void){

while(1){
 if(MOD==0){
 digitalWrite(3, LOW);
 BEKLE_BAKALIM();
 digitalWrite(4, HIGH);
 BEKLE_BAKALIM();
 .
 .
 .
 if(MOD==1){
 digitalWrite(5, LOW);
 BEKLE_BAKALIM();
 digitalWrite(6, HIGH);
 BEKLE_BAKALIM();
 .
 .
 .
 if(MOD==2){
 digitalWrite(8, LOW);
 BEKLE_BAKALIM();
 digitalWrite(10, HIGH);
 BEKLE_BAKALIM();
 .
 .
 .
 }
}
}

void BEKLE_BAKALIM(){
delay_ms(10000);
 if(butona basarsan){
 MOD++;
 }
}


Örnek olarak şunun gibi.

ds01

Aşağıdaki şekilde bir kontrol değişkeni eklenerek  kontrol edilebilir gibi.
kontrol=0;

void loop(){
  if(butondurum==1 && kontrol==0){
    digitalWrite(13,HIGH);
    kontrol=1;
  } 
  else if(butondurum==0 && kontrol==1){
    digitalWrite(13,LOW);
    kontrol=0;
  }
}


Gökhan BEKEN

kontrol=0;

void main(void){

	while(1){
		if(ButonOku(PIN_1)){
			butonSayac++;
			if(butonSayac>=10){
				butonSayac=0;
			}
		}
		else continue; //butona basılmamışsa başa dön
		
		switch(butonSayac) { //butona basılmışsa
			case 1  :
				Islem1();
				break;
			
			case 2  :
				Islem2();
				break;
			  
			case 3  :
				Islem2();
				break;

			.
			.

			case 10  :
				Islem10();
				break;

			default :
				continue;
		}
		DelayMs(1000);
	}
}
Özel mesaj okumuyorum, lütfen göndermeyin.

engineer

koşulu tekrar sınayıp break kullanmak gerek yada goto..

if(MOD==0){
 X Yap;
 BEKLE_BAKALIM();
 if(MOD) break;
 Y Yap;
 BEKLE_BAKALIM();
 if(MOD) break; 
.
 .
 . 
}

void BEKLE_BAKALIM(){
delay_ms(10000);
 if(butona basarsan){
 MOD=1;
 }
}

veliusta

#6
Arkadaşlar yapmak istediğimi sanırım anlatamadım size.


int MOD, Y;

void setup(){
  pinMode(2, INPUT_PULLUP);
}

void loop(){
  if(MOD==0){
 digitalWrite(2, LOW);
 BEKLE();
 if(MOD==0){
 digitalWrite(3, LOW);
 BEKLE();
 if(MOD==0){
 digitalWrite(4, LOW);
 BEKLE();
 if(MOD==0){
 digitalWrite(5, LOW);
 BEKLE();
 if(MOD==0){
 .
 if(MOD==0){
 .
 if(MOD==0){
 .
}

 if(MOD==1){
 digitalWrite(2, HIGH);
 BEKLE();
 if(MOD==1){
 digitalWrite(3, HIGH);
 BEKLE();
 if(MOD==1){
 digitalWrite(4, HIGH);
 BEKLE();
 if(MOD==1){
 digitalWrite(5, HIGH);
 BEKLE();
 if(MOD==1){
 .
 if(MOD==1){
 .
 if(MOD==1){
 .
}

 if(MOD==2){
 digitalWrite(2, LOW);
 BEKLE();
 if(MOD==2){
 digitalWrite(3, HIGH);
 BEKLE();
 if(MOD==2){
 digitalWrite(4, LOW);
 BEKLE();
 if(MOD==2){
 digitalWrite(5, HIGH);
 BEKLE();
 if(MOD==2){
 .
 if(MOD==2){
 .
 if(MOD==2){
 .
 }
}

void BEKLE(){
  for(Y=0; Y<1000; Y++){
    delay(1);
  if(digitalRead(2)==LOW){
 MOD++;
 } 
}
}


Ben böyle kullanıyorum. Başka yöntem var mıdır?

Gökhan BEKEN

if(MOD==1){
 .
 if(MOD==1){
 .
 if(MOD==1){


yapacağına

int i=0;
while(i<3){
    if(MOD==1){
    }
}

yap.

Bir de yardım istediğin kodlarını çalışabilecek şekilde yaz ki ne yapmak istediğini anlayalım. Açtığın parantezleri bile kapatmamışsın.
Özel mesaj okumuyorum, lütfen göndermeyin.

veliusta

@Gökhan BEKEN
Tamam. Aceleden unutmuşum.

int MOD, Y;

void setup(){
  pinMode(2, INPUT_PULLUP);
}

void loop(){
  if(MOD==0){
 digitalWrite(2, LOW);
 BEKLE();
 }
 if(MOD==0){
 digitalWrite(3, LOW);
 BEKLE();
 }
 if(MOD==0){
 digitalWrite(4, LOW);
 BEKLE();
 }
 if(MOD==0){
 digitalWrite(5, LOW);
 BEKLE();
}
 if(MOD==0){
 digitalWrite(6, LOW);
 BEKLE();
}
 if(MOD==0){
 digitalWrite(7, LOW);
 BEKLE();
}
 if(MOD==0){
 digitalWrite(8, LOW);
 BEKLE();
}
 if(MOD==0){
 digitalWrite(9, LOW);
 BEKLE();
}
 if(MOD==0){
 digitalWrite(10, LOW);
 BEKLE();
}

  if(MOD==1){
 digitalWrite(2, HIGH);
 BEKLE();
 }
 if(MOD==1){
 digitalWrite(3, LOW);
 BEKLE();
 }
 if(MOD==1){
 digitalWrite(4, HIGH);
 BEKLE();
 }
 if(MOD==1){
 digitalWrite(5, LOW);
 BEKLE();
}
 if(MOD==1){
 digitalWrite(6, HIGH);
 BEKLE();
}
 if(MOD==1){
 digitalWrite(7, HIGH);
 BEKLE();
}
 if(MOD==1){
 digitalWrite(8, LOW);
 BEKLE();
}
 if(MOD==1){
 digitalWrite(9, HIGH);
 BEKLE();
}
 if(MOD==1){
 digitalWrite(10, HIGH);
 BEKLE();
}

  if(MOD==2){
 digitalWrite(2, HIGH);
 BEKLE();
 }
 if(MOD==2){
 digitalWrite(3, LOW);
 BEKLE();
 }
 if(MOD==2){
 digitalWrite(4, HIGH);
 BEKLE();
 }
 if(MOD==2){
 digitalWrite(5, LOW);
 BEKLE();
}
 if(MOD==2){
 digitalWrite(6, LOW);
 BEKLE();
}
 if(MOD==2){
 digitalWrite(7, LOW);
 BEKLE();
}
 if(MOD==2){
 digitalWrite(8, LOW);
 BEKLE();
}
 if(MOD==2){
 digitalWrite(9, HIGH);
 BEKLE();
}
 if(MOD==2){
 digitalWrite(10, HIGH);
 BEKLE();
 }
}

void BEKLE(){
  for(Y=0; Y<1000; Y++){
    delay(1);
  if(digitalRead(2)==LOW){
 MOD++;
 }
}
}



engineer

Şu şekilde olabilir;

int MOD, Y, X;

void setup(){
	pinMode(2, INPUT_PULLUP);
}

void loop(){
	for(X = 2; MOD == 0; X++){
		digitalWrite(X, LOW);
		BEKLE();
		if(X == 10) break;
	}

	for(X = 2; MOD == 1; X++){
		if((X == 3) || (X == 5) || (X == 8)) 
			digitalWrite(X, LOW);
		else
			digitalWrite(X, HIGH);
		
		BEKLE();
		if(X == 10) break;
	}
	

	for(X = 2; MOD == 2; X++){
		if((X == 2) || (X == 4) || (X == 9) || (X == 10)) 
			digitalWrite(X, HIGH);
		else
			digitalWrite(X, LOW);
		
		BEKLE();
		if(X == 10) break;
	}
}

void BEKLE(){
	for(Y=0; Y<1000; Y++){
		delay(1);
		if(digitalRead(2)==LOW){
			MOD++;
		}
	}
}

veliusta

#10
Gerek kalmadı. break ve continue kullanmadan yapabildim.
void ve while döngüsü kullarak yaptım.
Çok fazla void sıçraması olacak. Kaldığı yerleri ram hafızında tutuyordu gelba. Umarım sorun olmaz.

Teşekkürler herkese.

Teşekkürler @engineer