- Katılım
- 27 Şubat 2019
- Mesajlar
- 12,010
/// KEYPAD FONKSİYONU ////////////////////
void keyPress(char kidx) {
if ( isdigit(kidx) ) {
Serial.print(kidx);
uint8_t sayi = kidx - '0';
ToplamSayi = ((ToplamSayi * 10) + sayi);
if (konsol) {
Serial.print( "Tuslanan Sayi:" );
Serial.println(ToplamSayi);
}
} else if ( kidx == 'E' ) {
page ='e';
Serial.println("E tuşuna basıldı");
/*int urlEk = ToplamSayi;
String TamUrl = url_ekle + urlEk;
SiparisVer(TamUrl, urlEk);*/
ToplamSayi = 0;
} else if ( kidx == 'A' ) {
/// AMPER DEĞERİNİ DEĞİŞTİRİR ////////////
page = 'a';
Serial.println("A tuşuna basıldı");
} else if ( kidx == 'V' ) {
Serial.println("V tuşuna basıldı");
page = 'v';
ToplamSayi = 0;
//// Voltaj değerini ekrana yazdırma /////
u8g2.clearBuffer();
drawF(0, 0, 128, 64, 1, 1, 126, 62);
u8g2.drawLine(5, 18, 122, 18);
u8g2.drawLine(5, 46, 122, 46);
u8g2.setFont(u8g2_font_VCR_OSD_tr);
u8g2.setCursor(4, 40);
u8g2.print("SET:");
u8g2.setCursor(50, 40);
u8g2.print("00.00");
u8g2.setCursor(112, 40);
u8g2.print(F("V"));
u8g2.sendBuffer();
/*SatirTemizle(1);
lcd.print("A");*/
} else if ( kidx == 'D' ) {
// D TUŞU GİRİLEN DEĞERİ SİLER!
Serial.println("D tuşuna basıldı");
ToplamSayi = 00.00;
/*SatirTemizle(1);
lcd.print("B");*/
} else if ( kidx == 'T' ) {
// C Tuşu NodeMCU ya Reset Atar!
// digitalWrite(D0, LOW);
} else if ( kidx == 'S' ) {
Serial.println("SET tuşuna basıldı");
page = 'i';
// S TUŞU DEĞER GİRME EKRANINI AÇAR!
//// SET YAZISI //////////////////////////
}
delay(100);
}
void loop(void) {
/// KEYPAD KODLARI /////////////////////
uint8_t idxx = keyPad.getKey();
char idx = "DV0AO987E654S321"[idxx];
keyPress(idx);
if(page == 'a'){
u8g2.clearBuffer();
drawF(0, 0, 128, 64, 1, 1, 126, 62);
u8g2.drawLine(5, 18, 122, 18);
u8g2.drawLine(5, 46, 122, 46);
u8g2.setFont(u8g2_font_VCR_OSD_tr);
u8g2.setCursor(4, 40);
u8g2.print("SET:");
u8g2.setCursor(50, 40);
u8g2.print("00.00");
u8g2.setCursor(112, 40);
u8g2.print(F("A"));
u8g2.sendBuffer();
}else if (page == 'v') {
Serial.println(ToplamSayi);
//// Voltaj değerini ekrana yazdırma /////
u8g2.clearBuffer();
drawF(0, 0, 128, 64, 1, 1, 126, 62);
u8g2.drawLine(5, 18, 122, 18);
u8g2.drawLine(5, 46, 122, 46);
u8g2.setFont(u8g2_font_VCR_OSD_tr);
u8g2.setCursor(4, 40);
u8g2.print("SET:");
u8g2.setCursor(50, 40);
ival = ToplamSayi * 100;
sprintf(buffer, "%02d.%02d", ival / 100, ival % 100);
u8g2.print(buffer);
u8g2.setCursor(112, 40);
u8g2.print(F("V"));
u8g2.sendBuffer();
}
}
Bana kod lazım. Kafa basmıyor. Zaten sabahtan beri uğraşıyorum beynim sulandı iyice. Düşünemez hale geldim .abi aklıma şöyle bişey geldi displaye 4 digit sayı yazabiliyoruz sen 2 dijiti yazdıktan sonra sorun yaşıyorsun.
2 dijiti yazdıktan sonra girilen sayıyı/10 yapıp 10a bölünmüş halini toplama eklersek olmaz mı acaba aklıma birtek bu geldi
ben bi deney yapayım abiBana kod lazım. Kafa basmıyor. Zaten sabahtan beri uğraşıyorum beynim sulandı iyice. Düşünemez hale geldim .
Şuan da her sayıyı ayrı değişkene yazdırmak üzere çalışıyorum.abi uğraştım önce float'dan string'e çevirdim sonra length ile kaç dijit olduğunu saydırdım "."'yıda dijitl sayıyormuş önemli değil.
nokta dahil 3 dijit olursa toplanan değeri/10 yapıyorum bu sefer 0lar uzama başlıyor her toplamda sıfır ekliyor
/// 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;
Serial.print("sayi1;");
Serial.println(sayi1);
}else if(tur == 1){
sayi2 = sayi;
Serial.print("sayi2;");
Serial.println(sayi2);
}else if(tur == 2){
sayi3 == sayi;
Serial.print("sayi3;");
Serial.println(sayi3);
}else if(tur == 3){
sayi4 = sayi;
Serial.print("sayi4;");
Serial.println(sayi4);
tur = 0;
}
tur++;
}
void keyPress(char kidx) {
if ( isdigit(kidx) ) {
Serial.print(kidx);
uint8_t sayi = kidx - '0';
//ToplamSayi = ((ToplamSayi * 10) + sayi);
if(tur == 0){
sayi1 = sayi;
Serial.print("sayi1;");
Serial.println(sayi1);
}else if(tur == 1){
sayi2 = sayi;
Serial.print("sayi2;");
Serial.println(sayi2);
}else if(tur == 2){
sayi3 = sayi;
Serial.print("sayi3;");
Serial.println(sayi3);
}else if(tur == 3){
sayi4 = sayi;
Serial.print("sayi4;");
Serial.println(sayi4);
tur = -1;
}
tur++;
Döktürmüşsün yine abi.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]
u8g2.setCursor(sayi1 koordinatı);
u8g2.print(sayi1);
u8g2.setCursor(sayi2 koordinatı);
u8g2.print(sayi2);
u8g2.setCursor(nokta koordinatı);
u8g2.print(".");
u8g2.setCursor(sayi3 koordinatı);
u8g2.print(sayi3);
u8g2.setCursor(sayi4 koordinatı);
u8g2.print(sayi4);
O zaman kürsörün koordinatina göre işlem yaptıracağız. Buna göre kürsör için bir değişken oluşturup koordinat atayacağız.En mantıklısı işlemleri float olarak yapmak. İşlemler bittikten sonra da sonucu sprintf ile string'e dönüştürüp formatladıktan ekrana yazmak. Kürsör işlerini string üzerinde yapma, bu çok abuk bir kod olur.
Onun yerine şu mantık daha iyi iş görür. Voltaj değeri float olarak V olsun. Eğer kürsör en sağda ise, encoder döndüğünde 0.01 toplayacaksın veya çıkaracaksın. Kürsör bir solda ise 0.1 toplayıp çıkaracaksın. Bir sonraki pozisyon için 1 toplayıp çıkaracaksın. Kürsör en solda ise 10 toplayıp çıkaracaksın. Bu kadar basit.
int kursor = 0;
İf(button) {
kursor = "bir_bsmk";
button++
}
if(kursor == "bir_bsmk" ) {
V = V + 0.01;
}else if(kursor == "iki_bsmk" ) {
V = V + 0.1;
}
unsigned int ekran_kursor; /* 0 .. 3 arasinda oldugu garantilenmis */
unsigned int voltaj;
void loop()
{
numerik_kursor = ekran_kursor - 2;
if (enkoder_sola_dondu)
{
unsigned int yeni_voltaj = voltaj - 10^numerik_kursor;
if (yeni_voltaj >= 0)
{
voltaj = yeni_voltaj;
ekrana_yaz(voltaj);
}
}
else if (enkoder_saga_dondu)
{
unsigned int yeni_voltaj = voltaj + 10^numerik_kursor;
if (yeni_voltaj <= MAX_VOLTAJ)
{
voltaj = yeni_voltaj;
ekrana_yaz(voltaj);
}
}
}
@taydin abi merakımı affet.
Abi sen ne işle meşgulsün.
Büyüyünce bende senin gibi olucam abi. İdolümsünBu işlerle
Gömülü sistemlere firmware geliştiriyorum.
Büyüyünce bende senin gibi olucam abi. İdolümsün
Bana da bir yaptığını bir daha yap desen yapamam. Kodlama kısmında çok ortadan başladım. Baştan iyi eğitim almak lazımdı. Artık sadece işine geleni alıyor kafa. İşi bitince de unutuyor. Ama azimliyim. Bu işleri öğreneyim derken ölüp gideceğim gibi görünüyor.Öğrenmeye devam etmek önemli. Yaptığım hiçbir proje bir öncekinin aynısı değil, ben de bunu yapıyorum.