Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
1217
Tıklama
0
Öne Çıkarma
Arduino kod bugu?
M
10 yıl
Yüzbaşı
Konu Sahibi

Arkdaşlar aşşağıda ki gibi bir kod yazdım ve devreme micro buttonlar koydum sıkıntı yok buralarda sorun kodun şu kısmında if(digitalRead(button1) == HIGH && oku == '1')
şimdi burda diyorki eğer butona basılırsa veya serial monitöre 1 yazırlırsa diyor fakat 2 isinden birini yapınca değil ikisini aynı anda yaparsam koşul çalışıyor nasıl düzeltirim bunu?

Kod
const int button1 = 8; 
const int button2 = 9;
const int button3 = 10;
const int button4 = 11;
int oku;

void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
Serial.begin(9600);

}
void loop() {
if(Serial.available()){
oku = Serial.read();
if(digitalRead(button1) == HIGH && oku == '1'){
Serial.println("1");
}
else if(digitalRead(button2) == HIGH && oku == '2'){
Serial.println("2");
}
else if(digitalRead(button3) == HIGH && oku == '3'){
Serial.println("3");
}
else if(digitalRead(button4) == HIGH && oku == '4'){
Serial.println("4");
}

}

}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
10 yıl
Yüzbaşı

Hic bi bilgim yok ama hocam mantiken && bnce bu ve demek buton1 basilirsa ve 1 yazinca calissin demissin herlde buton1 basilirsa veya 1 yazinca calissin demen lazim herlde && isaret skintili olabilir veya olmayabilir tamamen yanlis bi mantik yapmista olabilirim :D



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
C
10 yıl
Yüzbaşı

Kod yazıldığı kadarıyla doğru çalışıyor. && işareti "ve(and)" anlamındadır. Butona basılır "ve(and)" seri ekrandan giriş yapılırsa kod çalışacaktır.(nitekim çalışmış). "yada(or)" ifadesi || ile temsil edilir. Butona basılırsa "ya da(or)" seri ekrandan giriş yapılırsa kod çalışır.

Kaynak:https://www.arduino.cc/en/Reference/Boolean



G
10 yıl
Yarbay

&& demek ve demek onun yerine || kullabırsan sorun kalmaz



< Bu ileti mobil sürüm kullanılarak atıldı >

A
10 yıl
Yüzbaşı

Benm mantik dogruymus yani .D



< Bu ileti mobil sürüm kullanılarak atıldı >

M
10 yıl
Yüzbaşı
Konu Sahibi

Arkdaşlar kodu değiştirdim buraya yazdıktan sonra baya şu konuda yaklısınız || olması lazım tamam böyle değiştirdim ama sorun hala devam ediyor sorun şu şekilde şimdi serial monitöre 1,2,3,4 bunları sorunuz olarak çalıştırıyor fakat gel gelelim butonla bastığım zaman herhangibir tepki vermiyor kod çalışmıyor buna ilaven çalışıp çalışmadığına led bağlayıp denedim hala ayno sorun buttonlarda sıkıntı vardır diye başka kod yazıp led yakma ile ilgili tek butonla denedim sıkıntı yoktu yani sorun şu serial monitöre 1,2 vs değerlerini yazdığımda görüyor fakat butonla basıldı sürece görmüyor.

Devrede herhangibi sorun yok koda ilaven oku='0'; yaparak değişkeni boşlattım hepsinin sonunda. Ne yapmam gerekiyor?





< Bu mesaj bu kişi tarafından değiştirildi Mehmet_Ali61 -- 4 Aralık 2015; 16:07:29 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @CarnageTR , @Gktupc , @ati1919
M
10 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Mehmet_Ali61

Arkdaşlar kodu değiştirdim buraya yazdıktan sonra baya şu konuda yaklısınız || olması lazım tamam böyle değiştirdim ama sorun hala devam ediyor sorun şu şekilde şimdi serial monitöre 1,2,3,4 bunları sorunuz olarak çalıştırıyor fakat gel gelelim butonla bastığım zaman herhangibir tepki vermiyor kod çalışmıyor buna ilaven çalışıp çalışmadığına led bağlayıp denedim hala ayno sorun buttonlarda sıkıntı vardır diye başka kod yazıp led yakma ile ilgili tek butonla denedim sıkıntı yoktu yani sorun şu serial monitöre 1,2 vs değerlerini yazdığımda görüyor fakat butonla basıldı sürece görmüyor.

Devrede herhangibi sorun yok koda ilaven oku='0'; yaparak değişkeni boşlattım hepsinin sonunda. Ne yapmam gerekiyor?

 
#define buTton1 8
#define buTton2 9
#define buTton3 10
#define buTton4 11
char oku;

void setup() {
pinMode(buTton1, INPUT);
pinMode(buTton2, INPUT);
pinMode(buTton3, INPUT);
pinMode(buTton4, INPUT);
Serial.begin(9600);

}
void loop() {

oku = Serial.read();
if(digitalRead(buTton1) == HIGH || oku == '1')
{
Serial.println("1");
}
else if(digitalRead(buTton2) == HIGH || oku == '2'){
Serial.println("2");
}
else if(digitalRead(buTton3) == HIGH || oku == '3'){
Serial.println("3");
}
else if(digitalRead(buTton4) == HIGH || oku == '4'){
Serial.println("4");
} else if(digitalRead(buTton1) == HIGH && oku == '1'){
Serial.println("X");
}
else if(digitalRead(buTton2) == HIGH && oku == '2'){
Serial.println("X");
}
else if(digitalRead(buTton3) == HIGH && oku == '3'){
Serial.println("X");
}
else if(digitalRead(buTton4) == HIGH && oku == '4'){
Serial.println("X");
}



}


