#include <Wire.h>
int data_index = 0;
char ptr[256]; // 256 karakterlik sabit boyutlu bir dizi
String line_data;
void setup() {
Wire.begin(8); // Slave adresini 8 olarak ayarla
Wire.onReceive(drawData);
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
delay(100);
}
// Veriyi yazdırma fonksiyonu
void yazdir(char* data) {
line_data = data;
Serial.println(line_data); // Veriyi seri porta yazdır
digitalWrite(13, HIGH); // LED'i yanıp söndürme
delay(50);
digitalWrite(13, LOW);
}
// Veriyi almak için kullanılan callback fonksiyonu
void drawData(int sendersbyte) {
while (Wire.available() > 0) {
char c = Wire.read();
if (c != '\n' && data_index < 255) { // 255'e kadar alabiliyor
ptr[data_index++] = c;
} else {
if (c == '\n') { // Eğer ENTER (yani '\n') karakteri geldiyse
ptr[data_index] = '\0'; // Sonlandırıcı karakter ekle
yazdir(ptr); // Veriyi yazdir fonksiyonuna gönder
data_index = 0; // Indexi sıfırla
memset(ptr, 0, 256); // Buffer'i temizle
}else if (c != '\n'){
// Eğer ENTER yoksa ve sınır aşıldıysa resetle
memset(ptr, 0, 256);
data_index = 0;
}
}
}
}
hello everybody,firstly sorry for my english.I have been coding a i2C coomunication program.I want to call yazdir() function when the data has a "\n" char so "ENTER".But It does not write anything when I send an example data like that "123123fff"(no enter).After I send a "testtest123"(there is enter at the end). The outcome is being "123123ffftesttest123". why?