Şahabettin Akca › Blogum

C++ Arduino Fonksiyondan Dizi Döndürme

Çalışmalarımızda arduino içerisinden genelde veri göndermez, ekrana yazdırır ya da mesafe, sıcaklık, açı vb. tek eleman döndürürüz.

Fakat bazı çalışmalarda birden fazla elemanları dizileri döndermemiz gerekebilir.

Bunu nasıl yapabileceğinizi bir örnekle paylaşayacağım.

Pseudo Kod: 

global bir dizi tanımla

fonksyion dönüş tipine * ekle (pointer, işaretçi için kullanılan karakterimiz)

fonksiyon içerisinde diziye [0], [1] = şeklinde veri atamalarını yapalım

return deyimine (dönüş tipi *) &globalDeğişkenAdı; 

ekleyerek tamamlayalım.


float okunan_degerler_imu[3];
float *getXYZ(bool yazdir) {

xRaw = analogRead(xPin);
yRaw = analogRead(yPin);
zRaw = analogRead(zPin);
long xMilliG = map(xRaw, xMin, xMax, -1000, 1000);
long yMilliG = map(yRaw, yMin, yMax, -1000, 1000);
long zMilliG = map(zRaw, zMin, zMax, -1000, 1000);
//--------------------------------------------------------------
// re-scale to fractional Gs
float x_g_value = xMilliG / 1000.0;
float y_g_value = yMilliG / 1000.0;
float z_g_value = zMilliG / 1000.0;
if (yazdir == true) {
//Serial.print(x_g_value,0);
Serial.print(x_g_value, 2); //verileri -1 0 +1 olarak değil 2 ondalıklı olarak veriyor.
Serial.print("G");
Serial.print("t");
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//Serial.print(y_g_value,0);
Serial.print(y_g_value, 2);
Serial.print("G");
Serial.print("t");
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//Serial.print(z_g_value,0);
Serial.print(z_g_value, 2);
Serial.print("G");
Serial.println();

//Serial.print(x_g_value,0);
Serial3.print(x_g_value, 2); //verileri -1 0 +1 olarak değil 2 ondalıklı olarak veriyor.
Serial3.print("G");
Serial3.print("t");
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//Serial3.print(y_g_value,0);
Serial3.print(y_g_value, 2);
Serial3.print("G");
Serial3.print("t");
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//Serial3.print(z_g_value,0);
Serial3.print(z_g_value, 2);
Serial3.print("G");
Serial3.println();
}
okunan_degerler_imu[0] = x_g_value;
okunan_degerler_imu[1] = y_g_value;
okunan_degerler_imu[2] = z_g_value;

return (float *)&okunan_degerler_imu;
}
C++ Arduino Fonksiyondan Dizi Döndürme