Yarı iletken tedarik zincirinin karşı karşıya olduğu baskıyı hisseden Intel, Tower Semiconductor'ı satın alarak üretim kapasitesini genişletmeye çalışıyor.

Intel, son iki yılda, şu anda yalnızca ciddi tedarik zinciri kıtlığı nedeniyle şiddetlenen üretim zorluklarıyla boğuştu. Buna karşılık Intel, üretim kapasitelerini ve teknolojisini artırmak için Mart 2021'de entegre cihaz üretimi (integrated device manufacturing-IDM) 2.0 planını duyurdu.

Intel, Tower Semiconductor'ı satın alacak. Görüntü Intel'in izniyle kullanılmıştır
Intel, Tower Semiconductor'ı satın alacak. Görüntü Intel'in izniyle kullanılmıştır

Åžimdiye kadar, ÅŸirket bu arayışta agresif davrandı ve son zamanlarda orta batıdaki iki yeni ÅŸirkete milyarlarca dolar adadı. Åžimdi Intel, önde gelen bir küresel analog cihaz ÅŸirketi olan Tower Semiconductor'ı satın alarak geliÅŸmiÅŸ üretim arayışına devam ediyor.

Bu makale Tower Semiconductor'ı, kim olduklarını ve Intel'in bu satın alma yoluyla ne kazanmayı amaçladığını tartışacak.

Tower Semiconductor Kimdir ?

Merkezi İsrail'de bulunan Tower Semiconductor, otuz yılı aşkın süredir sektörde bir oyuncu olan analoga özel bir şirkettir.
Şu anda şirketin dünya çapında, özellikle İsrail, ABD ve Japonya'da bulunan yedi üretim tesisi bulunmaktadır.

Bir şirket olarak Tower, genellikle mobil, otomotiv ve enerji gibi yüksek büyüme gösteren pazarlara hizmet eder. Şirket, uygulamalar için son teknoloji proses teknolojileri sunarken, özelleştirilmiş analog çözümlerde uzmanlaşmıştır

  • Radyo frekansı (RF)
  • Yüksek performanslı analog
  • Entegre güç yönetimi
  • Tamamlayıcı metal oksit yarı iletken (CMOS) görüntüleme sensörleri
  • Mikro-elektromekanik sistem (MEMS)
  • Karışık sinyalli CMOS
Bunun da ötesinde, Tower, silikon-germanyum gibi malzemelerde uzman olduğunu iddia ediyor ve müşterilere üretim sürecini kolaylaştırmak için kapsamlı IP ve EDA ortaklıkları sunuyor.

Belirli bir teknoloji için Tower Semi tarafından sunulan işlem düğümleri. Görüntü, Tower Semiconductor'ın izniyle kullanılmıştır.



Tower Semiconductor otuz yılı aşkın bir süredir piyasada olmasına rağmen, bu haftanın başlarında açıklanan bir anlaşmada Intel, onu kabaca 5,4 milyar dolara satın almayı kabul etti.

İşlemin, düzenleyici onayları bekleyen 12 ay içinde tamamen tamamlanması bekleniyor. Intel, kendisinin ve Tower'ın dökümhanelerini tek bir büyük dökümhane hizmeti haline getirmeyi hedefliyor.


Intel Üretim Kapasitesini Artırıyor


Intel için Tower Semi'yi satın almanın birçok faydası var ve en önemlisi bu birleşmenin üretim kapasitesini önemli ölçüde artıracak olmasıdır.

Birleşmeler ve satın almalar (M&As) yarı iletken endüstrisinde oldukça tutarlı bir şekilde gerçekleşir, ancak her zaman şu soruyu gündeme getirir: ne kazanmak zorundalar?

Intel için Tower Semiconductor'ı satın almanın birçok faydası vardır ve en önemlisi bu birleşmenin üretim kapasitesini önemli ölçüde artıracağıdır.

