Arama butonu
Bu konudaki kullanıcılar: 1 misafir
0
Cevap
448
Tıklama
0
Öne Çıkarma
Energia/Arduino float Yazdırma Sorunu
C
10 yıl
Onbaşı
Konu Sahibi

Merhaba arkadaşlar. Ben çok büyük ihtimalle Arduino açık kaynağından faydalanılarak oluşturmuş Texas Instruments in MSP430 Launchpad ini kullanıyorum.
Pinlerinin yeri dışında hemen hemen her şeyi Arduino ile aynı. Energia isimli bir IDE si var, Arduino IDE nin kırmızısı sadece.

Neyse sorunuma geçeyim, para sayan bir kumbara yapmaya çalışıyorum pek kompleks bir şey değil bir tuş ile atacağım paranın türünü belirliyorum (her tuşa bastığımda 5-10-25-50-100 kuruş diye tek tek geziyor) açtığım yarığın önündeki bir LDR ile ilk önce ortamın parlaklığını tespit ediyor sonra paranın atılıp atılmadığını anlamaya çalışıyorum. Atıldıysa da atılan parayı toplam miktarine eklemek istiyorum. Bir tane LED ile de kutunun içini aydınlatıyorum.

Fakat toplam parayı yazdırırken aşağıdaki gibi tuhaf rakamlar beliriyor;

< Resime gitmek için tıklayın >

Kod ise aşağıdaki gibi;

int s1=0; float tp=0; int t=0; 

void setup()
{
Serial.begin(9600);
pinMode(2,INPUT_PULLUP); //LDR pini
pinMode(5,INPUT_PULLUP); //Button pini
pinMode(9,OUTPUT); //LDR toprak pini
pinMode(12,OUTPUT); //LED pini
digitalWrite(9,LOW);
digitalWrite(12,HIGH);
Serial.println("Basladi.");
//200 ms aralıkla ortamın ışığını ölçüp ortalamasını al.
//---
int d[10];
for(int i=0;i<10;i++) {
d[i]=analogRead(2);
Serial.print(i+1); Serial.print(":"); Serial.println(d[i]);
t=t+d[i];
delay(200);
}
t=t/10;
Serial.print("Ortalama:"); Serial.println(t);
//---
}

void loop()
{

int a=analogRead(2); int delta=t-a; //LDR deki değişim
if(delta>10) {
Serial.print("Delta:"); Serial.println(delta);
tp=tp+float(mod(s1))/100; //Şu an hangi para modundaysa 100 e bölüp ekle.
Serial.print("Toplam Para:"); Serial.println(tp);
}

if(digitalRead(5)==LOW) { //Butona basıldıysa
s1++;
Serial.print("Para Tipi:"); Serial.println(mod(s1));
Serial.print("s1:"); Serial.println(s1);
delay(250);
}
}

int mod (int s2) { //Butona basılma miktarına göre para çeşidi bul.
int parac;
if(s2%5==0)
parac=5;

else if(s2%5==1)
parac=10;

else if(s2%5==2)
parac=25;

else if(s2%5==3)
parac=50;

else if(s2%5==4)
parac=100;

return parac;
}


Bunun sebebini bir türlü bulamadım, anlatırken açık olamadıysam kusura bakmayın. Şimdiden teşekkürler.