Ahmet
S38>S85
- Katılım
- 31 Mayıs 2021
- Mesajlar
- 6,079
Abi kaynak makinesi konusunda ben seni kaynakçı ama bu işlerle de uğraşan biri sanmıştım.Bu işlerle
Gömülü sistemlere firmware geliştiriyorum.
Abi kaynak makinesi konusunda ben seni kaynakçı ama bu işlerle de uğraşan biri sanmıştım.Bu işlerle
Gömülü sistemlere firmware geliştiriyorum.
Bu doğru bir yazım şekli mi? Sonuç yanlış çıkıyor da.Kürsör pozisyonu en solda iken basama 10 oluyor, yani 10^1. Kürsör pozisyonu en sağda iken basamak 0.01 oluyor, yani 10^(-2). Bu durumda sayı şöyle ise:
AB.CD
O zaman voltaj veya akım için hesap da şöyle:
[math]V = A\times10^1 + B\times10^0 + C\times10^{-1} + D\times10^{-2}[/math]
/// KEYPAD FONKSİYONU ////////////////////
void keyPress(char kidx) {
if ( isdigit(kidx) ) {
Serial.print(kidx);
uint8_t sayi = kidx - '0';
//ToplamSayi = ((ToplamSayi * 10) + sayi);
if(tur == 0){
sayi1 = sayi;
}else if(tur == 1){
sayi2 = sayi;
}else if(tur == 2){
sayi3 = sayi;
}else if(tur == 3){
sayi4 = sayi;
tur = -1;
}
tur++;
voltaj = sayi1 * 10^1 + sayi2 * 10^0 + sayi3 * 10^-1 + sayi4 * 10^-2;
Serial.print("voltaj: ");
Serial.println(voltaj);
Abi tur değişkeni dört tane sayı değişkenini tuşladıktan sonra sıfırlayarak başa dönüyor. 4 de sıfırlamazsam sayıya bas basabildiğin kadar. Acemi işi işte takılmaGökhan kod parçası koyarken veri tiplerini de dahil et. Yoksa sırf koda bakarak doğru çalışıp çalışmadığını söylemek mümkün değil. Bir detur
değişkeni nedir?
int sayi1 = 0;
int sayi2 = 0;
int sayi3 = 0;
int sayi4 = 0;
int tur = 0;
float voltaj = 0.0;
Yarın gündüz bakayım. Kafa doldu akşama kadar. Basmıyor artıksayi1, 2, 3, 4 ü float yap. 10'ları da 10.0 yap, böylece işlem tamamen fload olarak yürüsün. Şu anda işlem int olarak yapılıyor ve sonuç tamamen yanlış çıkar.
Değişkenleri float yapınca ^ operatörünü kabul etmiyor.sayi1, 2, 3, 4 ü float yap. 10'ları da 10.0 yap, böylece işlem tamamen fload olarak yürüsün. Şu anda işlem int olarak yapılıyor ve sonuç tamamen yanlış çıkar.
Onuda denedim aynı hatayı döndürüyor..abi acaba float'ı double mi yapmalıyız
epey zamandır uğraşıyorum hiç denk gelmemiştim abi deney yapayım neler oluyor"&,^,|,~,<<,>>%" bu operatörler "int" için geçerliymiş. Float da çalışmıyormuş.
Yani bunları sadece tam sayılarda kullanabiliyormuşuz.
Çok mantıklı. Ama bu sayede float değişkeni için de ^ operatörünün kullanılmadığını, onun yerine "e" harfinin kullanıldığını öğrenmiş oldum.Onlar sabit sayı yav, neden her seferinde hesaplatıyorsun?
101 = 10.0
100 = 1.0
10-1 = 0.1
10-2 = 0.01
Timur abinin çok mantıklı müdahalesi olayı çözdüepey zamandır uğraşıyorum hiç denk gelmemiştim abi deney yapayım neler oluyor
#TecrübemizYok
float sayi1 = 0;
float sayi2 = 0;
float sayi3 = 0;
float sayi4 = 0;
int tur = 0;
float voltaj = 00.00;
if ( isdigit(kidx) ) {
uint8_t sayi = kidx - '0';
if (tur == 0) {
if (sayi <= 3) {
sayi1 = sayi;
}else{
tur = -1;
}
} else if (tur == 1) {
if(sayi1 != 3){
sayi2 = sayi;
}else{
tur = 0;
}
} else if (tur == 2) {
sayi3 = sayi;
} else if (tur == 3) {
sayi4 = sayi;
tur = -1;
}
tur++;
voltaj = sayi1 * 10.0 + sayi2 * 1.0 + sayi3 * 0.1 + sayi4 * 0.01;
Serial.print("voltaj: ");
Serial.println(voltaj);
sprintf
komutuyla o işide çözdüm. ival = voltaj * 100;
sprintf(buffer, "%02d.%02d", ival / 100, ival % 100);
u8g2.setCursor(50, 40);
u8g2.print(buffer);