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 :)

C:
 /// 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 :)

C:
 /// 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
 
2CORE:
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.
lock:
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);
  }

}
 
rec:
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
 
rec:
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
C:
//// 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
C:
//// 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?
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,988
Mesajlar
102,163
Üyeler
2,517
Son üye
Dzenit

Son kaynaklar

Son profil mesajları

deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
Back
Top