Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: veliusta - 15 Aralık 2015, 21:50:13

Başlık: Basit bir soru. if döngüsünden atlama
Gönderen: veliusta - 15 Aralık 2015, 21:50:13
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?
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: Gökhan BEKEN - 15 Aralık 2015, 21:54:25
Neden MOD=1 yaptın? MOD değişkenini nerde kullanıyorsun? Döngü içinde sürekli mi yapıyorsun? Main fonksiyonun nerde?
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: veliusta - 15 Aralık 2015, 22:02:49

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.
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: ds01 - 15 Aralık 2015, 22:33:53
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;
  }
}

Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: Gökhan BEKEN - 15 Aralık 2015, 22:51:03
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);
}
}
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: engineer - 15 Aralık 2015, 23:00:21
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;
}
}
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: veliusta - 15 Aralık 2015, 23:12:29
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?
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: Gökhan BEKEN - 15 Aralık 2015, 23:17:40
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.
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: veliusta - 15 Aralık 2015, 23:24:44
@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++;
}
}
}


Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: engineer - 16 Aralık 2015, 00:27:30
Ş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++;
}
}
}
Başlık: Ynt: Basit bir soru. if döngüsünden atlama
Gönderen: veliusta - 16 Aralık 2015, 01:10:34
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