Raspberry Pico ile Keypad Kullanımı

önce ı2c pinlerini yazıp daha sonra begin yapmamız gerekiyor. @Gokrtl
Yav varya adamın dibisin. Picoyu bozdum diye ikincisine bacak lehimliyordum bende :D

i2c pico.png
 
Şimdi birşey dikkatimi çekti bu picoyu daha önce 2 bilgisaya bağladım ben.
Bir arkadaşımın bilgisyarı.
Bir kendi bilgisayarım.
Birde şimdi seninkinde görüyorum.

Bu pico bağlandığı her bilgisayarda "com 10" alıyor
 
Şimdi birşey dikkatimi çekti bu picoyu daha önce 2 bilgisaya bağladım ben.
Bir arkadaşımın bilgisyarı.
Bir kendi bilgisayarım.
Birde şimdi seninkinde görüyorum.

Bu pico bağlandığı her bilgisayarda "com 10" alıyor
Evet. Normalde bırak bilgisayarı, USB portunu değişince bile COM'un değişmesi lazım.
Demekki buna özellikle "Sen COM10 kullan" demişler.

Şimdi yeni sorunlara devam edelim.
Keypad de tuş basmasında geç aksiyon alıyorum. Basınca tuş çalışmıyor, basılı tutunca birkan ms de bir çalışıyor.
Bunun nedeni LM35 sensörün kararlı çalışması için 350 kez for döngüsüne sokup delay(1) eklemem.
Bu döngüye 350ms ekliyor. Aynı şekilde voltaj okumada bir 350ms ekliyor. Etti 700ms. Bu da 1 saniye ye yakın olduğundan bu süre zarfınca tuşa basamamış oluyorum. Şimdi "millis" kullanmayı deneyeceğim ama onu tam beceremiyorum. Eski zaman, yeni zaman derken beyin yanıyor benim :)

Kod:
 /// LM35 Sıcaklık Sensörü
  for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
  {
    lm35 = lm35 + analogRead(lm35Pin);
    //delay(1);
  }
 
Evet. Normalde bırak bilgisayarı, USB portunu değişince bile COM'un değişmesi lazım.
Demekki buna özellikle "Sen COM10 kullan" demişler.

Şimdi yeni sorunlara devam edelim.
Keypad de tuş basmasında geç aksiyon alıyorum. Basınca tuş çalışmıyor, basılı tutunca birkan ms de bir çalışıyor.
Bunun nedeni LM35 sensörün kararlı çalışması için 350 kez for döngüsüne sokup delay(1) eklemem.
Bu döngüye 350ms ekliyor. Aynı şekilde voltaj okumada bir 350ms ekliyor. Etti 700ms. Bu da 1 saniye ye yakın olduğundan bu süre zarfınca tuşa basamamış oluyorum. Şimdi "millis" kullanmayı deneyeceğim ama onu tam beceremiyorum. Eski zaman, yeni zaman derken beyin yanıyor benim :)

Kod:
 /// LM35 Sıcaklık Sensörü
  for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
  {
    lm35 = lm35 + analogRead(lm35Pin);
    //delay(1);
  }
DUAL CORE ÖRNEĞİNE BAK
 
örneğin adını yanlış yazmışım MultiCore
2 çekrideğimiz var 2aynı işlemi eş zamanlı yapabilriiz
 
core.png

setup ve loop 1. çekirdek
setup1 ve loop1 2. çekirdek yani 2 ayrı program yazabilirsin bunlara ve sorunsuz çalışır birbirini etkilemeden
 
Bence biz senin projede 1 çekirdeğe hesaplama giriş çıkışlar vs. koyalım
1 çekirdek sadece display'i kontrol etsin
 
ama birşeyi denemem lazım 2çekirdek arasında değişkenleri gönderebiliyor muyuz
aklıma bu geldi deniyorum
 
Kod:
int a = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("CEKIRDEK 1");

}

void loop() {
  Serial.println(a);

}

void setup1() {

}

void loop1() {
  a++;
  delay(150);

}
 
bu çalıştı 2 core arasında değişkenlerin bir bloklama uğramıyor gidiyor
 
denemek için bir program yazdım işlemci kilitlendi.
Kod:
int a = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("CEKIRDEK 1");

}

void loop() {
  if (BOOTSEL) {
    delay(100);
    Serial.println(a);
  }

}

void setup1() {
  pinMode(25, OUTPUT);

}

void loop1() {
  if (BOOTSEL) {
    a++;
    digitalWrite(25, HIGH);
    delay(350);
    digitalWrite(25, LOW);
  }

}
 
Kod:
int a = 0;
bool fl = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("CEKIRDEK 1");

}

void loop() {
  if(fl == 1){
    Serial.println(a);
    fl = 0;   
  }


}

void setup1() {
  pinMode(25, OUTPUT);

}

void loop1() {
  if (BOOTSEL) {
    a++;
    digitalWrite(25, HIGH);
    delay(350);
    digitalWrite(25, LOW);
    fl = 1;
    while(BOOTSEL);
  }

}
mecbur bu şekilde çalıştırdım bi girişi 2 çekirdekten okumaya çalışınca sapıtıyor sanırım
 
Kod:
int a = 0;
bool fl = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("CEKIRDEK 1");

}

void loop() {
  if(fl == 1){
    Serial.println(a);
    fl = 0;  
  }


}

void setup1() {
  pinMode(25, OUTPUT);

}

void loop1() {
  if (BOOTSEL) {
    a++;
    digitalWrite(25, HIGH);
    delay(350);
    digitalWrite(25, LOW);
    fl = 1;
    while(BOOTSEL);
  }

}
mecbur bu şekilde çalıştırdım bi girişi 2 çekirdekten okumaya çalışınca sapıtıyor sanırım
Bende de şöyle bir şeye sebep oldu

 
bi yerde senin bu değişken sıfırlanıyor mu?
1.çekirdeğin en sonunda sıfırlanıyor
Kod:
//// Değerleri sıfırlama ////////////////
  Cdata = 0;
  I = 0;
  V = 0;
  Vdata = 0;
  vIN = 0;
  value;
 
1.çekirdeğin en sonunda sıfırlanıyor
Kod:
//// Değerleri sıfırlama ////////////////
  Cdata = 0;
  I = 0;
  V = 0;
  Vdata = 0;
  vIN = 0;
  value;
sıfırlayınca böyle gözükmesi normal bence.
ama nası çözeriz onu düşünüyorum.
sıfırlamasak ne olur?
 

Forum istatistikleri

Konular
7,550
Mesajlar
126,451
Üyeler
3,059
Son üye
Hacın

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top