const int ledPin = 22; const int ledPinn = 24; const int ledPinnn = 26; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()) { int a = Serial.read(); if(a == ‘1’) { digitalWrite(ledPin, HIGH); } if (a == ‘0’) { digitalWrite(ledPin, LOW); } if(a == ‘3’) { digitalWrite(ledPinn, HIGH); } if (a == ‘2’) { digitalWrite(ledPinn, LOW); } if(a == ‘5’) { digitalWrite(ledPinnn, HIGH); } if (a == ‘4’) { digitalWrite(ledPinnn, LOW); } } } BU KOD ÇALIŞIYOR SORUNSUZ PROBLEM YOK int a işte buraya dikkat %100 sorun burda const int ledPin = 22; const int ledPinn = 24; const int ledPinnn = 26; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()) { int a = Serial.read(); if(a == ‘11’) { digitalWrite(ledPin, HIGH); } if (a == ‘10’) { digitalWrite(ledPin, LOW); } if(a == ‘3’) { digitalWrite(ledPinn, HIGH); } if (a == ‘2’) { digitalWrite(ledPinn, LOW); } if(a == ‘5’) { digitalWrite(ledPinnn, HIGH); } if (a == ‘4’) { digitalWrite(ledPinnn, LOW); } } } FAKAT BU KOD ÇALIŞMIYO 10 VE 11 İ ALGILAMIYOR NEDENİ İNT 8 OLARAK MI NE OLUYOR GALİBA DAHA ÖNCE BÖYLE BİŞEY OLMUŞTU int16 OLARAK TANIMLADIM GEÇTİYDİ FAKAT BURDA TAM OLARKA BUNU YAPAMIYOM ACABA NEDEN ? YADA BÖYLE BİŞEY NASIL YAPABİLİRİM YADA SORUNUM BUNDAN FARKLIMI ?
ilk 9 rakamı character olarak yazdırabilirsiniz fakat 10 veya 11 i direk yazdıramazsının cunku pc bunu yani 10 u 1 ve sıfır olarak algılar yani ayrı ayrı degermiş gibi 10 ve 11 in char tiplerini bulmanız gerekir
Yaw bu çok saçma değilmi int8 olarka bile tanımlayamıyorsak nerde arduinonun faydaları ? picte başıma gelmişti ulan ne eski teknoloji dedimde arduinoda böyle birşey aşırı dislike olur ya bunun başka yolu yokmu picte bile olan bi özellik arduinoda yokmu yani yada ? anlamadım
eski tekneloji felan alakası yok bir sayının yada karakterin pc ortamında yani digital ortamda bit degerine göre karsılıgı vardır ve bu hiçbir zaman degişmez pic teki 11 yada 10 u nasıl yazıyorsanız öyle deneyin lutfen
void setup() { Serial.begin(9600); } void loop() { int a=0; a=a++; delay(300); if(a>10) Serial.print(“a”); } bu kod çalışıyor yani a yı yukarda 110 oalrak görüyor void setup() { Serial.begin(9600); } void loop() { int a=110; a=a++; delay(300); if(a>10) Serial.print(“a”); } bu kod çalışmıyor yani8 e kadar felan sayıyor ben sorunumu şöyle çömüştüm int a=0; yerine => int32 a=0; yazdım ve int olarka 2^32ye kadar max değer alabilirsin dediler ve problemim halloldu 300e kadar sayması gerekiyordu sayabildi burdada problem aynı 9u geçmesini istiyorum ve bunu yapmıyor yok yani şuan çokta lazım değil ama hallediyim çıksın ne olduğunu bileyim dedim kızgınlığım size değil arduinoyu süper pic olarak tanıtanlara lütfen alınmayın yoksa ben bunalra A B C D felan derim 2 tane li yazsam 21!2 tane farklı karakter olur kaldıki çok dah abüyük yazabilir yani ABC 1 ABD 2 ABE 3 ABF 4 felan böyle çoğaltabilirm pin sayılıarınıda başka yerde zorunlu olarak int olursa yani uyuma süresi olan delayı değiştirmek istersem diye bunun öğrenmek istiyorum ilgi için teşekkürler kolay gelsin
- programda 8 e kadar nasıl saydırabiliyorsunuz ki serial iletişim ekranından gördugum kadarıyla kodda a 10 dan buyukse yazılır kucukse yazmazki ekranda zaten
yerlerini yanlış kopyala yapıştır yapmışım tam tersi olacak
suan arduino yanımda degil eve gidince denerim sizi bilgilendiririm ama hata vermemesi lazım ayrıca farklı olarak gördugum if komutunda parantez olması gereklii onun uzerinde deneyiniz..
tek satırda problem olmaz diye biliyorum ama bi deniyim
Seriporttan int gelmez, char gelir, o da her karakter tek tek gelir. Onu birlestirip kullanmalisiniz.
elinizde örnek varmı örnke le açıkalrmısnız ?
if leri a==‘1’ demek aslında a==49 demek oluyor ‘1’ in ascii karşılığı değeri gelir. siz 9 dan büyük değerleri “10” dediğinizde iki karakter yollamış oluyorsunuz yani chr(49) ve chr(48) kodlarını yollamış oluyorunuz. şimdiki mevcut programınızda fazla kod kurcalaması yapmadan 10 için “a” ve 11 için “b” gibi bir değer yollayın ve bunları kotrol ederseniz çalışır. birden fazla karakter yollayıp kontrol etmek istiyorsanız onu sonra anlatalım buradaki kod buna uygun değil. önce bunu bi halledelim. if(a==‘10’){…} yerine if(a==‘a’){…} kullanın şimdilik
Şimdi ben de aynı konuda sıkıntıya düşmüştüm fakat parseInt() fonksiyonuyla bu işi çözebiliyoruz. Bir örnek ile açıklamaya çalışıyım. Mini bir kod yazıyorum; İlk olarak serial monitörden 125 değerini girelim.Ve sonuçları görelim. int data=Serial.parseInt(); Serial.println(data); Bu şekilde yazdığımızda artık istediğiniz büyüklükte int değerini rahatlıkla okutabilirsiniz character 'e bağlı kalmadan. Not: Serial.parseInt() komutu biraz yavaş çalışır. http://arduino.cc/en/Reference/ParseInt
teşekkürler bu güzelmiş ama ben bununla işlem yaptırmank istiyorum acaba sıkıntı olur mu ?
Sıkıntı olmaz bu fonksiyonu kullanarak işinizi görebilirsiniz