Halihazırda Tower, ABD ve Asya'da büyük bir faaliyet varlığına sahiptir ve burada muhteşem şirketlere ve entegre cihaz üreticilerine (IDM'ler) yılda 2 milyondan fazla devre levhası başlatma kapasitesi ve büyümesi sağlama kapasitesine sahiptir.

Böylece Intel, Tower Semiconductor'ı satın alarak, özellikle RF ve güç gibi yüksek büyüme gösteren pazarlarda üretim yeteneklerini önemli ölçüde iyileştirebilir.

Özellikle, Tower'ın Asya'daki varlığı, şu anda dünyanın en büyük yarı iletken üreticisi olan Asya merkezli TSMC ile rekabet etmeyi hedeflediği için Intel için hayati önem taşıyor.

Intel ayrıca Tower'ın teknolojisinin ve üretim ayak izinin Intel'in öncü süreçlerdeki yeteneklerini tamamlayarak birleştirilmiş şirketin müşterilere geniş ölçekte daha geniş teklifler sunmasına olanak tanıdığından övünür.

Intel'e göre Tower'ın eklenmesi, Intel'in yaklaşık 100 milyar dolarlık adreslenebilir dökümhane pazarında, müşterilere daha fazla değer katacak şekilde konumlandırılmasına yardımcı oluyor.


Endüstri Üzerindeki Etkisi

Sektöre gelince, bu satın almanın olumlu yönleri, bu iki fabrikanın kaynaklarının ve kapasitesinin konsolidasyonunun daha yüksek çıktı ve verimlilik anlamına gelmesi gerektiğidir.

Yarı iletken endüstrisinin ciddi tedarik zinciri sıkıntısı çektiği bir zamanda, bu birleşme umarım iki şirket arasında daha yüksek çıktıya izin verecek ve bu da daha fazla çip kullanılabilirliği anlamına gelecektir.



Kaynak

https://www.allaboutcircuits.com/news/intel-acquires-tower-semiconductor-for-5.4b-increase-manufacturing-capacity/












 Thread Nedir?

Bir thread, bir process içerisindeki yürütme birimidir. Bir process'in aynı anda birden fazla iÅŸi yapmasını saÄŸlayan yapılardır. Bir process, yapısında birden fazla thread bulundurabilir, bu yapılara multithreading denir. 

Process Nedir?

Process, ihtiyaç duyulan tüm kaynaklar ile birlikte belleğe yüklenmiş bir programdır. Her process'in ihtiyaç duyduğu temel kaynaklar; register, counter ve stack'tir. Her processin ayrı bir bellek adresi vardır, bu da her işlemin bağımsız olarak çalıştığı ve diğer işlemlerden izole edildiği anlamına gelir. Yani bir process çalışırken yalnızca kendini çalışıyor zanneder. Diğer işlemlerde paylaşılan verilere doğrudan erişemez.

Process vs Thread

  • Bir thread’in oluÅŸturulması ve sonlandırılması process’lere göre daha kısa sürer
  • Process’ler birbirinden izole bir ÅŸekilde çalışırken, thread’ler aynı bellek kaynağını paylaşır
  • Process’ler, thread’lere göre daha fazla kaynak tüketimi yaparlar
  • Bir process bloklanırsa baÅŸka bir process iÅŸlemini gerçekleÅŸtiremez. Öncelikle ilk process’in iÅŸini bitirmesini bekler. Ancak bu durum thread’lerde geçerli deÄŸildir. Bir thread baÅŸka bir thread bloklansa bile çalışabilir.
  • Ölçeklenebilirlik açısından thread’ler daha avantajlıdır. Process’lerin ölçeklendirilmesi için çok iÅŸlemcili yapı gerekmektedir. Bu da processler’de ölçeklendirmenin donanımsal olarak yapıldığını bizlere gösteriyor. thread’lerde ise çok çekirdekli iÅŸlemcilerde birden fazla thread farklı çekirdeklerde çalıştırılabilir.

C Programlamada Thread OluÅŸturma

Linux işletim sistemini kullanarak thread'leri kolaylıkla oluşturabiliriz. Şimdi ilk örneğe bakalım:

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

void *worker_thread(void *arg)

{

        printf("This is worker_thread()\n");

        return NULL;

}

int main()

{

        pthread_t my_thread;

        int ret;

        printf("In main: creating thread\n");

        ret = pthread_create(&my_thread, NULL, &worker_thread, NULL);

   if(ret != 0) {

                printf("Error: pthread_create() failed\n");

        }

        pthread_join(my_thread, NULL);

        return 0;

}
Çıktı:



Main thread, worker_thread yürütmek için bir thread oluşturacaktır. Main de pthread_t türünde my_thread adında bir değişken bildirdik. Bir thread oluşturmak için pthread_create() fonksiyonunu kullandık. Bu fonksiyon 4 tane değişken alır. Bunlar:
  • İlki, my_thread için bir pointer,
  • İkincisi, nitelikleri belirtir,
  • Üçüncüsü, thread için yürütülecek olan fonksiyon,
  • Dördüncüsü, worker_thread fonksiyonuna argüman göndermek için kullanılır.
pthread_join fonksiyonu ile, bir thread'in sonlanmasını bekleyebiliriz. Bu fonksiyonun kullanıldığı thread, sonlanması beklenen thread sonlanana kadar bloklanacaktır.

Başka bir örnek daha, bu örnekte 5 tane thread oluşturduk:

 

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

#define N 5

void *worker_thread(void *arg)

{

        printf("This is worker_thread #%ld\n", (long)arg);

        return NULL;

}

int main()

{

        pthread_t my_thread[N];

        long id;

   int ret;

        printf("In main: creating thread\n");

        for(id = 1; id <= N; id++) {

                ret =  pthread_create(&my_thread[id], NULL, worker_thread, (void*)id);

                if(ret != 0) {

                        printf("Error: pthread_create() failed\n");

                }

        }

        for(id = 1; id <= N; id++) {

pthread_join(my_thread[id], NULL);

  }

        return 0;

}


Çıktı:





Kaynaklar:

http://alpegeakarsu.com/process-ve-thread-nedir/

https://demirten.gitbooks.io/linux-sistem-programlama/content/threads/types.html

https://devnot.com/2021/thread-nedir-detayli-bir-thread-incelemesi/

https://www.elektrikport.com/teknik-kutuphane/thread-nedir-thread-cde-nasil-kullanilir-ve-nasil-yazilir/23510#ad-image-0 






     Projelerle arduino ve proteus serisine baÅŸlamaya karar verdim. Çünkü, bu ÅŸekilde hem proteus hem de arduino beraber kolaylıkla öğrenilebilecektir. 

    Hadi ilk bölüme baÅŸlayalım

Proteus da Arduino ile Led Yakma


    Ã–ncelikle proteus'a arduino kütüphanesinin eklenmiÅŸ olmalıdır. Ben arduino kütüphanesinin ekli olduÄŸunu varsayarak devam edeceÄŸim.

    Proteus da devremizi kurmak ile baÅŸlayalım. 

    Arduino uno, bir direnç ve bir led'e ihtiyacımız vardır. Gerekli olan kompanentleri eklediÄŸimizde devremiz aÅŸağıdaki gibi olacaktır.


    Arduinonun 9 numaralı pinine direncimizi baÄŸlayacağız. Ve hemen ardına ledimizi baÄŸlayacağız. Devrenin tamamlanması için ground baÄŸlantısını da yapmamız gerekmektedir.


Arduino kodumuz ise:

int led = 9;

void setup() {

  pinMode(led,OUTPUT);

}


void loop() {

  digitalWrite(led,HIGH);

  delay(1000);

  digitalWrite(led,LOW);

  delay(1000);

}

    Bu kodda int led = 9; ile adı led olan bir deÄŸiÅŸken tanımlanmaktadır ve deÄŸeri de 9 olarak atanmıştır. Bu bizim arduino da ledmizi baÄŸladığımızı pini temsil etmektedir. 

pinMode(led,OUTPUT); ile 9 numaralı olan pinimizi OUTPUT olarak yani çıkış olarak tanımlamış olduk.

digitalWrite(led,HIGH); ile 9 numaralı pine 5 V verdik yani 9 numaralı pinin çıkışını lojik 1 yaptık.

delay(1000); ile 1 saniye bekledik.

digitalWrite(led,LOW); ile 9 numaralı pinin çıkışını lojik 0 yaptık yani 9 numaralı pine 0 V verdik.


    Bu ÅŸekilde 9 numaralı pine baÄŸlı olan led 1 saniye yandıktan sonra 1 saniye de sönecektir.


    Yazdığımız bu kodu arduino ya yüklemek için, kodun .hex uzantılı dosyasına ihtiyacımız vardır. Bu dosyayı elde edebilmek için ise; arduino da Dosya > Tercihler bölümüne gelmemiz gerekmektedir. Burada; aÅŸağıdaki iÅŸlem sırasında detaylı çıktı göster kısmındaki derleme ve yükle'nin seçili olması gerekmektedir.


    Bu iÅŸlemi yaptıktan sonra yazığımız kodu derleyelim. Derleme iÅŸlemini yaptıktan sonra teminalde .hex uzantılı dosya konumunu bulmamız gerekecektir. Bu dosya konumunu kopyalamamız lazım. AÅŸağıda gösterildiÄŸi gibidir.


    Kopyaladığımız bu .hex uzantılı olan dosya konumunu aÅŸağıda iÅŸaretli olan alana yapıştıracağız.


    Bu iÅŸlemlerden sonra arduinoya kodumuz yüklenmiÅŸ olacaktır. Simülasyonu baÅŸlattığımızda doÄŸru bir ÅŸekilde çalışacaktır.






 Arduino da baÄŸlı ola iki LED'i farklı aralıklar ile yakacağız. Bir LED 1 saniye de 10 kere yanarken, diÄŸer LED 1 saniye de 1 kere yaranacak.


Arduino'nun 2 ve 3 numaralı pinlerine LED'lerimizi bağlayacağız.


Devre Şeması:



Arduino Kodu:

int a = 0;

void setup() {

  // put your setup code here, to run once:

  pinMode(2,OUTPUT);

  pinMode(3,OUTPUT);

}


void loop() {

  // put your main code here, to run repeatedly:

  digitalWrite(2,1);

  delay(50);

  digitalWrite(2,0);

  delay(50);

  a++;

  if(a>5){

    digitalWrite(3,1);

  }

  if(a>10){

    a=0;

    digitalWrite(3,0);

  }

}

https://github.com/sumeyyevarmis/arduino-led-blink


https://create.arduino.cc/projecthub/sumeyye-varmis/arduino-2-led-blink-24c93c





Bu çalışmada, arduino da nextion ekran kullanarak hesap makinesi yapacağız.

Nextion Editor kullanarak arayüzümüzü tasarlayacağız. Ben bu uygulama için 2.8 inch ekranı kullandım.

Tasarlanan Arayüz



Devre






Arduino Kodu


#include "Nextion.h"

SoftwareSerial HMISerial(0, 1); // RX, TX

#define NETXION_PAGE_ID 0
#define NETXION_TEXT 1
#define NETXION_BUTTON_1 2
#define NETXION_BUTTON_2 3
#define NETXION_BUTTON_3 4
#define NETXION_BUTTON_4 5
#define NETXION_BUTTON_5 6
#define NETXION_BUTTON_6 7
#define NETXION_BUTTON_7 8
#define NETXION_BUTTON_8 9
#define NETXION_BUTTON_9 10
#define NETXION_BUTTON_0 11
#define NETXION_BUTTON_ENTER 12
#define NETXION_BUTTON_CL 13
#define NETXION_BUTTON_Plus 14
#define NETXION_BUTTON_Moins 15
#define NETXION_BUTTON_Mul 16
#define NETXION_BUTTON_Div 17

NexButton Button_0  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_0, "Btn0");
NexButton Button_1  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_1, "Btn1");
NexButton Button_2  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_2, "Btn2");
NexButton Button_3  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_3, "Btn3");
NexButton Button_4  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_4, "Btn4");
NexButton Button_5  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_5, "Btn5");
NexButton Button_6  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_6, "Btn6");
NexButton Button_7  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_7, "Btn7");
NexButton Button_8  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_8, "Btn8");
NexButton Button_9  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_9, "Btn9");
NexButton Button_CL  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_CL, "BtnCL");
NexButton Button_ENTER  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_ENTER, "BtnEnter");
NexButton Button_Plus  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Plus, "BtnPlus");
NexButton Button_Moins  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Moins, "BtnMoins");
NexButton Button_Mul  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Mul, "BtnMul");
NexButton Button_Div  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Div, "BtnDiv");

NexText Text = NexText(NETXION_PAGE_ID, NETXION_TEXT, "Text");

 
NexTouch *nex_listen_list[] = 
{
    &Button_0,
    &Button_1,
    &Button_2,
    &Button_3,
    &Button_4,
    &Button_5,
    &Button_6,
    &Button_7,
    &Button_8,
    &Button_9,
    &Button_CL,
    &Button_ENTER,
    &Button_Plus,
    &Button_Moins,
    &Button_Mul,
    &Button_Div,
    NULL
};

unsigned char N_Str[10]={0}, i=0, Affichage[10];
float Pile[4]={0}, N; 

void button_0_Callback(void *ptr)
{


  N_Str[i]='0';
  Text.setText(N_Str);
  i++;
}

void button_1_Callback(void *ptr)
{
  N_Str[i]='1';
  Text.setText(N_Str);
  i++;
}

void button_2_Callback(void *ptr)
{
  N_Str[i]='2';
  Text.setText(N_Str);
  i++;
}

void button_3_Callback(void *ptr)
{
  N_Str[i]='3';
  Text.setText(N_Str);  
  i++;
}

void button_4_Callback(void *ptr)
{
  N_Str[i]='4';
  Text.setText(N_Str);
  i++;
}

void button_5_Callback(void *ptr)
{
  N_Str[i]='5';
  Text.setText(N_Str);
  i++;
}

void button_6_Callback(void *ptr)
{
  N_Str[i]='6';
  Text.setText(N_Str); 
  i++;
}

void button_7_Callback(void *ptr)
{
  N_Str[i]='7';
  Text.setText(N_Str);
  i++;
}

void button_8_Callback(void *ptr)
{
  N_Str[i]='8';
  Text.setText(N_Str);
  i++;
}

void button_9_Callback(void *ptr)
{
  N_Str[i]='9';
  Text.setText(N_Str); 
  i++;
}


void button_CL_Callback(void *ptr)
{
  Text.setText("");
  
  //Remise à "0" de N_Str
  for(int b=0; b<10 ; b++) N_Str[b]=0;  

  //Remise à "0" de la pile
  for(int b=0; b<4 ; b++) Pile[b]=0; 
}

void button_Plus_Callback(void *ptr)
{
  N=atof(N_Str);
  //Décalage de la pile vers le haut
  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[0] + Pile[1];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Moins_Callback(void *ptr)
{
  N=atof(N_Str);

  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[1] - Pile[0];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Mul_Callback(void *ptr)
{
  N=atof(N_Str);

  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[0] * Pile[1];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Div_Callback(void *ptr)
{
  N=atof(N_Str);
  
  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[1] / Pile[0];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
  
}

void button_Enter_Callback(void *ptr)
{
 
  Pile[3]=Pile[2];
  Pile[2]=Pile[1];
  Pile[1]=Pile[0];


  Pile[0]=atof(N_Str);

  Text.setText("");

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}



void setup() {

  nexInit();

  Button_0.attachPush(button_0_Callback, &Button_0);
  Button_1.attachPush(button_1_Callback, &Button_1);
  Button_2.attachPush(button_2_Callback, &Button_2);
  Button_3.attachPush(button_3_Callback, &Button_3);
  Button_4.attachPush(button_4_Callback, &Button_4);
  Button_5.attachPush(button_5_Callback, &Button_5);
  Button_6.attachPush(button_6_Callback, &Button_6);
  Button_7.attachPush(button_7_Callback, &Button_7);
  Button_8.attachPush(button_8_Callback, &Button_8);
  Button_9.attachPush(button_9_Callback, &Button_9);
  Button_CL.attachPush(button_CL_Callback, &Button_CL);
  Button_ENTER.attachPush(button_Enter_Callback, &Button_ENTER);
  Button_Plus.attachPush(button_Plus_Callback, &Button_Plus);
  Button_Moins.attachPush(button_Moins_Callback, &Button_Moins);
  Button_Mul.attachPush(button_Mul_Callback, &Button_Mul);
  Button_Div.attachPush(button_Div_Callback, &Button_Div);
  
}

void loop() {
    nexLoop(nex_listen_list);

}








Arduino da nextion ekranı kullanarak led yakma ve led söndürme uygulaması gerçekleştireceğiz. Nextion ekran kullanacağımız için Nextion Editor uygulamasını indirmemiz gerekmektedir. Bu uygulama sayesinde ekranımız için istediğimiz arayüzü tasarlayabileceğiz. Basit bir ara yüze sahiptir.

Nextion Editor indirmek için aşağıdaki linkten ulaşabilirsiniz:

https://nextion.tech/nextion-editor/

Bu uygulama da 2.8 inch ekran kullanılmıştır. 

Tasarlanan Arayüz


Arduino Kodu:


#include "Nextion.h"
#include <SoftwareSerial.h>

SoftwareSerial HMISerial(0,1);

// b0 led on, b1 led off

NexDSButton b0 = NexDSButton(0,1,"b0");// sayfa, id, isim
NexDSButton b1 = NexDSButton(0,2,"b1");
NexText t0 = NexText(0,3,"t0");

// butonların durumları
uint32_t led_on = 0;
uint32_t led_off = 0;

const int led = 13;

void setup(){
  dbSerialPrintln("setup begin");
  nexInit();
  dbSerialPrintln("stup done");

  pinMode(led,OUTPUT);
}

void loop(){
  b0.getValue(&led_on);
  b1.getValue(&led_off);

  delay(200);
  if(led_on == 1){
    t0.setText("Led On");
    digitalWrite(led,HIGH);
  }
  if(led_off == 1){
    t0.setText("Led Off");
    digitalWrite(led, LOW);
  }
}



Kod ve ekran arayüz tasarımına aşağıdaki linkten ulaşabilirsiniz:


 Arduinoya baÄŸlanan bir butona ne kadar süre basıldığını bulmak için millis() fonksiyounu kullanılır. Millis() fonksiyonu, arduinoya enerji verildiÄŸi zaman otomatik olarak çalışmaya baÅŸlar. Bulunan zaman deÄŸeri milisaniye cinsindendir. 


Devre şeması:



Arduino kodu:

const int button = 3;

unsigned long time1 = 0;

unsigned long time2 = 0;

void setup()

{

  pinMode(button,INPUT);

  Serial.begin(9600);

}


void loop()

{

  while(digitalRead(button)==0){}

  while(digitalRead(button)==1){}

  Serial.println(digitalRead(button));

  

  while(digitalRead(button)==0){

    Serial.println("while 1");

    Serial.println(digitalRead(button));

  }

  time1 = millis();

  while(digitalRead(button)==1){ 

    Serial.println("while 2");

    Serial.println(digitalRead(button));

  }

  time2 = millis() - time1;

  

  Serial.println(time2);

  delay(1000);

  

}