İçeriğe Geç

Raspberry Pi Hesap Makinesi Projesi

27 Nov 2023
Raspberry Pi Calculator Project

Elektronik Hesap Makinesi

Selam!

Teknolojinin heyecan verici dünyasında inovasyon, mümkün olduğunu düşündüğümüz şeylerin sınırlarını sürekli olarak zorluyor. Ve şimdi sizinle gerçekten harika bir şey paylaşıyoruz: Raspberry Pi Hesap Makinesi! Bu çığır açan proje, matematik problemlerini çözmeye yaklaşımımızda devrim yaratmak üzere. Şunu hayal edin: Bilgisayarınızın başında oturuyorsunuz ve zorlu bir matematik problemiyle karşı karşıyasınız. Ancak kafanızı kaşımak ve bunalmış hissetmek yerine tek yapmanız gereken Picobricks Hesap Makinesini bilgisayarınıza bağlamak. Ve tıpkı bir sihir gibi, "Picobricks Hesap Makinesi Çözülmeye Hazır" yazan bir mesaj beliriyor. Bu kadar basit! Artık matematik problemleri üzerinde uğraşmanıza veya strese girmenize gerek yok. Picobricks Hesap Makinesi ile zahmetsiz bir problem çözme yolculuğuna çıkabilirsiniz. O halde sinir bozucu anlara veda etmeye ve başlamaya hazırlanın hesap makinesi kodlama!

Ayrıntılar ve Algoritmalar

İşlem inanılmaz derecede basit! İle Elektronik Hesap makinesi, tüm gerekli işlemler parmaklarınızın ucunda olacak. Bu sıradan bir hesap makineniz değil; bu bir oyun değiştirici! Artık sıkıcı tuş takımı girişleri yok. Bunun yerine, matematik yolculuğunuzda deneyimli bir kaşifin hassasiyeti ve kolaylığı ile ilerleyeceksiniz.

Sayıları birbirine mi ekliyorsunuz? Yukarı oka hafifçe itmeniz yeterli. Çıkarmanız mı gerekiyor? Aşağı ok yardımcı olmak için oradadır. Çarpma için sağ oku kullanın ve bölme için sol ok yardımcı olmaya hazırdır.

Denklemi girdikten sonra kareye bir kez basmak düğme çözümünüzü ortaya koyuyor. Hızlı, doğru ve en önemlisi kullanıcı dostudur.

Bu proje, herkes için matematik problemlerini çözmeyi basitleştirmede ileriye doğru atılmış büyük bir adımdır. İster zorlu derslerle uğraşan bir öğrenci, ister karmaşık hesaplamalarla uğraşan bir profesyonel, ister sadece matematiğin güzelliğini seven biri olun, Picobricks Hesap Makinesi hayatınızı kolaylaştırmak için burada.

Bu harika hesap makinesi projesinin büyüleyici dünyasını keşfederken bize katılın! Ona güç veren teknolojiye, farklı alanlardaki sayısız uygulamasına ve matematik problemlerini çözme şeklimiz üzerindeki inanılmaz etkisine daha yakından bakacağız. Basit bir uzaktan kumandanın ve özenle seçilmiş birkaç okun bizi zahmetsizce çözümlere götüreceği matematikte yeni bir döneme tanık olmaya hazır olun. Her seferinde bir Picobrick ile matematiğin geleceğine hoş geldiniz!

Bileşenler

1 x PicoBrick'ler

Bağlantı şeması 

Calculator project wiring

MicroPython Hesap Makinesi Kodu

makineden içe aktarma Pin, Zamanlayıcı, I2C
kullanım süresini içe aktar
picobricks'ten SSD1306_I2C'yi içe aktar
çerçeve çerçevesini içe aktar
 
hata ayıklama=Doğru
 
i2c = I2C(0, scl=Pin(5), sda=Pin(4), frek=200000)
oled = SSD1306_I2C(128, 64, i2c)
 
keyName = [['1','2','3','+'],
           ['4','5','6','-'],
           ['7','8','9','*'],
           ['c','0','=','/']]
