Merhaba herkese, Arduino ile bir entegrenin (Cirrus Logic cs5490 enerji ölçüm entegresi) haberleşmesiyle ilgili bir sıkıntım var. Entegrenin rx- tx çıkışı mevcut . Entegrenin datasheetine göre sayfayı seçtikten sonra alınacak verinin adresini girmem lazım. Sayfa seçimi için 8 bitlik, veri için de 6 bitlik kod gönderiliyor. Ben arduino dan 000110 komutu gönderdiğimde akım değerini göndermesi lazım entegrenin. Ancak ben arduino write komutu yazdığımda kodun başına otomatik olarak 01 yazma kodu ekleniyor diye biliyorum. Acaba entegre kodu 01000110 diye okuyor olabilir mi ? Kod doğru ama cevap olarak hep sıfır veriyor, yazılımsal bir sıkıntı var mıdır acaba ? int akim = 0; // başlangıç değeri int gerilim =0 ; // başlangıç değeri void setup() { Serial.begin(1200); // Seri port bağlantısı 1200 Baud Rate ayarlı } void loop() { Serial.write (10010000); // Sayfa Seçimi, sayfa 16 if (Serial.available() > 0) { // Herhangi bir değer okunduğunda veriyi gönder Serial.write (000110); akim = Serial.read(); // Gelen veriyi oku Serial.print("Akim Degeri: "); // Gelen veriyi yazdır Serial.println(akim); delay (500); Serial.write (000111); // V Rms değeri gerilim = Serial.read(); // Gelen veriyi oku Serial.print("Gerilim Degeri: "); // Gelen veriyi yazdır Serial.println(gerilim); delay (500); } }
entegrenin datasheet inceledin sanırım sizin sorununuz yolladığınız komutun binary olmamasından kaynaklanıyor 10010000 binary değerdir siz bunu chr(144) olarak yollamanız lazım. diğer işlemleri de binaryden decimale dönüşüm yapıp deneyin
Serial.write (10010000); // Sayfa Seçimi, sayfa 16 yerine Serial.write (B10010000); // Sayfa Seçimi, sayfa 16 ve Serial.write (000110); yerine Serial.write (B00000110); ve Serial.write (000111); // V Rms değeri yerine Serial.write (B00000111); // V Rms değeri gibi deneyin eğer gelen veri cevabı bir byte dan fazla değer geliyorsa onu da okuyun arka arkaya.