Merhaba arkadaşlar elimdeki kod lcd ekranda çalışmaktadır. Bu kodu 0.96 inch I2C OLED Ekran - SSD1306 Satın Al | Robotistan.com bu ekranda çalıştıramadım bu konuda yardımcı olabilecek birisi var mı acaba ?
Merhaba,
lcd de çalıştırmak istediğiniz kod nedir?
Merhaba kodu atarsanız daha iyi yardımcı olabiliriz.
Bu şekilde atıyorum metin belgesi veya arduino şeklinde kabul etmedği için.
/*
nabız ölçer ve oksimetre cihazı
*/
#include "MAX30100_PulseOximeter.h" // sensörün register, hafıza ve bilgilerinin alındığı kütüphane
#include <LiquidCrystal.h> // lcd ekranın kütüphanesi
#define REPORTING_PERIOD_MS 1000//verilerin ekrana yazdırma sıklığı için milisaniye cinsinden değişken değeri atanıyor
PulseOximeter pox;// PulseOximeter clasından bir obje oluşturuluyor
LiquidCrystal lcd(2, 4, 9, 10, 11, 12); // lcd ekranın bacakları tanımlanıyor .11= RS 9=E 5=D4 4=D5 3=D6 2=D7
uint32_t tsLastReport = 0;// en son raporlama değeri için bir değişken oluşturuluyor
int data=0; // ortamala da kullanılacaj değişken belirleniyor
float top=0; // ortalamada toplamın atanacağı değişken oluşturuluyor
float aratop; // ikinci ortalama işlemi için toplamın atnacağı değişken
int a=1; // serial ekranda parmak konmayınca sürekli olarak " barmagınzı sensore koyun" yazmasını engellemek için kullanılacak olan değişken atanıyor
// kalp atışı tespit edildiğinde bu aşağıdaki fonksiyon çalışır
void onBeatDetected()
{
lcd.clear(); // lcd temizle
Serial.println("olcuyor"); //serial ekrana "olcuyor" yaz
lcd.setCursor(1, 0); //lcd de birinci sutun 0. satıra gıt
lcd.print("olcuyor"); // orda "olcuyor" yaaz
data++;// ortalama için sayaç
a=1;
}
void setup()//ana fonksiyon
{ pinMode(3,OUTPUT);
digitalWrite(3,LOW);
lcd.begin(16, 2); /* Kullandigimiz LCDnin sutun ve satir sayisini belirtmeliyiz */
Serial.begin(9600);
lcd.clear();// lcd temizleniyor
lcd.setCursor(0, 0);// 0.satır ve 0.sutuna gidiliyor lcd de
lcd.print("nabiz:");//lcd ye "nabız" yazısı yazdırılır
// kalp atışı durumunda fonksiyonumuzun çalışması için fonksiyonu aktif hale getiriyoruz
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop()// sonsuz döngü fonksiyonuna giriş yapılıyor
{
// update olayının olabildiğince erken olması lazım.
pox.update();
// sensor sıfır okursa alınan veri geçersiz olur
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {//milis fonksiyonundan son raporlama değişkeni çıkarılıp bunun raporlaama zamanından buyuk olması durumunda ekrana veri aktarılıyor
for(int i=0;i<10;i++){aratop=aratop+pox.getHeartRate();} //ilk ortamala olarak alınan 10 defa nabız değeri alınıp ortalamsı alınıyor
aratop=aratop/10;
top=top+aratop;
aratop=0;
if(data>4){
top=top/4;
lcd.clear();// lcd temizleniyor
lcd.setCursor(0, 0);// 0.satır ve 0.sutuna gidiliyor lcd de
lcd.print("nabiz:");//lcd ye "nabız" yazısı yazdırılır
lcd.print(top);// top değişkenini ekrana yaz
lcd.setCursor(11, 0); // 12. sutun 0. satıra git
lcd.print("bpm "); // beat per minute- dakıka toplam atım
lcd.setCursor(0, 1);// 0.sutun 1. satıra git
lcd.print("Spo2:%"); // ekrana oksijen yaz
lcd.print(pox.getSpO2()); // oksijen saturasyonunu veren değişkeni ekrana yaz
lcd.setCursor(9, 1);
lcd.print(pox.getTemperature());
lcd.print("C");
Serial.print("nabiz:"); // serial porta nabız yazısını yazdır
Serial.print(top); // serial porta top değişkenini yazdır
Serial.print("bpm / SpO2:%"); // serial porta "bpm/ SpO2 " yazısını yazdır
Serial.println(pox.getSpO2());// oksijan saturasyonunu serial porta yaz
delay(3000); // 3 sn bekle
lcd.clear();// ekranı temızle
top=0; // değişkneleri sıfırla
data=0;
}
tsLastReport = millis();
}
if (pox.getHeartRate()==0) { lcd.setCursor(0, 0); lcd.print(" parmaginizi");lcd.setCursor(0, 1);lcd.print(" sensore koyun"); }// nabız algılanmaz ise lcd ekrana "parmagınızı sensore koyun" yazısı yazdır
if(pox.getHeartRate()==0 && a==1) { Serial.println(" parmaginizi");Serial.println("sensore koyun"); a=0;} // nabız algılanmaz ise serial porta "parmagınızı sensore koyun" yazısı yazdır
}
İsterseniz mail olarak atabilirim bu şekilde zor olursa
Mail atmaya gerek yok düzeltim. Kodları şaun yazıyorum.
Şu şekilde kodları yazdım setCursor’ları düzeltirsin sonradan.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
#include "MAX30100_PulseOximeter.h"
#define REPORTING_PERIOD_MS 1000
PulseOximeter pox;
uint32_t tsLastReport = 0;
int data=0;
float top=0;
float aratop;
int a=1;
void onBeatDetected()
{
display.clearDisplay();// lcd temizle
Serial.println("olcuyor"); //serial ekrana "olcuyor" yaz
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.print("olcuyor"); // orda "olcuyor" yaaz
data++;// ortalama için sayaç
a=1;
}
void setup() {
pinMode(3,OUTPUT);
digitalWrite(3,LOW);
Serial.begin(9600);
// Oledimizi i2c Adresini girdik 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Arduino Oledimizin Tampon belleğini temizledik
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(1,28);
display.print("nabiz:");
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop() {
// update olayının olabildiğince erken olması lazım.
pox.update();
// sensor sıfır okursa alınan veri geçersiz olur
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {//milis fonksiyonundan son raporlama değişkeni çıkarılıp bunun raporlaama zamanından buyuk olması durumunda ekrana veri aktarılıyor
for(int i=0;i<10;i++){aratop=aratop+pox.getHeartRate();} //ilk ortamala olarak alınan 10 defa nabız değeri alınıp ortalamsı alınıyor
aratop=aratop/10;
top=top+aratop;
aratop=0;
if(data>4){
top=top/4;
display.clearDisplay();// lcd temizleniyor
display.setCursor(0, 0);
display.print("nabiz:");//lcd ye "nabız" yazısı yazdırılır
display.print(top);// top değişkenini ekrana yaz
display.setCursor(1, 28);
display.print("bpm "); // beat per minute- dakıka toplam atım
display.setCursor(0, 28);// 0.sutun 1. satıra git
display.print("Spo2:%"); // ekrana oksijen yaz
display.print(pox.getSpO2()); // oksijen saturasyonunu veren değişkeni ekrana yaz
display.setCursor(9, 28);
display.print(pox.getTemperature());
display.print("C");
Serial.print("nabiz:"); // serial porta nabız yazısını yazdır
Serial.print(top); // serial porta top değişkenini yazdır
Serial.print("bpm / SpO2:%"); // serial porta "bpm/ SpO2 " yazısını yazdır
Serial.println(pox.getSpO2());// oksijan saturasyonunu serial porta yaz
delay(3000); // 3 sn bekle
display.clearDisplay();// ekranı temızle
top=0; // değişkneleri sıfırla
data=0;
}
tsLastReport = millis();
}
if (pox.getHeartRate()==0) { display.setCursor(0, 0); display.print(" parmaginizi");display.setCursor(0, 1);display.print(" sensore koyun"); }// nabız algılanmaz ise lcd ekrana "parmagınızı sensore koyun" yazısı yazdır
if(pox.getHeartRate()==0 && a==1) { Serial.println(" parmaginizi");Serial.println("sensore koyun"); a=0;} // nabız algılanmaz ise serial porta "parmagınızı sensore koyun" yazısı yazdır
}
hocam çok teşekkür ederim öncelikle
exit status 1
expected ‘;’ before ‘top’
şöyle bir hata alıyorum
Hatayı hangi satırda veriyor. İsterseniz ss atabilirsiniz.
O kod satırını bir üstindrki satırın sonuna noktalı virgül koymanız gerek
; koyunca düzeldi teşekkür ederim görememişim bende
Hata kodunun bi üstündeki satırı display.clearDisplay();
olarak değiştirirseniz hata geçer.
Çok çok teşekkür ederim gerçekten. Çok yardımcı oldunuz