tuş takımıRowPin'ler = [16,15,14,13]
tuş takımıSolPinleri = [9,8,3,2]
 
satır = []
sütun = []
tuş takımıDurumu = [];
keypadRowPins'de i için:
    row.append(Pin(i,Pin.IN,Pin.PULL_UP))
    keypadState.append([0,0,0,0])
keypadColPins'de i için:
    col.append(Pin(i,Pin.OUT))
 
def çöz(oprt, oprdA, oprdB):
    if(oprt == "+"):
        oprdA + oprdB'yi döndür
    elif(oprt == "-"):
        oprdA'yı döndür - oprdB
    elif(oprt == "*"):
        oprdA * oprdB'yi döndür
    elif(oprt == "/"):
        dönüş turu(oprdA / oprdB, 6)
 
def hesaplama(lst):
    işlenen = []
    operatör = []
   
    lst'teki i için:
        if(hata ayıklama):
            yazdır(i)
        if(i=='+'):
            while (len(operatör)!=0 ve (operatör[-1] == '*' veya operatör[-1] == '/' veya operatör[-1] == '-' veya operatör[-1] = = '+'))):
                b = işlenen.pop(-1)
                a = işlenen.pop(-1)
                c = operatör.pop(-1)
                işlenen.append(çöz (c,a,b))
            operatör.append(i)
        elif(i=='-'):
            while (len(operatör)!=0 ve (operatör[-1] == '*' veya operatör[-1] == '/' veya operatör[-1] == '-' veya operatör[-1] = = '+'))):
                b = işlenen.pop(-1)
                a = işlenen.pop(-1)
                c = operatör.pop(-1)
                işlenen.append(çöz (c,a,b))
            operatör.append(i)
        elif(i=='*'):
            while (len(operatör)!=0 ve (operatör[-1] == '*' veya operatör[-1] == '/'))):
                b = işlenen.pop(-1)
                a = işlenen.pop(-1)
                c = operatör.pop(-1)
                işlenen.append(çöz (c,a,b))
            operatör.append(i)
        elif(i=='/'):
            while (len(operatör)!=0 ve (operatör[-1] == '*' veya operatör[-1] == '/'))):
                b = işlenen.pop(-1)
                a = işlenen.pop(-1)
                c = operatör.pop(-1)
                işlenen.append(çöz (c,a,b))
            operatör.append(i)
 
        elif(i=='('):
            operatör.append(i)
 
        elif(i==')'):
            while(operatör[-1] !='('):
                b = işlenen.pop(-1)
                a = işlenen.pop(-1)
                c = operatör.pop(-1)
                işlenen.append(çöz (c,a,b))
            operatör.pop(-1)
        başka:
            işlenen.append(i)
           
    while(len(operatör) != 0):
        b = işlenen.pop(-1)
        a = işlenen.pop(-1)
        c = operatör.pop(-1)
        işlenen.append(çöz (c,a,b))
 
    dönüş işleneni[0]
 
def tuş takımıoku():
    küresel satır
    j_ifPressed = -1
    i_ifPressed = -1
    i aralığındaki için(0,len(col)):
        sütun[i].düşük()
        utime.sleep(0.005) #yerleşme süresi
        aralıktaki j için(0,len(satır)):
            basıldı = satır[j].değer() değil
            if(basıldı ve (tuş takımıDurumu[j][i] != basıldı)): #durum yüksek olarak değiştirildi
                keypadState[j][i] = basıldı
            elif(basılı değil ve (keypadState[j][i] != basılı)): # durum düşük olarak değiştirildi
                keypadState[j][i] = basıldı
                j_ifPressed = j
                i_ifPressed = i
        sütun[i].yüksek()
    if(j_ifPressed != -1 ve i_ifPressed != -1):
        anahtarAdı döndür[j_ifPressed][i_ifPressed]
    başka:
        dönüş -1
 
