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?
Neden MOD=1 yaptın? MOD değişkenini nerde kullanıyorsun? Döngü içinde sürekli mi yapıyorsun? Main fonksiyonun nerde?
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.
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;
}
}
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);
}
}
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;
}
}
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?
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.
@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++;
}
}
}
Ş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++;
}
}
}
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