Oled ekranda veri tutma
  • merhaba oled ekrana butonlardan basılan buton numaralarını yazdırabiliyorum , şöyle bir sorunum var misal 10 buton var , butonlardan son basılan 3 butonu ekranda tutmam gerekiyor, taki başka bir butona basıldıgında basılan butonu ekrana yazıcak sonra yine son basılan buton dahil yine son 3 butonu ekranda tutmam gerekiyor bu şekilde ilerleyecek .. işin içinden cıkamadım yardımcı olursanız minnettar kalırım teşekkürler.,

    her butonu karşılaştırma yaparsam program çok uzuyor
    if buton1==LOW && buton2==LOW&& buton3==HIGH....... gibi
    10 larca satir karşılaştırma yapmam gerekiyor . 10x10 .100 karşılaştırma
    bellek yetmez:)
  • butonları kolon veya satır bazında okuduğundan bit olarak okuyorsun bunun yerine byte olarak tek seferde oku böylece kaç satır veya kolon var o kadar karşılaştırma yaparsın olur biter.
    butonları a0 den a7 ye kadar diz tek seferde a portunu okuduğunda tüm butonları okumuş olursun.
  • Kusura bakma hocam pek anlamadım :(
    1 kac satir örnek yazabilrimisiniz?
  • Ekranda buton numaralarını yazdığın hücre ya da koordinat neyse onu tutarsın ve son basılan butonu oraya yazdırırsın olur biter.
  • son butonda sorun yok son 3 butonu kaydetmem gerekiyor
  • Son basılan butonu ekrandaki yerlerine sırayla yazarsan zaten kaç tane yer varsa o kadar numarayı tutmuş olursun. Ekranda 3 yer varsa son 3 buton numarası tutulmuş olur.
  • işde o noktada kaldim zaten örnek lazim
  • Ekrana herhangi bir 3 numarayı yazdırdığın kodu at, düzenleyeyim.
  • void loop() {



    int tus = digitalRead(inputPin);
    int tus2 = digitalRead(inputPin2);
    int tus3 = digitalRead(inputPin3);
    int tus4 = digitalRead(inputPin4);
    int tus5 = digitalRead(inputPin5);
    int tus6 = digitalRead(inputPin6);
    int tus7 = digitalRead(inputPin7);
    int tus8 = digitalRead(inputPin8);
    int tus9 = digitalRead(inputPin9);
    int tus10 = digitalRead(inputPin10);

    if tus==LOW
    {

    display.clearDisplay();
    display.setCursor(35,5);
    display.print("tus 1 basti");
    display.display();
    delay(200);


    if tus2==LOW
    {


    display.clearDisplay();
    display.setCursor(35,5);
    display.print("tus 2 basti");
    display.display();
    delay(200);
    }

    if tus3==LOW
    {

    display.clearDisplay();
    display.setCursor(35,5);
    display.print("tus 3 basti");
    display.display();
    delay(200);


    if tus4==LOW
    {

    display.clearDisplay();
    display.setCursor(35,5);
    display.print("tus 4 basti");
    display.display();
    delay(200);

    }
    }
  • if lerin yanındaki parantezi( ) kabul etmedi forum silip öyle attim bilgine
  • display.setCursor(35,5);

    Sürekli aynı koordinatı kullanıyorsun, yani her seferinde öncekinin üzerine yazıyor. 3 satır yazmak için 3 ayrı bölge belirlemelisin. Atıyorum (35, 5), (35, 20), (35, 35) olsun. Şimdi burada değişken olan Y, yani dikey. Y'leri bir diziye yazalım, bir de satır numarası tutalım.

    byte satir_no;
    const byte y_koord[] = {5, 20, 35};

    Her butona basıldığında buton numarası sıradaki satıra yazılacak. Bunun için cursoru ilgili yere konumlandırmamız lazım. Fakat ekranı silmiyoruz! Bir tuş için örnek;

    if tus4==LOW
    {
    //display.clearDisplay(); Ekran silinirse bu yöntem çalışmaz.
    display.setCursor(35, y_koord[satir_no]);
    if ++satir_no == 3
    satir_no = 0;
    display.print("tus 4 basti");
    display.display();
    delay(200);
    ...
  • hocam buraya kadar gayet güzel çalıştı teşekkür ederim , yanlız şöyle bir sorunum oldu, butonlara tekrar basınca üstüne yazmaya çalışıyor,yazıncada yazılar belli olmuyor karışıyor yani yazılar,3 butondan sonra ekranı temizlemem gerek , bunda 10 buton filan olucak yani ekranda son 3 butondan sonra ekranı nasıl temizleyebilirim,
  • yani ekran temizlenmeyince üst üste yazıyor
  • O halde yanlızca satırı silersin.

    byte ko = y_koord[satir_no];
    display.setCursor(35, ko);
    display.print(" ");
    display.setCursor(35, ko);

    print içindeki boşluklar görünmüyor. Karakter sayısı kadar boşluk yazacaksın.
  • if tus4==LOW
    {

    display.setCursor(35, y_koord[satir_no]);
    if ++satir_no == 3
    satir_no = 0;
    display.print("tus 4 basti");
    display.display();
    delay(200);
    byte ko = y_koord[satir_no];
    display.setCursor(35, ko);
    display.print(" ");
    display.setCursor(35, ko);
    ...

    denedim olmadı yine üstüne yazıyor

    if tus4==LOW
    {

    byte ko = y_koord[satir_no];
    display.setCursor(35, ko);
    display.print(" ");
    display.setCursor(35, ko);
    display.setCursor(35, y_koord[satir_no]);
    if ++satir_no == 3
    satir_no = 0;
    display.print("tus 4 basti");
    display.display();
    delay(200);

    aynı şekilde buda

    boşluk verdim karekter kadar
  • Üst üste yazıyor derken neyi kasdettiğini pek anlamadım. Bu ekranlar hakkında pek bilgim yok, belki bilmediğim bir detay vardır.

    Eğer ekranı silmen gerekiyorsa yazılacak olan mesajları bir değişkene yaz, sonra hepsini birden ekrana bas. Yukarıdaki kodlardan bir fikir edinebilirsin.
  • yardımınız için teşekkürler hocam biraz uğraşcaz
  • Çok fazla kod tekrarı yapmışsın, bu konuya değinmek istedim. Dil bilgisi eksikliğinden dolayı arduinoda bu şekilde kod tekrarları çok yapılıyor.
    Yukarıdaki 10 buton için yazdığın örnek kodu şu şekilde kısaltabiliriz.

    Okunacak dijital pinlerin numaralarını bir diziye atarız.

    const byte giris_pin[] = {7, 2, 13, 1, 8, 5, ...};

    Sonra hepsini bir döngü içinde okuruz. 10 pin var diyelim.

    Tıkla. https://paste.ofcode.org/Pwgy8xiGbnAd82UST9nL4T
  • Bu güzel örnek için teşekkür ederim

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.