def printOled(lst):
    oledPos = {
            "x" : 0,
            "y" : 0
          }
   
    oled.fill(0)
    dize = ''
    lst'teki i için:
        dize += dizi(i)
    ben = 0
    while(l='0') veya key == '.'):
                girişListesi[-1] = girişListesi[-1] + tuşu
            elif(anahtar == '+' veya anahtar == '-' veya anahtar == '*' veya anahtar == '/'):
                if(inputList != ['']):
                    if(inputList[-1] == '' ve (inputList[-2] == '+' veya inputList[-2] == '-' veya inputList[-2] == '*' veya inputList[-2 ] == '/'))):
                        girişListesi[-2] = anahtar
                    elif(inputList[-1]==''):
                        girişListesi[-1]=anahtar
                        inputList.append('')
                    başka:
                        girişListesi[-1] = float(girişListesi[-1])
                        inputList.append(anahtar)
                        inputList.append('')
                   
            elif(anahtar == 's'):
                ShiftFlag = ShiftFlag değil
            elif(anahtar == 'a'):
                if(shiftFlag):
                    if(inputList[-1] != ''):
                        girişListesi[-1] = float(girişListesi[-1])
                        inputList.append(')')
                        inputList.append('')
                    başka:
                        girişListesi[-1] = ')'
                        inputList.append('')
                    ShiftFlag = Yanlış
                başka:
                    işaretFlag = işaretFlag değil
                    if(inputList[-1] == ''):
                        girişListesi[-1] = '-'
                    başka:
                        if(inputList[-1][0] == '-'):
                           girişListesi[-1] = girişListesi[-1][1:]
                        başka:
                            girişListesi[-1] = '-' + girişListesi[-1]
               
            elif(anahtar == 'b'):
                if(shiftFlag):
                    if(inputList[-1] == ''):
                        girişListesi[-1] = '('
                    başka:
                        inputList.append('(')
                    inputList.append('')
                    ShiftFlag = Yanlış
                başka:
                    if(inputList[-1] == ''):
                        girişListesi[-1] = 3,14
                    başka:
                        inputList.append(3.14)
                    inputList.append('')
            elif(anahtar == 'c'):
                if(shiftFlag):
                    girişListesi = ['']
                    ShiftFlag = Yanlış
                başka:
                    if(inputList == ["hata"]):
                        girişListesi = ['']
                    if(inputList != ['']):
                        if(inputList[-1] == ''):
                            inputList.pop()
                            girdiListesi[-1] = str(girişListesi[-1])[:-1]
                        başka:
                            girdiListesi[-1] = str(girişListesi[-1])[:-1]
            elif(anahtar == '='):
                if(inputList[-1] == ''):
                    inputList.pop(-1)
                elif(inputList[-1] != ')'):
                    girişListesi[-1] = float(girişListesi[-1])
                denemek:
                    ans = hesap(girişListesi)
                    inputList = [str(ans)]
                hariç:
                    cevap = ''
                    girişListesi = []
                    inputList.append("hata")
               
            printOled(girişListesi)
            yazdır(girişListesi)

Raspberry Pi Hesaplayıcının PicoBricks Kodu

Kod uzun olduğundan sizler için indirme butonu hazırladık. Belki PicoBrick'inizle deneyebilirsiniz. Aşağıdaki butondan indirebilirsiniz. 

İNDİRMEK

 

Arduino Elektronik Hesap Makinesi Kodu

#katmak
#"ACROBOTIC_SSD1306.h"yi dahil et
#katmak
#katmak
#define BUTTON_PIN 10
#define IR_RECEIVE_PIN 0

bool ikinciNumber = false;
bool ilkSayı = true;
bool hesaplanan = yanlış;
Dize numarası1 = ” “;
Dize numarası2 = ” “;
karakter işlemi;
Dize hesaplaması;
Dize a;

