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?
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
7,285
Mesajlar
123,137
Üyeler
2,938
Son üye
oguzbaste

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top