Bilgisayardan visual studio C# ile arduinoya integer değer gönderiyorum. başlarda düzgün çalışıyor gibi görünüyordu ta ki serialden 300 değerini gönderene kadar. Sonra farkettim ki arduino en fazla 255 değerini gönderdiğimde cevap veriyor. Acaba arduino 0-255 değerlerini mi alabiliyor serial porttan integer değer olarak ?
processing’de int’e -32,768 ile 32,767 arasında bir değer verebilirsiniz. başka bir problem olmalı. seri port yerine direk kod üzerinden bu değer atamasını yapın. değer atadığınız nesnenin tipini kontrol edin, belki başka bir yerde hata alıyorsunuzdur. Örneğin int a diye tanımladığınız a’yı sonra başka bir yerden kullanıyorsunuzdur, o’nun tipi byte olarak ayarlanmıştır. http://arduino.cc/en/Reference/int
Int değişkenlerde bir sorun olduğunu düşünmüyorum zaten. Sıkıntının serial porttan arduinonun alabileceği max int değeri 8 bitlik mi yani 2^8 e kadar mı kaydedebiliyor. Çünkü 255 dahil tüm verileri alıp istediğim işlemi yapabiliyorum. 256 dan sonrasını kaydetmiyor sanırsam. direk Int gönderip almak yerine string gonderip int çevirme işlemini de denedim ama onda da başka sıkıntılar çıktı. atoi yada .toInt() fonksiyonlarıyla doğra çevirme işlemini yapamadım bir türlü. Örnek olarak şu kodu paylaşayım. int okunan; int CoordX[800]; int m=0; void setup() { Serial.begin(9600); pinMode(7,OUTPUT); } void loop() { if(Serial.available()) { delay(100); if(Serial.read()==‘R’) { okunan=Serial.read(); CoordX[m]=okunan; m++; } if(CoordX[0]==255) // Burası 256 olduğu zaman led yanmıyor. { digitalWrite(7,1); } if(CoordX[5]==105) // Burası da 256 için sönmüyor { digitalWrite(7,0); } } }
http://arduino.cc/en/Serial/Read serial read sadece gelen datanın ilk byte’ını okuyor. ondan dolayı 0-255 arası bir değer alır.
Seri haberleşmede veriler baytlar halinde iletilir. char, byte değişkenleri 1 bayt olduğundan bunları tek baytta gönderilebilri ama int değerler 2 bayt olduğu için iki parça halinde göndermelisiniz. Bunun için basit bir protokol kurmanız gerekiyor. Yani mesala önce A karakterini, sonra B karakterini sonra int değerin ilk baytını, sonra ikinci baytını gönder gibi… Bunu da alıcı tarafta önce A, sonra B karakterleri geldikten sonra okumalısınız.