void writeScreen() {
  if (!secondNumber && !firstNumber) {
    oled.clearDisplay();
    oled.setTextXY(0, 0);
    oled.putString(sayı1);
    oled.setTextXY(0, (sayı1.uzunluk() + 1));
    oled.putString(String(işlem));
  } else if (secondNumber && hesaplanan) {
    Serial.print(“Hesaplama Yazdırılmalıdır: “);
    Serial.println(hesaplama);
    oled.setTextXY(3, 5);
    oled.putString(hesaplama);
  } else if (firstNumber && !secondNumber) {
    oled.clearDisplay();
    oled.setTextXY(0, 0);
    oled.putString(sayı1);
    oled.setTextXY(0, (sayı1.uzunluk() + 3));
    oled.putString(sayı2);
  } else if (!firstNumber && SecondNumber) {
    oled.clearDisplay();
    oled.setTextXY(0, 0);
    oled.putString(sayı1);
    oled.setTextXY(0, (sayı1.uzunluk() + 1));
    oled.putString(String(işlem));
    oled.setTextXY(0, (sayı1.uzunluk() + 3));
    oled.putString(sayı2);
  }
}

void writeChc(karakter karakteri) {
  if (firstNumber && !secondNumber) {
    // İlk sayı girilecek, başka hiçbir şey girilmeyecek!
    if (isDigit(karakter)) {
      sayı1 += karakter;
    } else if (!(sayı1 == ” “)) {
      işlem = karakter;
      ilkSayı = yanlış;
    }
  } else if (!firstNumber && ! SecondNumber) {
    // Sadece işlem girilecek, yeni işlem girilirse eski işlem silinip güncellenecektir.
    // Sayı girilirse ikinci sayıya sayı2 atanacak ve true olarak ayarlanacaktır.
    if (isDigit(karakter)) {
      sayı2 += karakter;
      ikinciSayı = doğru;
    } else if (!(sayı1 == ” “)) {
      işlem = karakter;
    }
  } else if (!firstNumber && SecondNumber) {
    if (karakter == 'c') {
      long int n1 = sayı1.toInt();
      long int n2 = sayı2.toInt();
      hesaplanan = doğru;
      if (işlem == '*') {
        hesaplama = Dize (n1 * n2);
      } else if (işlem == '/') {
        hesaplama = String (n1 / n2);
      } else if (işlem == '+') {
        hesaplama = Dizge (n1 + n2);
      } else if (işlem == '-') {
        hesaplama = Dize (n1 – n2);
      }
    } başka {
      sayı2 += karakter;
    }
  }
  writeScreen();
}

geçersiz kurulum() {
  Seri.begin(9600);
  Wire.begin();
  oled.init();
  oled.clearDisplay();
  pinMode(0, INPUT);
  pinMode(BUTTON_PIN, INPUT);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}

geçersiz döngü () {
  gecikme(500);
  if (IrReceiver.decode()) {
    int a = (IrReceiver.decodedIRData.decodedRawData);
    Seri.println(a);
    IrReceiver.resume(); // Sonraki değeri al
    eğer (a == -417792256) {
      writeChc('*');
    } else if (a == -1387069696) {
      writeChc('+');
    } else if (a == -150405376) {
      writeChc('/');
    } else if (a == -1520763136) {
      writeChc('-');
    } else if (a == -484638976) {
      writeChc('C');
    } else if (a == -1169817856) {

      writeChc('1');
    } else if (a == 1186529536) {
      writeChc('2');
    } else if (a == -1203241216) {
      writeChc('3');
    } else if (a == -1153106176) {
      writeChc('4');
    } else if (a == -1086259456) {
      writeChc('5');
    } else if (a == -1136394496) {
      writeChc('6');
    } else if (a == -1153106176) {
      writeChc('7');
    } else if (a == -367657216) {
      writeChc('8');
    } else if (a == -167117056) {
      writeChc('9');
    } else if (a == -434503936) {
      writeChc('0');
    }
  }
  while (hesaplanan) {
    writeScreen();
    oled.setTextXY(5, 0);
    oled.putString(“Yeni başlangıç ​​için picobricks butonuna basın”);
    if (digitalRead(BUTTON_PIN)) {
      sayı1 = ” “;
      sayı2 = ” “;
      işlem = ' ';
      hesaplama = ” “;
      hesaplanan = yanlış;
      ikinciSayı = yanlış;
    }
  }
}
Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment