2016-04-09 28 views
1

sorun döküm nasıl int olarak tedavi edilen gibi görünen aslında bu:Arduino DateTime olursa olsun ben

DateTime timenow = RTC.now();  
Serial.println(timenow.unixtime()); 
double unixd = timenow.unixtime()/1.234; 
Serial.println(unixd,4); 

Çıkışlar şu:

//unixtime - 1460128448 
//unixd - 1183248384.0000 

olması gerektiği çıkışı:

//unixtime - 1460128448 
//unixd - 1183248337.1150 

Değişken (float) veya (double) ya da her neyse, değişkeni değiştirmeye çalıştım ama hiçbir şey işe yaramaz k. Herhangi bir fikir?

+0

@FiddlingBits Aynı zamanda double unixd = timenow.unixtime()/1.234f; – Mobiliseme

+0

'unixd' işlevini' float' olarak değiştirmeyi deneyin: float unixd = ... '. –

+0

@FiddlingBits Teşekkürler adamım. Ben de bunu denedim, maalesef şans yok. '= timenow.unixtime()/1.234f unixd yüzer;' Çıkışlar: '1460130626' ve '1183250176.0000' kütüphane RTClib içinde, tüm yardımcı olur, unixtime bir' uint32_t' – Mobiliseme

cevap

1

Ondalık olmadan 1183248337 numaralı numara 31 bit gerektirir. Bir AVR üzerinde bir double/double/double/ 10 3212 bittir. Sadece tür için çok büyük bir sayı kullanıyorsunuz.

uint64_t kullanarak sabit genişlikli aritmetik kullanabilirsiniz. Numaranızı bir tamsayı olarak (1183248337.1150 yerine 11832483371150) temsil edin, daha sonra baskı için parçaları ayıklamak/çıkarmak için çıkartın.

+0

olarak dökülmektedir – Mobiliseme

+0

Not: bitlerinizi n adet olarak hesapladıktan sonra 64 bit numaralarını (işlenmez) yazdıramazsınız, bölümleri uzun veya int (herhangi bir şeye sığacak şekilde) –

İlgili konular