arduino projeleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
arduino projeleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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

  

}