Dostum yazılımını düzelttim. İstediğin işlemi yapamamanın sebebi Serial.availble yani seri porttan veri gelirse komutunu kullanman.Kod bloğunu if(Serial.available()) koşulunun altına yazdığın için seri porttan veri göndermezsen aşağıdaki koşullara erişemezsin.





< Bu mesaj bu kişi tarafından değiştirildi mrkabaca -- 4 Aralık 2015; 17:12:10 >
Bu mesaja 1 cevap geldi.
M
10 yıl
Yüzbaşı
Konu Sahibi

Şimdi şöyle bir sıkıntı var ben bunlara led kodu ekledim ayrıyetten nasıl çalıştığını daha rahat anlamak için. Serial.available'yi porttan veri gelirse dedim çünkü eğer öyle olmaz ise kafasına göre veriler geliyor yani şuan senin kodu denedim serial montiörü açtığımda sürekli kendi kendine sayı yazdırıyor 1,2,3,4 şeklinde ayrıyetten led bağladım denedim mesela ledler kendi kendine direk yanıyor çünkü veri geliyor sürekli kod aşşağıda bu sorunu anlamadım cidden çok acayip. Yardım için teşekkürler cevabını bekliyorum.

#define buTton1  8 
#define buTton2 9
#define buTton3 10
#define buTton4 11
#define led1 7
#define led2 6
#define led3 5
#define led4 4
char oku;

void setup() {
pinMode(buTton1, INPUT);
pinMode(buTton2, INPUT);
pinMode(buTton3, INPUT);
pinMode(buTton4, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
Serial.begin(9600);

}
void loop() {

oku = Serial.read();
if(digitalRead(buTton1) == HIGH || oku == '1')
{
digitalWrite(led1, HIGH);
Serial.println("1");
}
else if(digitalRead(buTton2) == HIGH || oku == '2'){
digitalWrite(led2, HIGH);
Serial.println("2");
}
else if(digitalRead(buTton3) == HIGH || oku == '3'){
digitalWrite(led3, HIGH);
Serial.println("3");
}
else if(digitalRead(buTton4) == HIGH || oku == '4'){
digitalWrite(led4, HIGH);
Serial.println("4");
} else if(digitalRead(buTton1) == HIGH && oku == '1'){

Serial.println("X");
}
else if(digitalRead(buTton2) == HIGH && oku == '2'){

Serial.println("X");
}
else if(digitalRead(buTton3) == HIGH && oku == '3'){

Serial.println("X");
}
else if(digitalRead(buTton4) == HIGH && oku == '4'){

Serial.println("X");
}



}


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @mrkabaca
M
10 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Mehmet_Ali61

Şimdi şöyle bir sıkıntı var ben bunlara led kodu ekledim ayrıyetten nasıl çalıştığını daha rahat anlamak için. Serial.available'yi porttan veri gelirse dedim çünkü eğer öyle olmaz ise kafasına göre veriler geliyor yani şuan senin kodu denedim serial montiörü açtığımda sürekli kendi kendine sayı yazdırıyor 1,2,3,4 şeklinde ayrıyetten led bağladım denedim mesela ledler kendi kendine direk yanıyor çünkü veri geliyor sürekli kod aşşağıda bu sorunu anlamadım cidden çok acayip. Yardım için teşekkürler cevabını bekliyorum.

#define buTton1  8 
#define buTton2 9
#define buTton3 10
#define buTton4 11
#define led1 7
#define led2 6
#define led3 5
#define led4 4
char oku;

void setup() {
pinMode(buTton1, INPUT);
pinMode(buTton2, INPUT);
pinMode(buTton3, INPUT);
pinMode(buTton4, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
Serial.begin(9600);

}
void loop() {

oku = Serial.read();
if(digitalRead(buTton1) == HIGH || oku == '1')
{
digitalWrite(led1, HIGH);
Serial.println("1");
}
else if(digitalRead(buTton2) == HIGH || oku == '2'){
digitalWrite(led2, HIGH);
Serial.println("2");
}
else if(digitalRead(buTton3) == HIGH || oku == '3'){
digitalWrite(led3, HIGH);
Serial.println("3");
}
else if(digitalRead(buTton4) == HIGH || oku == '4'){
digitalWrite(led4, HIGH);
Serial.println("4");
} else if(digitalRead(buTton1) == HIGH && oku == '1'){

Serial.println("X");
}
else if(digitalRead(buTton2) == HIGH && oku == '2'){

Serial.println("X");
}
else if(digitalRead(buTton3) == HIGH && oku == '3'){

Serial.println("X");
}
else if(digitalRead(buTton4) == HIGH && oku == '4'){

Serial.println("X");
}



}


Dostum şu kafasına göre veriler geliyo olayını bana bi anlatsana senin kodunu şimdi derledim attım uno'ya bi sıkıntı yok bence sen butonlarına bağladığın pull up-down dirençlerini kontrol et.


Bu mesaja 1 cevap geldi.
C
9 yıl
Çavuş

Hocam o olaya elektriksel ortam gürültüsü deniliyor. 10K'lık bir Pull Down direnciyle halledersin. Öbür türlü dijital giriş boşta kalacağından elektriksel ortam gürültüsü rastgele ve tutarsız değerler okunmasına neden olur.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.