<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Projeler &#8211; Robo90 &#8211; Blog</title>
	<atom:link href="https://blog.robo90.com/kategori/projeler/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.robo90.com</link>
	<description>Arduino, 3D Yazıcı, Elektronik, Yazılım ve Teknoloji Hakkında Yüzlerce İçerik!</description>
	<lastBuildDate>Fri, 17 Apr 2026 11:27:37 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.robo90.com/wp-content/uploads/2023/09/cropped-robo90-blog-favicon-robot-1-32x32.png</url>
	<title>Projeler &#8211; Robo90 &#8211; Blog</title>
	<link>https://blog.robo90.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino ile FM Radyo Uygulaması</title>
		<link>https://blog.robo90.com/arduino-ile-fm-radyo-uygulamasi/</link>
					<comments>https://blog.robo90.com/arduino-ile-fm-radyo-uygulamasi/#respond</comments>
		
		<dc:creator><![CDATA[Şirzat Açıkgöz]]></dc:creator>
		<pubDate>Fri, 19 Apr 2024 13:25:06 +0000</pubDate>
				<category><![CDATA[Arduino Projeleri]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[fm]]></category>
		<category><![CDATA[radyo]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=8987</guid>

					<description><![CDATA[<p>Merhabalar, Robo90 firmasından satın almış olduğum aşağıdaki elektronik parçalar ve Arduino kodlama ile yapmış olduğum FM Radyo devresi çalışmasını aşağıda görecekseniz. Elektronik Parçalar; 1-Nokia 5110 LCD Ekran &#8211; 84&#215;48 &#8211; Arduino Uyumlu https://www.robo90.com/nokia-5110-lcd-ekran-84&#215;48-arduino-uyumlu 2-TEA5767 FM Stereo Radyo Modülü: FM sinyalleri almak için tercih ettiğim radyo modülü. https://www.robo90.com/tea5767-fm-stereo-radyo-modulu 3-Arduino Nano Klon: Projenin beyni olarak görev yapan [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/arduino-ile-fm-radyo-uygulamasi/">Arduino ile FM Radyo Uygulaması</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Merhabalar, Robo90 firmasından satın almış olduğum aşağıdaki elektronik parçalar ve Arduino kodlama ile yapmış olduğum FM Radyo devresi çalışmasını aşağıda görecekseniz.</p>



<p class="wp-block-paragraph">Elektronik Parçalar;</p>



<p class="wp-block-paragraph">1-Nokia 5110 LCD Ekran &#8211; 84&#215;48 &#8211; Arduino Uyumlu <a href="https://www.robo90.com/nokia-5110-lcd-ekran-84x48-arduino-uyumlu">https://www.robo90.com/nokia-5110-lcd-ekran-84&#215;48-arduino-uyumlu</a></p>



<p class="wp-block-paragraph">2-TEA5767 FM Stereo Radyo Modülü: FM sinyalleri almak için tercih ettiğim radyo modülü. <a href="https://www.robo90.com/tea5767-fm-stereo-radyo-modulu">https://www.robo90.com/tea5767-fm-stereo-radyo-modulu</a></p>



<p class="wp-block-paragraph">3-Arduino Nano Klon: Projenin beyni olarak görev yapan Arduino Nano. <a href="https://www.robo90.com/arduino-nano-klon-usb-kablo-hediyeli">https://www.robo90.com/arduino-nano-klon-usb-kablo-hediyeli</a></p>



<p class="wp-block-paragraph">4-PAM8403 2x3W Mini Ses Yükseltici Kartı &#8211; Stereo &#8211; Amfi-Potlu: Stereo amfi olarak kullanılarak sesi hoparlöre aktarıyor. <a href="https://www.robo90.com/pam8403-2x3w-mini-ses-yukseltici-karti-stereo-amfi-potlu">https://www.robo90.com/pam8403-2x3w-mini-ses-yukseltici-karti-stereo-amfi-potlu</a></p>



<p class="wp-block-paragraph">5-Rotary Encoder Modülü &#8211; KY-040 &#8211; Arduino Uyumlu: Radyo frekansını ayarlamak için kullanılan döner enkoder. <a href="https://www.robo90.com/rotary-encoder-modulu-ky-040-arduino-uyumlu">https://www.robo90.com/rotary-encoder-modulu-ky-040-arduino-uyumlu</a></p>



<p class="wp-block-paragraph">6-Hoparlör: 4 ohm 3 watt</p>



<p class="wp-block-paragraph">7-Seetronic MTP3C Stereo 3.5mm Jak (TEA5767 hoparlör çıkışı için)</p>



<p class="wp-block-paragraph">FM radyo projemizde, Arduino Nano ile frekans ayarlamalarını yapabiliyoruz ve radyo sinyallerini TEA5767 modülü ile alıyoruz. Ekran olarak Nokia 5110 kullanarak radyo frekansını ve kanal bilgilerini görüntüleyebiliyoruz. Ses yükseltme kartı (PAM8403) ise sinyali hoparlöre aktarıyor. Rotary Encoder, frekans ayarını hassas bir şekilde yapmamızı sağlıyor.</p>



<h3 class="wp-block-heading">FM Radyo Uygulama Videosu</h3>



<p class="wp-block-paragraph">FM radyo devremizin nasıl çalıştığını görmek isterseniz aşağıdaki video bağlantısından uygulama videosunu izleyebilirsiniz.</p>



<figure class="wp-block-video aligncenter"><video height="848" style="aspect-ratio: 480 / 848;" width="480" controls src="https://blog.robo90.com/wp-content/uploads/2024/04/SirProgramming-FM-Radyo.mp4"></video></figure>



<p class="wp-block-paragraph">Arduino kod yazılımını da aşağıya ekliyorum.&nbsp;</p>



<p class="wp-block-paragraph">Dikkat etmeniz gerekenler için;</p>



<p class="wp-block-paragraph">1- Kod içinde kullanılan kütüphanelerin linkleri aynı satırda verilmiştir. Bu linkleri kullanarak kütüphaneleri indirebilirsiniz.</p>



<p class="wp-block-paragraph">2- <strong>FreeSerif18pt7b</strong>,<strong> FreeSerifItalic9pt7b </strong>ve <strong>FreeMono12pt7b</strong> kütüphanelerini indirdikten sonra, aşağıdaki kodlarla oluşturacağınız .ino uzantılı arduino programının yer aldığı klasör içine taşıyın ve sırasında program kodlarınızı Arduino Nano içine yükleyin.</p>



<h3 class="wp-block-heading">Kablo Şeması ve Bağlantılar</h3>



<p class="wp-block-paragraph">Bu devrede Arduino Nano, TEA5767 radyo modülü, PAM8403 ses yükseltici ve Nokia 5110 ekranı belirli pin bağlantıları üzerinden birbirine bağlanır. Kablo bağlantılarını doğru yapmak, projenin sorunsuz çalışması açısından önemlidir.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="768" height="656" src="https://blog.robo90.com/wp-content/uploads/2025/08/Kablo-Semasi-768x656-min.webp" alt="Arduino ile FM Radyo Uygulaması Devre Şeması" class="wp-image-9239" title="Arduino ile FM Radyo Uygulaması 1" srcset="https://blog.robo90.com/wp-content/uploads/2025/08/Kablo-Semasi-768x656-min.webp 768w, https://blog.robo90.com/wp-content/uploads/2025/08/Kablo-Semasi-768x656-min-300x256.webp 300w, https://blog.robo90.com/wp-content/uploads/2025/08/Kablo-Semasi-768x656-min-150x128.webp 150w, https://blog.robo90.com/wp-content/uploads/2025/08/Kablo-Semasi-768x656-min-450x384.webp 450w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<h3 class="wp-block-heading">Arduino Kodu</h3>



<p class="wp-block-paragraph">Aşağıda projenin Arduino kodlarını göreceksiniz. Bu kodlar sayesinde radyo frekansını ayarlayabilir, kanalları kaydedebilir ve LCD ekranda kanal bilgilerini görüntüleyebilirsiniz. Kodlar, frekans değişimlerini hafızaya alarak en son ayarlanan frekansa geri dönme işlevine de sahiptir.</p>



<pre class="wp-block-code"><code>#include &lt;TEA5767N.h&gt;  //https://github.com/mroger/TEA5767
#include &lt;SPI.h&gt;
#include &lt;Adafruit_GFX.h&gt;  //https://github.com/adafruit/Adafruit-GFX-Library
#include &lt;Adafruit_PCD8544.h&gt; //https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library

#include "FreeSerif18pt7b.h" //https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Fonts/FreeSerif18pt7b.h
#include "FreeSerifItalic9pt7b.h" //https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Fonts/FreeSerifItalic9pt7b.h
#include "FreeMono12pt7b.h" //https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Fonts/FreeMono12pt7b.h

#include "splash.h"
#include &lt;ClickEncoder.h&gt; //https://github.com/0xPIT/encoder
#include &lt;TimerOne.h&gt;  //https://github.com/PaulStoffregen/TimerOne
#include &lt;EEPROM.h&gt;

Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);

int SaniyeOtoKayit = 300;
float onceki_frekans = 0;
float frekans = 95.0f;

ClickEncoder *encoder;
int16_t son_deger, value;

boolean yukari = false;
boolean asagi = false;
boolean orta = false;

long saniye_degeri = 0;
long oncekiler = 0; 

bool arkaisikACIK = false;

long aralik = 1000; 
  
TEA5767N radyo = TEA5767N();

void setup() 
{
  pinMode(7, OUTPUT);
  digitalWrite(7,HIGH);
  
  initDisplay();
  
  acilissayfasigoster();
  
  radyo.setMonoReception();
  
  radyo.setStereoNoiseCancellingOn();

  RotaryEncoderVeri();
  
  Serial.begin(9600);

  frekans = readFrequencyFromEEPROM();

  if(isnan(frekans))
  {
    Serial.println("setup(): EEPROM icinde frekans degeri yoktur.");
    frekans = 88.0;
    writeFrequencyToEEPROM(&amp;frekans);
  }
    
  printText(String(frekans,1),String(frekans,1));
}

void loop() {

  unsigned long mevcutlar = millis();

  RotaryEncoderKontrol();

  if(mevcutlar - oncekiler &gt; aralik) 
  {
    if(frekans!=onceki_frekans)
    {
      onceki_frekans = frekans;
      radyo.selectFrequency(frekans);  
      saniye_degeri = 0;
    }else
    {
      saniye_degeri++;
      if(saniye_degeri == SaniyeOtoKayit)
      {
          float frekans_oku = readFrequencyFromEEPROM();
          if(frekans_oku!=frekans)
          {
            Serial.println("Dongu(): Yeni frekans EEPROM icine kaydediliyor.");
            writeFrequencyToEEPROM(&amp;frekans);
          }
      }
    }
    oncekiler = mevcutlar; 
    Serial.println("loop(): "+String(saniye_degeri));  
  }

 readRotaryEncoder();

 if(yukari)
 {
  yukari = false;
  onceki_frekans = frekans;
  frekans = frekans+0.1f;
  printText(String(frekans,1),String(onceki_frekans,1));
 }

 if(asagi)
 {
  asagi = false;
  onceki_frekans = frekans;
  frekans = frekans-0.1f;
  printText(String(frekans,1),String(onceki_frekans,1));
 }
}

void printText(String yazi, String onceki_yazi)
{
  display.clearDisplay();   // clears the screen and, WHITE buffer  

  if(onceki_yazi.length() == 4)
  {
    display.setFont(&amp;FreeSerifItalic9pt7b);
  }else
  {
    display.setFont(&amp;FreeSerifItalic9pt7b);
  }
  display.setTextColor(WHITE);
  display.setCursor(5,11);
  display.println("Gulru FM");
   display.setFont(&amp;FreeSerif18pt7b);
  display.setCursor(4,44);
  display.println(onceki_yazi);
  display.display();
  
  if(yazi.length() == 4)
  {
    
    display.setFont(&amp;FreeSerifItalic9pt7b);
  }else
  {
    display.setFont(&amp;FreeSerifItalic9pt7b);
  }
  display.setTextColor(BLACK);
  display.setCursor(5,11);
  display.println("Gulru FM");
   display.setFont(&amp;FreeSerif18pt7b);
  display.setCursor(4,44);
  display.println(yazi);
  display.display();
}

void RotaryEncoderVeri()
{
  encoder = new ClickEncoder(A1, A0, A2);
  encoder-&gt;setAccelerationEnabled(false);
   
  Timer1.initialize(1000);
  Timer1.attachInterrupt(timerIsr); 

  son_deger = encoder-&gt;getValue();  
}

void initDisplay()
{
  display.begin();
  display.setContrast(60);
  display.clearDisplay();   // clears the screen and, WHITE buffer  
  display.display();
}

 void timerIsr() 
{
  encoder-&gt;service();
}

void acilissayfasigoster()
{
  display.clearDisplay();
  //display.drawBitmap(0, 0,  SPLASH, 84, 48, 1);
  
display.setTextSize(2);
  display.setCursor(3, 0);
  display.print(" GULRU");
  display.setCursor(3, 20);
  display.print(" RADYO");
  display.display();
  delay(5000);
  display.clearDisplay();   // clears the screen and, WHITE buffer  
  
display.setTextSize(1);
}

void writeFrequencyToEEPROM(float *freq)
{
 byte ByteArray&#91;4];
 memcpy(ByteArray, freq, 4);
 for(int x = 0; x &lt; 4; x++)
 {
   EEPROM.write(x, ByteArray&#91;x]);
 }  
 Serial.println("writeFrequencyFromEEPROM(): "+String(frekans));
}

float readFrequencyFromEEPROM()
{
  float frekans = 86.0;
  byte ByteArray&#91;4];
  for(int x = 0; x &lt; 4; x++)
  {
   ByteArray&#91;x] = EEPROM.read(x);    
  }
  memcpy(&amp;frekans, ByteArray, 4);
  Serial.println("readFrequencyFromEEPROM(): "+String(frekans));
  return frekans;
}

void RotaryEncoderKontrol()
{
    ClickEncoder::Button b = encoder-&gt;getButton();
  if (b != ClickEncoder::Open) {
    if(b==ClickEncoder::Clicked)
    {
      Serial.println("Toggle BackLight");
      if(arkaisikACIK == false)
      {
        arkaisikACIK = true;
        turnOnBacklight();
      }else
      {
        arkaisikACIK = false;
        turnOffBacklight();
      }
    }
  }
}

void turnOnBacklight()
{
  digitalWrite(7,LOW);
}

void turnOffBacklight()
{
  digitalWrite(7,HIGH);
}

void readRotaryEncoder()
{
  value += encoder-&gt;getValue();
  
  if (value/2 &gt; son_deger) {
    son_deger = value/2;
    yukari = true;
    delay(50);
  }else   if (value/2 &lt; son_deger) {
    son_deger = value/2;
    asagi = true;
    delay(50);
  }
}</code></pre>



<p class="wp-block-paragraph">Bu proje ile ilgili sorularınız veya yardıma ihtiyaç duyduğunuz konular varsa yorum yaparak bana ulaşabilirsiniz. Keyifli projeler dilerim!</p>



<p class="wp-block-paragraph"></p>
<p><a rel="nofollow" href="https://blog.robo90.com/arduino-ile-fm-radyo-uygulamasi/">Arduino ile FM Radyo Uygulaması</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/arduino-ile-fm-radyo-uygulamasi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://blog.robo90.com/wp-content/uploads/2024/04/SirProgramming-FM-Radyo.mp4" length="3902251" type="video/mp4" />

			</item>
		<item>
		<title>STM32 ile I2C Oled Ekran Kullanımı</title>
		<link>https://blog.robo90.com/stm32-ile-i2c-oled-ekran-kullanimi/</link>
					<comments>https://blog.robo90.com/stm32-ile-i2c-oled-ekran-kullanimi/#comments</comments>
		
		<dc:creator><![CDATA[Yusuf Coşgun]]></dc:creator>
		<pubDate>Tue, 14 Nov 2023 08:46:19 +0000</pubDate>
				<category><![CDATA[STM Eğitim Serisi]]></category>
		<category><![CDATA[STM32 Projeleri]]></category>
		<category><![CDATA[CubeIDE]]></category>
		<category><![CDATA[ekran]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[oled]]></category>
		<category><![CDATA[STM32]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=8843</guid>

					<description><![CDATA[<p>Bu uygulamada STM32 ile I2C Oled ekran kullanımını öğrendik.</p>
<p><a rel="nofollow" href="https://blog.robo90.com/stm32-ile-i2c-oled-ekran-kullanimi/">STM32 ile I2C Oled Ekran Kullanımı</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Arkadaşlar merhaba ben Yusuf. Bu yazıda sizlerle STM32 ile I2C Oled ekranlar nasıl kullanabiliriz onu öğreneceğiz. Detayları yazımın devamını okuyarak bulabilirsiniz. Kafanıza takılan bir soruyu yorum olarak sorabilirsiniz ayrıca öneri ve eleştirilerinizi de bekliyorum. </p>





<h2 class="wp-block-heading has-black-color has-text-color">Malzemeler</h2>



<ul class="wp-block-list">
<li><a href="https://www.robo90.com/stm32f411ceu6-gelistirme-karti-100mhz-512kb?utm_source=Robo90&amp;utm_medium=blog&amp;utm_campaign=stm32oled" data-type="link" data-id="https://www.robo90.com/stm32f411ceu6-gelistirme-karti-100mhz-512kb">STM32F411</a></li>



<li><a href="https://www.robo90.com/st-link-v2-stm8-stm32-mini-programlayici-arm?utm_source=Robo90&amp;utm_medium=blog&amp;utm_campaign=stm32oled" data-type="link" data-id="https://www.robo90.com/st-link-v2-stm8-stm32-mini-programlayici-arm">STLINK</a></li>



<li><a href="https://www.robo90.com/128x64-oled-lcd-ekran-096-inch-mavi?utm_source=Robo90&amp;utm_medium=blog&amp;utm_campaign=stm32oled" data-type="link" data-id="https://www.robo90.com/128x64-oled-lcd-ekran-096-inch-mavi?utm_source=Robo90&amp;utm_medium=blog&amp;utm_campaign=stm32oled">128&#215;64 Oled Lcd Ekran 0.96 inch &#8211; Mavi</a></li>
</ul>



<h2 class="wp-block-heading has-black-color has-text-color">Adım 1: CubeIDE Üzerinde STM32 Projesi Oluşturma </h2>



<p class="wp-block-paragraph">Projemizi oluşturmadan önce STM32CubeIDE üzerinde projemizde kullanacağımız mikrodenetleyiciyi seçmemiz gerekiyor. Ben elimde bulunduğu için F411CEU6 modelini seçeceğim. Siz elinizdeki modeli seçerek ilerleyeceksiniz.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="767" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-1024x767.png" alt="STM32CubeIDE mikrodenetleyici seçim ekranı" class="wp-image-8877" title="STM32 ile I2C Oled Ekran Kullanımı 2" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-1024x767.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/11/image-300x225.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-768x575.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-150x112.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-450x337.png 450w, https://blog.robo90.com/wp-content/uploads/2023/11/image-1200x899.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/11/image.png 1368w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Mikrodenetleyicimizi seçip Next dedikten sonra projemize isim vererek devam ediyoruz. Burada gelen ekranda mikrodenetleyicimizin birimlerini düzenleyeceğiz.</p>



<p class="wp-block-paragraph">İlk olarak sol tarafta bulunan menüden System Core kategorisi altında bulunan SYS menüsüne geliyoruz ve Debug&#8217;ı fotoğraftaki gibi Serial Wire yapıyoruz.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="827" height="379" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-1.png" alt="STM32CubeIDE System Core altından Debug seçimini Serial Wire yapıyoruz" class="wp-image-8878" title="STM32 ile I2C Oled Ekran Kullanımı 3" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-1.png 827w, https://blog.robo90.com/wp-content/uploads/2023/11/image-1-300x137.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-1-768x352.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-1-150x69.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-1-450x206.png 450w" sizes="(max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">Daha sonra RCC menüsüne giriyoruz ve fotoğraftaki gibi High Speed Clock (HSE) seçeneğini Crystal/Ceramic Resonator seçiyoruz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="824" height="378" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-2.png" alt="STM32CubeIDE RCC mode seçimi" class="wp-image-8879" title="STM32 ile I2C Oled Ekran Kullanımı 4" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-2.png 824w, https://blog.robo90.com/wp-content/uploads/2023/11/image-2-300x138.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-2-768x352.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-2-150x69.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-2-450x206.png 450w" sizes="(max-width: 824px) 100vw, 824px" /></figure>



<p class="wp-block-paragraph">Daha sonra Connectivity menüsü altında bulunan I2C birimlerinden birini seçiyoruz. Ben I2C1&#8217;i seçerek devam ediyorum. Bu menü altında I2C&#8217;yi fotoğraftaki gibi I2C seçip aşağıda açılan Configuration sekmesinde fotoğraftaki gibi I2C Speed Modunu Fast Mode&#8217;a ayarlıyoruz. Bu ayarlamadan sonra bu sekmedeki işimizi bitiriyoruz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="905" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-3.png" alt="STM32CubeIDE I2C seçimi" class="wp-image-8880" title="STM32 ile I2C Oled Ekran Kullanımı 5" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-3.png 802w, https://blog.robo90.com/wp-content/uploads/2023/11/image-3-266x300.png 266w, https://blog.robo90.com/wp-content/uploads/2023/11/image-3-768x867.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-3-150x169.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-3-450x508.png 450w" sizes="(max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Bu işlemleri yaptıktan sonra ekranda bulunan mikrodenetleyicimizin ön izlemesinde bazı pinlerin yeşil olduğunu göreceksiniz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="705" height="591" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-4.png" alt="STM32CubeIDE STM32F411CEUx UFQFPN48 mikrodenetleyici pin ön izlemesi" class="wp-image-8881" title="STM32 ile I2C Oled Ekran Kullanımı 6" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-4.png 705w, https://blog.robo90.com/wp-content/uploads/2023/11/image-4-300x251.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-4-150x126.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-4-450x377.png 450w" sizes="(max-width: 705px) 100vw, 705px" /></figure>



<p class="wp-block-paragraph">Şimdi sırada mikrodenetleyicimizin çalışacağı frekansı ayarlamakta bunun için üst tarafta bulunan sekmelerden Clock Configuration sekmesine geliyoruz burada fotoğraftaki ayarları uygulayıp ALT+K tuşlarına basarak kodumuzu oluşturuyoruz.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="487" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-5-1024x487.png" alt="STM32CubeIDE Clock Configuration üzerinden frekans ayarı" class="wp-image-8882" title="STM32 ile I2C Oled Ekran Kullanımı 7" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-5-1024x487.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/11/image-5-300x143.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-5-768x365.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-5-150x71.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-5-450x214.png 450w, https://blog.robo90.com/wp-content/uploads/2023/11/image-5.png 1191w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Şimdi yapmamız gereken kütüphane dosyalarımızı indirip projede ilgili klasörlerine atmak. Ben kullanım kolaylığı ve işlevsel fonksiyonlarından dolayı Controllers Tech&#8217;in hazırladığı kütüphaneyi tercih ediyorum. Inc klasörü içine <strong>fonts.h </strong>ve<strong> ssd1306.h </strong>dosyalarını atıyoruz. Src klasörü içine ise <strong>fonts.c</strong> ve <strong>ssd1306.c</strong> dosyalarını kopyalıyoruz.</p>



<h2 class="wp-block-heading has-black-color has-text-color">Adım 2: CubeIDE Üzerinde Kodları Yazma</h2>



<p class="wp-block-paragraph">Projemizi başarı ile oluşturup kütüphane dosyalarını ekledikten sonra main.c içerisinde ilk önce kütüphanemizi import ediyoruz bunun için aşağıdaki kodu kullanıyoruz.</p>



<pre class="wp-block-code"><code>/* USER CODE BEGIN Includes */
#include "ssd1306.h"
#include "fonts.h"
/* USER CODE END Includes */</code></pre>



<p class="wp-block-paragraph">Yazdığımız kodları ve projemize eklediğimiz kütüphaneleri USER CODE yorum satırları arasına yazmamız çok önemli. Çünkü CubeIDE her mikrodenetleyici ayarı yaptığımızda kodu sıfırdan oluşturuyor. Bu işlem sırasında kodlarımızın silinmemesi için kodlarımızı USER CODE yorum satırları arasına alarak silinmelerin önüne geçiyoruz. Kütüphanemizi import ettikten sonra main loopumuzda ssd1306 oled ekranımızı başlatmalıyız bunun için aşağıdaki kodu kullanıyoruz.</p>



<pre class="wp-block-code"><code>/* USER CODE BEGIN 2 */
SSD1306_Init();
/* USER CODE END 2 */</code></pre>



<p class="wp-block-paragraph">Şu andan itibaren oled ekranımız kullanıma hazır hale geliyor. Şimdi ilk örnek olarak oled ekranımızda belirli konumlarda yazı yazdıralım. Yine USER CODE yorum satırları arasında aşağıdaki kodu kullanabiliriz.</p>



<pre class="wp-block-code"><code>SSD1306_GotoXY (0,0); 
SSD1306_Puts ("Merhaba", &amp;Font_11x18, 1); 
SSD1306_GotoXY (10, 30); 
SSD1306_Puts ("ROBO90 !!", &amp;Font_11x18, 1); 
SSD1306_UpdateScreen(); </code></pre>



<p class="wp-block-paragraph">Burada SSD1306_GotoXY fonksiyonu ekran imlecimizin gideceği x ve y koordinatlarını ayarlıyor. SSD1306_Puts fonksiyonu ise imlecin bulunduğu konuma bir string verisi yazdırıyor. Buradaki en önemli kod olan SSD1306_UpdateScreen();  ise oled ekranımızı güncelliyor ve ona yazdırdığımız şeylerin gözükmesini sağlıyor.</p>



<h2 class="wp-block-heading has-black-color has-text-color">Adım 3: Devre Şeması, Bağlantı ve İlk Test</h2>



<h3 class="wp-block-heading">STM32 OLED LCD Devre Şeması ve Bağlantı</h3>



<p class="wp-block-paragraph">Oled ekranımızın çalışması için güç ve veri hatlarını mikrodenetleyicimize bağlamalıyız. I2C pinlerimiz B6 ve B7&#8217;de olduğu için karşılığı oldukları sinyalleri bağlıyoruz. Uygun devre şemasını fotoğrafta görebilirsiniz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="987" height="756" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-6.png" alt="stm32 ile oled kullanımı devre şeması" class="wp-image-8886" title="STM32 ile I2C Oled Ekran Kullanımı 8" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-6.png 987w, https://blog.robo90.com/wp-content/uploads/2023/11/image-6-300x230.png 300w, https://blog.robo90.com/wp-content/uploads/2023/11/image-6-768x588.png 768w, https://blog.robo90.com/wp-content/uploads/2023/11/image-6-150x115.png 150w, https://blog.robo90.com/wp-content/uploads/2023/11/image-6-450x345.png 450w" sizes="(max-width: 987px) 100vw, 987px" /></figure>



<h3 class="wp-block-heading">İlk Test</h3>



<p class="wp-block-paragraph">Oled ekranımızı ve STM32&#8217;mizi birbirine bağladıktan sonra sıra STLink üzerinden kodumuzu atmaya geliyor. Bunun için önce kodumuzu derleyip (Fotoğrafta en soldaki üzerinde 010 yazan kağıt ikonlu tuş ) daha sonra debug modunda kodumuzu çalıştırıyoruz. (Fotoğrafın en sağındaki örümcek ikonu)</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="284" height="51" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-7.png" alt="stm32 stlink kod derleme" class="wp-image-8887" title="STM32 ile I2C Oled Ekran Kullanımı 9" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-7.png 284w, https://blog.robo90.com/wp-content/uploads/2023/11/image-7-150x27.png 150w" sizes="(max-width: 284px) 100vw, 284px" /></figure>



<p class="wp-block-paragraph">Bunları yaptıktan sonra alt fotoğrafta gözüken kısım ile karşılaşacağız fotoğrafın en soldan ikinci ikonuna tıklayıp kodumuzun mikrodenetleyici içerisinde çalışmasını başlatıyoruz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="244" height="69" src="https://blog.robo90.com/wp-content/uploads/2023/11/image-8.png" alt="stlink ile kodu mikrodenetliyiciye atmak" class="wp-image-8888" title="STM32 ile I2C Oled Ekran Kullanımı 10" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/image-8.png 244w, https://blog.robo90.com/wp-content/uploads/2023/11/image-8-150x42.png 150w" sizes="(max-width: 244px) 100vw, 244px" /></figure>



<p class="wp-block-paragraph">Bunları yaptıktan sonra OLED ekranımızda aşağıdaki gibi bir görüntü olması gerekiyor. Eğer bu sonucu elde edebildiyseniz STM32 ile başarılı bir şekilde OLED ekranını kullanabildiniz demektir. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="845" height="475" src="https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test.jpg" alt="stm32 ile oled kullanımı projesi çalışır hali" class="wp-image-8900" title="STM32 ile I2C Oled Ekran Kullanımı 11" srcset="https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test.jpg 845w, https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test-300x169.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test-768x432.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test-150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/11/stm32-i2c-oled-lcd-ekran-kullanimi-ilk-test-450x253.jpg 450w" sizes="(max-width: 845px) 100vw, 845px" /></figure>



<p class="has-text-align-center wp-block-paragraph"><a href="https://blog.robo90.com/kategori/stm32-projeleri/">Diğer STM32 Projeleri Yazılarımızı İnceleyin</a></p>



<h2 class="wp-block-heading has-black-color has-text-color">Kullanışlı Linkler</h2>



<p class="wp-block-paragraph">STM32 ile Debug İşlemi: <a href="https://lezzetlirobottarifleri.com/stm32-ile-debug-islemi/" target="_blank" rel="noopener">STM32 ile Debug İşlemi</a><br>Instagram:&nbsp;<a href="https://www.instagram.com/yusuf_cosgun04/" target="_blank" rel="noreferrer noopener nofollow">https://www.instagram.com/yusuf_cosgun04/</a><br>Discord sunucusu:&nbsp;<a href="https://discord.gg/8MVnu59tkx" target="_blank" rel="noreferrer noopener nofollow"></a><a href="https://discord.gg/8MVnu59tkx" target="_blank" rel="noreferrer noopener nofollow">https://discord.gg/8MVnu59tkx</a><br>Discord: reevee0</p>
<p><a rel="nofollow" href="https://blog.robo90.com/stm32-ile-i2c-oled-ekran-kullanimi/">STM32 ile I2C Oled Ekran Kullanımı</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/stm32-ile-i2c-oled-ekran-kullanimi/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino ile EGGBOT Yapımı</title>
		<link>https://blog.robo90.com/arduino-ile-eggbot-yapimi/</link>
					<comments>https://blog.robo90.com/arduino-ile-eggbot-yapimi/#respond</comments>
		
		<dc:creator><![CDATA[Baki Ateş]]></dc:creator>
		<pubDate>Tue, 22 Aug 2023 11:36:38 +0000</pubDate>
				<category><![CDATA[Arduino Projeleri]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[eggbot]]></category>
		<category><![CDATA[yumurta]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=8440</guid>

					<description><![CDATA[<p>Herkese merhaba&#8230; Bu yazıda sizlerle beraber eggbot yapımını göreceğiz. Eggbot yapımında çok zorluk yaşadığım için sizlere kolaylıklar sağlamak için böyle bir yazı yazmaya karar verdim. Projemizin yapımında göreceğimiz, öğreneceğimiz bir yeni uygulamamızda Inkscape&#8217;dir. yumurtanın üzerinde harika bir görsel şölen oluşturacağınız, arkadaşlarınıza ve ailenize verebileceğiniz harika bir hediye olabilir. Haydi projemize başlayalım. Kullanılan Malzemeler Arduino ile [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/arduino-ile-eggbot-yapimi/">Arduino ile EGGBOT Yapımı</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Herkese merhaba&#8230; Bu yazıda sizlerle beraber eggbot yapımını göreceğiz. Eggbot yapımında çok zorluk yaşadığım için sizlere kolaylıklar sağlamak için böyle bir yazı yazmaya karar verdim. Projemizin yapımında göreceğimiz, öğreneceğimiz bir yeni uygulamamızda Inkscape&#8217;dir. yumurtanın üzerinde harika bir görsel şölen oluşturacağınız, arkadaşlarınıza ve ailenize verebileceğiniz harika bir hediye olabilir. Haydi projemize başlayalım.</p>



<h2 class="wp-block-heading">Kullanılan Malzemeler</h2>



<ol class="wp-block-list">
<li><a href="https://www.robo90.com/28-byj-48-step-motor-ve-uln2003-step-motor-surucu-seti">2 Adet Step Motor Ve ULN2003 Step Motor Sürücü Seti</a></li>



<li><a href="https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli">Arduino UNO</a></li>



<li><a href="https://www.robo90.com/tower-pro-sg90-mini-servo-motor-9g">SG90 Mini Servo Motor</a></li>



<li><a href="https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyumlu">Dişi-Erkek Jumper Kablo</a></li>



<li><a href="https://www.robo90.com/40li-ayrilabilen-erkek-erkek-jumper-kablo-20cm-arduino-uyumlu">Erkek-Erkek Jumper Kablo</a></li>



<li><a href="https://www.robo90.com/mini-breadboard-170-pin-mavi">Mini Breadboard</a></li>



<li><a href="https://www.robo90.com/628-zz-minyatur-rulman">Minyatür Rulman</a></li>
</ol>



<h2 class="wp-block-heading">Arduino ile EggBot Projesi Nasıl Çalışır?</h2>



<p class="wp-block-paragraph">Projemizin temel amacı pinpon topuna ya da yumurta üzerine çizim yapmaktır. 2 Step motordan bir tanesi yumurtayı kendi etrafında döndürürken 2. step motorumuz servo motorun ve kalemin monteli olduğu kolu sağa ve sola olmak üzere iki yönlü hareket ettirmektedir. 2. step motorumuzun hareket ettirdiği kola montajlı olan servo motorumuz ise kalemin takıldığı kolu yukarı aşağı hareket ettirerek çizeceğimiz görselde çizgiler arası atlamaya yarar. Şimdi ise Inkscape uygulamamızdaki aşamalara geçelim. Uygulamamıza gerekli kütüphaneleri ekledikten sonra uygulamamıza giriş yapıyoruz. Sol üst kısımdan Dosya> template > eggbot adımlarını izliyoruz ve çıkan yeni sekmede istediğimiz görseli çiziyoruz. Üst satırda Etkinlikler > eggbot > eggbot control adımlarını izleyerek çıkan ekranda plot sekmesinde uygula diyerek çiziminizi yapabiliyorsunuz. Aşağıdaki görselde anlattığımız şekilde step ve servo motorlarını görebilirsiniz.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" data-id="8484" src="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-1024x577.jpg" alt="Arduino ile EGGBOT Yapımı - Robo90 - Blog 1" class="wp-image-8484" title="Arduino ile EGGBOT Yapımı 12" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-1024x577.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-300x169.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-768x433.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-450x253.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1-1200x676.jpg 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot1.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" data-id="8485" src="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-1024x577.jpg" alt="Arduino ile EGGBOT Yapımı - Robo90 - Blog 2" class="wp-image-8485" title="Arduino ile EGGBOT Yapımı 13" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-1024x577.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-300x169.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-768x433.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-450x253.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2-1200x676.jpg 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot2.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" data-id="8486" src="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-1024x577.jpg" alt="Arduino ile EGGBOT Yapımı - Robo90 - Blog 3" class="wp-image-8486" title="Arduino ile EGGBOT Yapımı 14" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-1024x577.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-300x169.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-768x433.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-450x253.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3-1200x676.jpg 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbot3.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-1024x577.jpg" alt="Arduino ile EGGBOT Yapımı - Robo90 - Blog 4" class="wp-image-8515" style="width:753px;height:424px" width="753" height="424" title="Arduino ile EGGBOT Yapımı 15" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-1024x577.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-300x169.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-768x433.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-450x253.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel-1200x676.jpg 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/eggbotgorsel.jpg 1280w" sizes="(max-width: 753px) 100vw, 753px" /></figure>



<h2 class="wp-block-heading">Arduino Kodu</h2>



<pre class="wp-block-code"><code>
#include "AccelStepper.h" // nice lib from http://www.airspayce.com/mikem/arduino/AccelStepper/
#include "VarSpeedServo.h" // variable speed servo lib https://github.com/netlabtoolkit/VarSpeedServo
#include "SerialCommand.h" //nice lib from Stefan Rado, https://github.com/kroimon/Arduino-SerialCommand
#include &lt;avr/eeprom.h&gt;
#include "button.h"


#define initSting "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.x"

#define BOARD_ULN2003
//#define BOARD_ZAGGO
//#define BOARD_CNCSHIELD

#ifdef BOARD_ULN2003
	// Mini Spherebot using 28BYJ-48 Steppers with ULN2003 Drivers
	// http://www.thingiverse.com/thing:1461709
	#define rotMicrostep 16
	#define penMicrostep 16
	#define servoPin 13
	#define engraverPin 12
  #define en1_1 4
#define en2_1 5
#define en3_1 6
#define en4_1 7

#define en1_2 8
#define en2_2 9
#define en3_2 10
#define en4_2 11
	// These values work for my 28BYJ-48's, Your's might 
	// be different and may need adjustment.
	
	#define rotStepsPerRev 4096
	#define penStepsUseable 1100
	
	//Buttons (uncomment to enable)
	//#define prgButton 2 // PRG button
	//#define penToggleButton 12 // pen up/down button
	//#define motorsButton 4 // motors enable button
#endif


#define penUpPosEEAddress ((uint16_t *)0)
#define penDownPosEEAddress ((uint16_t *)2)
#define penUpRateEEAddress ((uint16_t *)4)
#define penDownRateEEAddress ((uint16_t *)6)

void setprgButtonState();
void doTogglePen();
void toggleMotors();
void makeComInterface();
void initHardware();
void moveOneStep();

//make Objects
#ifdef BOARD_ULN2003
AccelStepper rotMotor(AccelStepper::HALF4WIRE, en1_1,en3_1,en2_1,en4_1);
AccelStepper penMotor(AccelStepper::HALF4WIRE, en1_2,en3_2,en2_2,en4_2);
//AccelStepper penMotor(AccelStepper::HALF4WIRE, 2,4,3,5, true);
//AccelStepper rotMotor(AccelStepper::HALF4WIRE, 8,10,9,11, true);
#else
AccelStepper rotMotor(1, step1, dir1);
AccelStepper penMotor(1, step2, dir2);
#endif

VarSpeedServo penServo;
SerialCommand SCmd;
//create Buttons
#ifdef prgButton
	Button prgButtonToggle(prgButton, setprgButtonState);
#endif
#ifdef penToggleButton
	Button penToggle(penToggleButton, doTogglePen);
#endif
#ifdef motorsButton
	Button motorsToggle(motorsButton, toggleMotors);
#endif
// Variables... be careful, by messing around here, everything has a reason and crossrelations...
int penMin=0;
int penMax=0;
int penUpPos=5;  //can be overwritten from EBB-Command SC
int penDownPos=20; //can be overwritten from EBB-Command SC
int servoRateUp=0;
int servoRateDown=0;
long rotStepError=0;
long penStepError=0;
int penState=penUpPos;
uint32_t nodeCount=0;
unsigned int layer=0;
boolean prgButtonState=0;
uint8_t rotStepCorrection = 16/rotMicrostep ; //devide EBB-Coordinates by this factor to get EGGduino-Steps
uint8_t penStepCorrection = 16/penMicrostep ; //devide EBB-Coordinates by this factor to get EGGduino-Steps
float rotSpeed=0;
float penSpeed=0; // these are local variables for Function SteppermotorMove-Command, but for performance-reasons it will be initialized here
boolean motorsEnabled = 0;
//float rotScale = (float)rotStepsPerRev / 3200.0;
//float penScale = (float)penStepsUseable / 800.0;

void setup() {   
	Serial.begin(9600);
	makeComInterface();
	initHardware();
}

void loop() {
	moveOneStep();

	SCmd.readSerial();

#ifdef penToggleButton
	penToggle.check();
#endif

#ifdef motorsButton
	motorsToggle.check();
#endif

#ifdef prgButton
	prgButtonToggle.check();
#endif
}
</code></pre>



<p class="wp-block-paragraph">Kodumuzu yazdıktan sonra kütüphanelerimizin çalıştığını kontrol edelim. Benim projeyi yaparken karşılaştığım sıkıntılardan biriside kütüphanelerin güncelleme almasından dolayı çalışmamasıydı. Eğer kütüphanelerde bir sıkıntı yaşarsanız güncel sürümlerini yükleyerek tekrar denemenizi tavsiye ederim. </p>



<p class="wp-block-paragraph">Kütüphanelerinde çalıştığına eminsek eğer ki şimdi sırada devremizi kurmada. Kullanacağımız malzemeleri ilk önce çalışıyor mu diye kontrol ediyoruz. Malzemelerimiz de çalıştığına göre şimdi devremizi kurmaya hazırız.</p>



<h2 class="wp-block-heading">Devre Şeması</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="685" src="https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-1024x685.jpg" alt="Arduino ile EGGBOT Yapımı - Robo90 - Blog 5" class="wp-image-8513" title="Arduino ile EGGBOT Yapımı 16" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-1024x685.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-300x201.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-768x514.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-1536x1027.jpg 1536w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-2048x1370.jpg 2048w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-150x100.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-450x301.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/Eggbot-1-1200x803.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Evet devremizi kurduğumuza göre şimdi sırada 3D çizimlerimizi baskıya vermekte ben kullanmış olduğum baskıları aşağıya link şeklinde bırakıyorum dilerseniz oradan dilerseniz de kendiniz bir çizim yaparak stand yapabilirsiniz.</p>



<p class="wp-block-paragraph"><a href="https://www.thingiverse.com/thing:1461709" rel="nofollow noopener" target="_blank">Eggbot 3D Thingiverse</a></p>



<p class="wp-block-paragraph">3D Printer&#8217;ımızdan parçaları da aldıysak artık dilediğimizi resmedebiliriz.</p>
<p><a rel="nofollow" href="https://blog.robo90.com/arduino-ile-eggbot-yapimi/">Arduino ile EGGBOT Yapımı</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/arduino-ile-eggbot-yapimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi Pico ile LED Yakma &#8211; Bölüm 2</title>
		<link>https://blog.robo90.com/raspberry-pi-pico-ile-led-yakma-bolum-2/</link>
					<comments>https://blog.robo90.com/raspberry-pi-pico-ile-led-yakma-bolum-2/#respond</comments>
		
		<dc:creator><![CDATA[Ahmet Miraç Çıtak]]></dc:creator>
		<pubDate>Thu, 17 Aug 2023 13:17:01 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Raspberry Pi Eğitim Serisi]]></category>
		<category><![CDATA[Raspberry Pi Projeleri]]></category>
		<category><![CDATA[Raspberry Pi Pico]]></category>
		<category><![CDATA[Raspberry Pi Pico Eğitim Serisi]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=8258</guid>

					<description><![CDATA[<p>Raspberry Pi Pico ile Thonny Kullanarak Düğmeyle LED Kontrolü: Detaylı Adım Adım Rehber Merhaba Robo90 Blog Okuyucuları! Bu proje rehberinde, Thonny programını kullanarak Raspberry Pi Pico ile LED yakma projesini ayrıntılı olarak anlatacağım. Eğer programlama veya elektronik konusunda yeniyseniz, endişelenmeyin! Adım adım rehberimiz sayesinde projeyi kolayca takip edebilirsiniz. Raspberry Pi Pico, mikrodenetleyicileri öğrenmek ve denemek [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/raspberry-pi-pico-ile-led-yakma-bolum-2/">Raspberry Pi Pico ile LED Yakma &#8211; Bölüm 2</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Raspberry Pi Pico ile Thonny Kullanarak Düğmeyle LED Kontrolü: Detaylı Adım Adım Rehber</strong></p>



<p class="wp-block-paragraph">Merhaba Robo90 Blog Okuyucuları! Bu proje rehberinde, Thonny programını kullanarak Raspberry Pi Pico ile LED yakma projesini ayrıntılı olarak anlatacağım. Eğer programlama veya elektronik konusunda yeniyseniz, endişelenmeyin! Adım adım rehberimiz sayesinde projeyi kolayca takip edebilirsiniz. Raspberry Pi Pico, mikrodenetleyicileri öğrenmek ve denemek isteyenler için harika bir platformdur. Bu projede, bir düğme kullanarak LED&#8217;i nasıl kontrol edeceğinizi öğreneceksiniz.</p>



<h2 class="wp-block-heading">Malzemeler</h2>



<ul class="wp-block-list">
<li><a href="https://www.robo90.com/raspberry-pi-pico-orijinal" data-type="link" data-id="https://www.robo90.com/raspberry-pi-pico-orijinal">Raspberry Pi Pico</a></li>



<li><a href="https://www.robo90.com/elektronik-breadboard-buyuk-boy-830-pin" data-type="link" data-id="https://www.robo90.com/elektronik-breadboard-buyuk-boy-830-pin">Breadboard</a></li>



<li><a href="https://www.robo90.com/yesil-led-5mm-10-adet">LED (Tercih ettiğiniz bir renk)</a></li>



<li><a href="https://www.robo90.com/220r-direnc-paketi-1-4-w-10-adet" data-type="link" data-id="https://www.robo90.com/220r-direnc-paketi-1-4-w-10-adet">220Ω direnç</a></li>



<li><a href="https://www.robo90.com/6x6x4mm-push-tact-buton-4-pin" data-type="link" data-id="https://www.robo90.com/6x6x4mm-push-tact-buton-4-pin">Buton</a></li>



<li><a href="https://www.robo90.com/140-parca-breadboard-jumper-kablo-kiti-kutulu" data-type="link" data-id="https://www.robo90.com/140-parca-breadboard-jumper-kablo-kiti-kutulu">Erkek-Dişi Jumper Kablolar</a></li>



<li>USB-C kablosu (Pico&#8217;yu Bağlamak için)</li>
</ul>



<h2 class="wp-block-heading">Adım 1: Thonny ve Malzeme Hazırlığı</h2>



<p class="wp-block-paragraph">Önce Thonny programını açmalıyız. Nasıl indirileceğini bilmiyorsanız <a href="https://blog.robo90.com/raspberry-pi-pico-egitim-serisi-bolum-1/" data-type="link" data-id="https://blog.robo90.com/raspberry-pi-pico-egitim-serisi-bolum-1/">Raspberry Pi Pico Eğitim Serisinin 1. Bölümü&#8217;nde </a>buna değinmiştim.</p>



<h2 class="wp-block-heading">Adım 2: Devre Tasarımı</h2>



<ol class="wp-block-list" type="1" start="1">
<li><strong>Raspberry Pi Pico&#8217;yu breadboard üzerine doğru pinleri takarak yerleştirin.</strong></li>



<li><strong>LED&#8217;i breadboard&#8217;a bağlayın; uzun bacak (+) anot, kısa bacak (-) katot anlamına gelir.</strong></li>



<li><strong>LED&#8217;in katod bacağına 220Ω direnci bağlayın.</strong></li>



<li><strong>LED&#8217;in anodu, Raspberry Pi Pico&#8217;nun GPIO 9 (Pin 9) piniyle bağlayın.</strong></li>



<li><strong>Düğmeyi breadboard&#8217;a yerleştirin.</strong></li>



<li><strong>Düğmenin bir bacağını Raspberry Pi Pico&#8217;nun GPIO 14 (Pin 14) piniyle bağlayın.</strong><br></li>
</ol>


<div class="wp-block-image">
<figure class="alignright size-large"><img loading="lazy" decoding="async" width="1024" height="372" src="https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-1024x372.png" alt="Raspberry Pi Pico ile LED Yakma - Thonny Kullanarak Düğmeyle LED Kontrolü devre şeması" class="wp-image-8379" title="Raspberry Pi Pico ile LED Yakma - Bölüm 2 17" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-1024x372.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-300x109.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-768x279.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-150x54.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-450x163.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi-1200x436.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/Pico-Devre-Semasi.png 1390w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Devre Şeması</figcaption></figure>
</div>


<h2 class="wp-block-heading">Adım 3: Thonny ile Kodlama</h2>



<ol class="wp-block-list" type="1" start="1">
<li><strong>Thonny programını açın ve yeni bir dosya oluşturun.</strong></li>



<li><strong>Aşağıdaki kodu kopyalayın ve yeni dosyaya yapıştırın:</strong></li>
</ol>



<pre class="wp-block-code"><code>import machine
import utime

led = machine.Pin(9, machine.Pin.OUT)
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

while True:
    if button.value() == 1:
        led.toggle()
        while button.value() == 1:
            pass  # Düğme serbest bırakılana kadar bekle
    utime.sleep(0.01)</code></pre>



<p class="wp-block-paragraph">  3. <strong>Kodunuzu kaydedin ve adını verin, örneğin &#8220;ButonileLedkontrolu.py&#8221;.</strong></p>



<h2 class="wp-block-heading"><strong>Adım 4: Kodu </strong>Pico&#8217;ya <strong>Yükleme</strong></h2>



<ol class="wp-block-list" type="1" start="1">
<li><strong>Raspberry Pi Pico&#8217;yu bilgisayarınıza bağlayın.</strong></li>



<li><strong>Thonny programını açın, kodunuzu yüklemek istediğiniz dosyayı açın.</strong></li>



<li><strong>Üst menüden &#8220;<strong>Çalıştır</strong>&#8221; (Run) düğmesine tıklayarak kodunuzu Raspberry Pi Pico&#8217;ya yükleyin.</strong></li>
</ol>



<h2 class="wp-block-heading">Sonuç: Raspberry Pi Pico ile LED Yakma Örneği</h2>



<p class="wp-block-paragraph">Projeyi tamamladınız! Artık düğmeye basarak LED&#8217;inizi kontrol edebilirsiniz. Bu rehber sayesinde, mikrodenetleyicilerin temel prensiplerini anlayarak kendi projelerinizi oluşturmanızı umuyorum. </p>



<figure class="wp-block-video"><video height="404" style="aspect-ratio: 720 / 404;" width="720" autoplay loop muted src="https://blog.robo90.com/wp-content/uploads/2023/08/raspberry-pi-pico-bolum-2-led-yakma.mp4"></video><figcaption class="wp-element-caption">Raspberry Pi Pico Led Yakma örneği</figcaption></figure>



<h2 class="wp-block-heading">Son Söz</h2>



<p class="wp-block-paragraph">Bu yazıda Thonny kullanarak Raspberry Pi Pico ile LED Yakma / LED kontrolünü en ayrıntılı şekilde adım adım öğrenmek için detaylı bir rehber sunduk. Projeyi tamamladığınızda temel kodlama ve devre tasarımı becerilerinizin yanı sıra yaratıcılığınızı daha karmaşık projelerde de kullanabileceksiniz. Başarılar ve keyifli deneyimler dilerim!</p>



<div class="wp-block-buttons is-vertical is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-9e854a8b wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://blog.robo90.com/raspberry-pi-pico-ile-potansiyometre-okuma-bolum-3/">Raspberry Pi Pico ile Potansiyometre Okuma – Bölüm 3</a></div>



<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://blog.robo90.com/kategori/egitim-serileri/raspberry-pi-egitim-serisi/"><strong>RASPBERRY Pİ EĞİTİM SERİSİ</strong>&nbsp;KATEGORİSİNDEKİ YAZILAR</a></div>



<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://blog.robo90.com/kategori/egitim-serileri/">DİĞER EĞİTİM SERİLERİMİZ</a></div>
</div>
<p><a rel="nofollow" href="https://blog.robo90.com/raspberry-pi-pico-ile-led-yakma-bolum-2/">Raspberry Pi Pico ile LED Yakma &#8211; Bölüm 2</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/raspberry-pi-pico-ile-led-yakma-bolum-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://blog.robo90.com/wp-content/uploads/2023/08/raspberry-pi-pico-bolum-2-led-yakma.mp4" length="827090" type="video/mp4" />

			</item>
		<item>
		<title>Servo Motor ve LDR ile Güneş Takip Sistemi</title>
		<link>https://blog.robo90.com/servo-motor-ve-ldr-ile-gunes-takip-sistemi/</link>
					<comments>https://blog.robo90.com/servo-motor-ve-ldr-ile-gunes-takip-sistemi/#respond</comments>
		
		<dc:creator><![CDATA[Sevginur Yeşilyaprak]]></dc:creator>
		<pubDate>Thu, 17 Aug 2023 10:19:11 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Arduino Projeleri]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Latest Posts]]></category>
		<category><![CDATA[ldr]]></category>
		<category><![CDATA[servo motor]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7397</guid>

					<description><![CDATA[<p>Merhaba arkadaşlar ben stajyer Bilgisayar Mühendisi Sevginur. Bu yazımda sizle adım adım projemizi gerçekleştireceğiz. Umarım hiçbir bilginiz dahi yoksa da öğrenerek ve eğlenerek proje sürecini beraber yönetebiliriz. Eğer aklınız da soru işareti kalırsa yorumlardan veya paylaştığım hesaplarımdan bana ulaşabilirsiniz. Haydi başlayalım. Projenin Amacı Bu projede amacımız güneş pilini iki Servo motor ve Pan-Tilt kullanarak güneş [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/servo-motor-ve-ldr-ile-gunes-takip-sistemi/">Servo Motor ve LDR ile Güneş Takip Sistemi</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Merhaba arkadaşlar ben stajyer Bilgisayar Mühendisi Sevginur. Bu yazımda sizle adım adım projemizi gerçekleştireceğiz. Umarım hiçbir bilginiz dahi yoksa da öğrenerek ve eğlenerek proje sürecini beraber yönetebiliriz. Eğer aklınız da soru işareti kalırsa yorumlardan veya paylaştığım hesaplarımdan bana ulaşabilirsiniz. Haydi başlayalım.</p>



<h2 class="wp-block-heading">Projenin Amacı</h2>



<p class="wp-block-paragraph">Bu projede amacımız güneş pilini iki Servo motor ve Pan-Tilt kullanarak  güneş ışınlarının geldiği yöne döndürmek ve bu sayede  sabit olan güneş piline kıyasla daha fazla ışına maruz kalmasını sağlayarak verimi artırmaktır.</p>



<h2 class="wp-block-heading">Malzemeler</h2>



<ul class="wp-block-list">
<li><a href="https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli">Arduino UNO R3 &#8211; SMD Klon (CH340 Çipli) &#8211; USB Kablo Hediyeli</a></li>



<li>4 adet <a href="https://www.robo90.com/ldr-5mm-isiga-duyarli-direnc" data-type="link" data-id="https://www.robo90.com/ldr-5mm-isiga-duyarli-direnc">LDR &#8211; 5mm &#8211; Işığa Duyarlı Direnç</a></li>



<li>2 adet <a href="http://-https://www.robo90.com/tower-pro-sg90-mini-servo-motor-9g" data-type="link" data-id="http://-https://www.robo90.com/tower-pro-sg90-mini-servo-motor-9g">Tower Pro SG90 Mini Servo Motor</a></li>



<li><a href="https://www.robo90.com/pan-tilt-seti-2-eksen-servo-tutucu" data-type="link" data-id="https://www.robo90.com/pan-tilt-seti-2-eksen-servo-tutucu">Pan-Tilt Seti &#8211; 2 Eksen Servo Tutucu</a></li>



<li>4 adet <a href="https://www.robo90.com/10k-direnc-paketi-1-4-w-10-adet" data-type="link" data-id="https://www.robo90.com/10k-direnc-paketi-1-4-w-10-adet">10K Direnç</a> </li>



<li><a href="https://www.robo90.com/elektronik-breadboard-buyuk-boy-830-pin" data-type="link" data-id="https://www.robo90.com/elektronik-breadboard-buyuk-boy-830-pin">Elektronik Breadboard</a></li>



<li><a href="https://www.robo90.com/40li-ayrilabilen-erkek-erkek-jumper-kablo-20cm-arduino-uyumlu" data-type="link" data-id="https://www.robo90.com/40li-ayrilabilen-erkek-erkek-jumper-kablo-20cm-arduino-uyumlu">Erkek/Erkek Jumper Kablo</a></li>
</ul>



<h3 class="wp-block-heading">Kendi Eklentilerim</h3>



<p class="wp-block-paragraph">Güneş pilini ve LDR sensörleri sabitlemek için benimde kullandığım 3D yazıcıdan çıktı alabileceğiniz modellerimi de kullanabilirsiniz.</p>



<p class="wp-block-paragraph"><a href="https://www.tinkercad.com/things/3u9MBMnlbHN?sharecode=vhaPXeOiGWukPO0IrekwQR8_ec7rGlUPwW9lSQwp0Fw" data-type="link" data-id="https://www.tinkercad.com/things/3u9MBMnlbHN?sharecode=vhaPXeOiGWukPO0IrekwQR8_ec7rGlUPwW9lSQwp0Fw" rel="nofollow noopener" target="_blank">Güneş Takip Sistemi Model 1</a></p>



<p class="wp-block-paragraph"><a href="https://www.tinkercad.com/things/3f6veJaTH7C?sharecode=r2ExLewc_LfDH3u6_AfTmfKZ2KS-PHSo97tX2WzyIJg" data-type="link" data-id="https://www.tinkercad.com/things/3f6veJaTH7C?sharecode=r2ExLewc_LfDH3u6_AfTmfKZ2KS-PHSo97tX2WzyIJg" rel="nofollow noopener" target="_blank">Güneş Takip Sistemi Model 2</a></p>



<h2 class="wp-block-heading">Pan-tilt ve Servo Motorların Kurulmuş Hali</h2>


<div class="wp-block-image">
<figure class="aligncenter size-medium"><img loading="lazy" decoding="async" width="300" height="300" src="https://blog.robo90.com/wp-content/uploads/2023/08/pan-tilt-seti-2-eksen-servo-tutucu-arduino-setleri-blog-robo90-300x300.jpg" alt="Pan Tilt Seti 2 Eksen Servo Tutucu Arduino nasıl kullanılır" class="wp-image-8350" title="Servo Motor ve LDR ile Güneş Takip Sistemi 18" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/pan-tilt-seti-2-eksen-servo-tutucu-arduino-setleri-blog-robo90-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/pan-tilt-seti-2-eksen-servo-tutucu-arduino-setleri-blog-robo90-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/pan-tilt-seti-2-eksen-servo-tutucu-arduino-setleri-blog-robo90-450x450.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/pan-tilt-seti-2-eksen-servo-tutucu-arduino-setleri-blog-robo90.jpg 740w" sizes="(max-width: 300px) 100vw, 300px" /></figure>
</div>


<h2 class="wp-block-heading">Devre Şeması</h2>



<p class="wp-block-paragraph">Pin 9&#8217;a bağlı servo motor Pan-Tilt&#8217;in alt kısmında ,pin 10&#8217;a bağlı olan servo motor ise Pan-Tilt&#8217;in üst kısmında kullanılmıştır.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="432" data-id="7809" src="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-1024x432.png" alt="Servo Motor ve LDR ile Güneş Takip Sistemi - Robo90 - Blog 6" class="wp-image-7809" title="Servo Motor ve LDR ile Güneş Takip Sistemi 19" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-1024x432.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-300x127.png 300w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-768x324.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-150x63.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-450x190.png 450w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi-1200x506.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Devre-Semasi.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<h2 class="wp-block-heading">Projenin Kodlanması</h2>



<h3 class="wp-block-heading">Kütüphane Kurulumu</h3>



<p class="wp-block-paragraph">Öncelikle Arduino 0016 ve daha eski sürümlerde, Servo kütüphanesi sadece 9 ve 10 numaralı pinleri desteklemektedir. Eğer Arduino 0016 veya daha eski bir sürüm kullanmıyorsak Servo motorumuzu herhangi bir PWM pinine bağlayarak kullanabiliriz. Kütüphanenin kurulumuna geçelim.Sırasıyla Sketch(Taslak)-Include Library(Kitaplığı dahil et)-Manage Libraries(Kitaplıkları yönet ) seçeneklerini tıklıyoruz.Karşımıza çıkan ekranda arama kısmına Servo yazarak karşımıza çıkan kütüphanelerden tercih ettiğimizi indir (install) seçeneğine tıklayarak indiriyoruz.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="859" height="1024" data-id="7411" src="https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-859x1024.png" alt="Servo Motor ve LDR ile Güneş Takip Sistemi - Robo90 - Blog 7" class="wp-image-7411" title="Servo Motor ve LDR ile Güneş Takip Sistemi 20" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-859x1024.png 859w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-252x300.png 252w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-768x915.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-150x179.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1-450x536.png 450w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKullanim1.png 866w" sizes="(max-width: 859px) 100vw, 859px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="934" height="1000" data-id="7412" src="https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2.png" alt="Servo Motor ve LDR ile Güneş Takip Sistemi - Robo90 - Blog 8" class="wp-image-7412" title="Servo Motor ve LDR ile Güneş Takip Sistemi 21" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2.png 934w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2-280x300.png 280w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2-768x822.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2-150x161.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/servoKutuphaneKurulum2-450x482.png 450w" sizes="(max-width: 934px) 100vw, 934px" /></figure>
</figure>



<h3 class="wp-block-heading">Servo Motor Testi</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="432" src="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-1024x432.png" alt="Servo Motor ve LDR ile Güneş Takip Sistemi - Robo90 - Blog 9" class="wp-image-7810" title="Servo Motor ve LDR ile Güneş Takip Sistemi 22" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-1024x432.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-300x127.png 300w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-768x324.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-150x63.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-450x190.png 450w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema-1200x506.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-Servo-Motor-Sema.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code>#include&lt;Servo.h&gt; //kütüphane
Servo servo1;
int aciDegeri=90;
 
void setup() {
 servo1.attach(9); //pwm pini
}
 
void loop() {
servo1.write(aciDegeri);
</code></pre>



<h3 class="wp-block-heading">LDR Testi</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="432" src="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-1024x432.png" alt="Servo Motor ve LDR ile Güneş Takip Sistemi - Robo90 - Blog 10" class="wp-image-7811" title="Servo Motor ve LDR ile Güneş Takip Sistemi 23" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-1024x432.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-300x127.png 300w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-768x324.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-150x63.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-450x190.png 450w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema-1200x506.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/07/Servo-Motor-LDR-Gunes-Takip-Sistemi-LDR-Sema.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code>void setup() {
  
  Serial.begin(9600); //seri haberleşme başlatıyoruz
}
void loop() {
  int ldr = analogRead(A1); //Işık değişkenini A1 pinindeki LDR ile okuyoruz
  Serial.println(ldr); //Okunan değeri seri iletişim ekranına yansıtıyoruz
  delay(50);
  

}</code></pre>



<h3 class="wp-block-heading">Son Aşama Projenin Asıl Kodu</h3>



<pre class="wp-block-code"><code>#include &lt;Servo.h&gt;// servo kütüphanesi
Servo horizontal; // yatay servo
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;


Servo vertical; // dikey servo
int servov = 45;
int servovLimitHigh = 100;
int servovLimitLow = 1;


 
// LDR  pinleri
int ldrlt = A2; //LDR sol üst
int ldrrt = A3; //LDR sağ üst
int ldrld = A0; //LDR sol alt
int ldrrd = A1; //LDR sağ alt

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
  int lt = analogRead(ldrlt); // sol üst
  int rt = analogRead(ldrrt); // sağ üst
  int ld = analogRead(ldrld); // sol alt
  int rd = analogRead(ldrrd); // sağ alt
  
 
  int dtime = 10;
  int tol = 90;
  
  int avt = (lt + rt) / 2; // Ortalama üst değer
  int avd = (ld + rd) / 2; // Ortalama alt değer
  int avl = (lt + ld) / 2; // Ortalama sol değer
  int avr = (rt + rd) / 2; // Ortalama sağ değer

  int dvert = avt - avd; // üst ile altın  farkı
  int dhoriz = avl - avr;// sağ ile solun farkı
 
  Serial.print(avt);
  Serial.print(" ");
  Serial.print(avd); 
  Serial.print(" ");
  Serial.print(avl); 
  Serial.print(" ");
  Serial.print(avr); 
  Serial.print("   ");
  Serial.print(dtime);
  Serial.print("   ");
  Serial.print(tol);
  Serial.println(" ");

 
if (-1*tol &gt; dvert || dvert &gt; tol)
{
if (avt &lt; avd)
{
servov = ++servov;
if (servov &gt; servovLimitHigh)
{servov = servovLimitHigh;}
}
else if (avt &gt; avd)
{servov= --servov;
if (servov &lt; servovLimitLow)
{ servov = servovLimitLow;}
}
vertical.write(servov);
}
if (-1*tol &gt; dhoriz || dhoriz &gt; tol) 
{
if (avl &gt; avr)
{
servoh = --servoh;
if (servoh &lt; servohLimitLow)
{
servoh = servohLimitLow;
}
}
else if (avl &lt; avr)
{
servoh = ++servoh;
if (servoh &gt; servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
else if (avl = avr)
{
delay(5000);
}
horizontal.write(servoh);
}

delay(dtime);

}</code></pre>
<p><a rel="nofollow" href="https://blog.robo90.com/servo-motor-ve-ldr-ile-gunes-takip-sistemi/">Servo Motor ve LDR ile Güneş Takip Sistemi</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/servo-motor-ve-ldr-ile-gunes-takip-sistemi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HC-06 ve HC-05 Aralarında Nasıl Haberleşir?</title>
		<link>https://blog.robo90.com/hc-06-ve-hc-05-aralarinda-nasil-haberlesir/</link>
					<comments>https://blog.robo90.com/hc-06-ve-hc-05-aralarinda-nasil-haberlesir/#respond</comments>
		
		<dc:creator><![CDATA[Sevginur Yeşilyaprak]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 07:50:00 +0000</pubDate>
				<category><![CDATA[Arduino Eğitim Serisi]]></category>
		<category><![CDATA[Arduino Projeleri]]></category>
		<category><![CDATA[Genel]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7813</guid>

					<description><![CDATA[<p>Merhaba arkadaşlar, ben stajyer Bilgisayar Mühendisi Sevginur. Bu yazımda sizlere HC-06 ve HC-05 Bluetooth modüllerinin nasıl haberleştiğinden bahsedeceğim. Umarım yazım sizler için faydalı olur. Hadi başlayalım. HC-06 Nedir? Ne İçin Kullanılır? HC-06, kablosuz haberleşmeyi sağlayan ve Bluetooth protokolünü kullanan bir kablosuz haberleşme modülüdür. Bu modül sayesinde belirli mesafeler içinde kablosuz haberleşme yoluyla seri haberleşme sağlanır. [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/hc-06-ve-hc-05-aralarinda-nasil-haberlesir/">HC-06 ve HC-05 Aralarında Nasıl Haberleşir?</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Merhaba arkadaşlar, ben stajyer Bilgisayar Mühendisi Sevginur. Bu yazımda sizlere HC-06 ve HC-05 Bluetooth modüllerinin nasıl haberleştiğinden bahsedeceğim. Umarım yazım sizler için faydalı olur. Hadi başlayalım.</p>



<h2 class="wp-block-heading">HC-06 Nedir? Ne İçin Kullanılır?</h2>



<p class="wp-block-paragraph">HC-06, kablosuz haberleşmeyi sağlayan ve Bluetooth protokolünü kullanan bir kablosuz haberleşme modülüdür. Bu modül sayesinde belirli mesafeler içinde kablosuz haberleşme yoluyla seri haberleşme sağlanır. HC-06, Bluetooth 2.0’ı destekleyen bu kart, 2.4GHz frekansında haberleşme yapılmasına imkan sağlayıp açık alanda yaklaşık 10 metrelik bir haberleşme mesafesine sahiptir. Sadece Slave modda çalışır.</p>



<h2 class="wp-block-heading">HC-05 Nedir? Ne İçin Kullanılır?</h2>



<p class="wp-block-paragraph">HC-05, seri haberleşme protokolü olan Bluetooth’u kullanan bir kablosuz haberleşme modülüdür. Bu modül sayesinde belirli mesafeler içinde kablosuz haberleşme yoluyla seri haberleşme sağlanır. HC-05, UART tarzı iletişim modu sayesinde Arduino meraklıları için favori bir seçimdir. Bu kart, düşük maliyetli, çok yönlü ve kullanımı kolaydır. HC-05 modülü hem Master hem de Slave olarak çalışabilir. HC-05, UART tarzı iletişim modu sayesinde HC-06 ya göre daha çok tercih edilmektedir.</p>



<h2 class="wp-block-heading">Malzemeler</h2>



<ul class="wp-block-list">
<li><a href="https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli">Arduino UNO R3 – SMD Klon (CH340 Çipli) – USB Kablo Hediyeli</a></li>



<li><a href="https://www.robo90.com/hc06-bluetooth-serial-modul">HC-06 Bluetooth Modülü</a></li>



<li><a href="https://www.robo90.com/hc05-bluetooth-modulu-karti-arduino-uyumlu">HC-05 Bluetooth Modülü</a></li>



<li><a href="https://www.robo90.com/1k-direnc-paketi-1-4-w-10-adet">1K Direnç Paketi – 1/4 W – 10 Adet</a></li>



<li><a href="https://www.robo90.com/arama?q=jumper"></a><a href="https://www.robo90.com/elektronik-breadboard-buyuk-boy-830-pin">Elektronik Breadboard – Büyük Boy – 830 Pin</a></li>



<li><a href="https://www.robo90.com/arama?q=jumper"></a><a href="https://www.robo90.com/jumper-kablolar">Jumper Kablo</a></li>
</ul>



<h2 class="wp-block-heading">Peki Nedir Bu Slave /Master Mod?</h2>



<p class="wp-block-paragraph">Bluetooth modüllerinde Slave ve Master modlar, iki cihaz arasındaki iletişim için kullanılır. Slave modunda, Bluetooth modülüne dışarıdan bir bağlantı yapılabilirken, modül ile başka bir Bluetooth cihazına ilk bağlantı yapılamaz. Master mod ise elinizdeki modül ile dışardaki bir Bluetooth cihazına doğrudan ilk bağlantıyı yapmanıza olanak sağlar.</p>



<p class="wp-block-paragraph">İki bluetooth modülü birbiri ile haberleşirken biri Slave diğeri Master modda olmalıdır.HC-06 sadece Slave modda çalışabildiği için HC-05&#8217;i Master olarak atamalıyız.</p>



<h2 class="wp-block-heading">HC-05&#8217;i Master Olarak Atama</h2>



<p class="wp-block-paragraph">HC-05&#8217;i Master olarak atama işlemi AT komutları ile yapılacaktır. Bunun için aşağıda gördüğünüz şemada ki gibi bağlantıları yapıyoruz. Burada dikkat edilmesi gereken bağlantıları yapmadan kodun atılmış olması ve modüle güç verilmeden modül üzerinde bulunan butona basılı tutup daha sonra güç verilmesidir. Eğer buton bulunmuyorsa 34. pine bir jumper kablo lehimleyebilirsiniz.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="541" data-id="8164" src="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-1024x541.png" alt="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? - Robo90 - Blog 11" class="wp-image-8164" title="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? 24" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-1024x541.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-300x158.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-768x406.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-1536x811.png 1536w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-150x79.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-450x238.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3-1200x634.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc05-3.png 1755w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p class="wp-block-paragraph">Bağlantımızı yaptıktan sonra kodumuzu yükleyelim.</p>



<pre class="wp-block-code"><code>#include &lt;SoftwareSerial.h&gt;
SoftwareSerial bluetooth(7, 6); // RX, TX
 
void setup() {
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  bluetooth.begin(38400);// HC-05 38400 baud ile çalışmaktadır.
}
 
void loop()
{
  if (bluetooth.available())//bluetooth'dan gelen veriler porta yazılır.
    Serial.write(bluetooth.read());
  if (Serial.available())//porttan gönderilen veriler bluetooth'a yazılır.
    bluetooth.write(Serial.read());
}</code></pre>



<ul class="wp-block-list">
<li>Serial ekrana ‘<strong>AT</strong>‘ yazıp gönderdiğimizde cevap olarak ‘<strong>OK</strong>‘ ifadesi geldiğinde AT komutlarına hazırdır. Şimdi AT komutlarıyla bluetooth modülü master moda alabiliriz.</li>



<li>‘<strong>AT+ROLE=1</strong>‘ yazarak modülü Master moda alıyoruz.</li>



<li>‘<strong>AT+ROLE</strong>‘ komutunu kullanarak modumuzu teyit ediyoruz. (1=Master &#8211; 0=Slave)</li>
</ul>



<p class="wp-block-paragraph">Böylece HC-05&#8217;i Master olarak atamış bulunuyoruz.</p>



<h2 class="wp-block-heading">Peki HC-05 ile HC-06 Nasıl Birbiriyle Haberleşir?</h2>



<p class="wp-block-paragraph">HC-05 ve HC-06&#8217;nın birbiriyle haberleşmesini anlatmak için bir potansiyometre ve buton kullanacağım. Butona bastığımda haberleşme başlayacak ve tekrar bastığımda ise haberleşme kesilecek. Veriler Master &#8211;> Slave yönlü iletildiğinden dolayı potansiyometre ve butonu HC-05&#8217;e bağlayacağız.</p>



<h3 class="wp-block-heading">Slave için Kod</h3>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="541" data-id="8161" src="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-1024x541.png" alt="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? - Robo90 - Blog 12" class="wp-image-8161" title="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? 25" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-1024x541.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-300x158.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-768x406.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-1536x811.png 1536w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-150x79.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-450x238.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1-1200x634.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_hc06-1.png 1755w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<pre class="wp-block-code"><code>#include &lt;SoftwareSerial.h&gt;
SoftwareSerial mySerial(7, 6);  // RX, TX
String cmd = "";
void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  
while (mySerial.available() &gt; 0) {
    cmd += mySerial.read();
    
  }Serial.println(cmd);
  cmd = ' ';

  delay(50);

}</code></pre>



<h3 class="wp-block-heading">Master için Kod</h3>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="428" data-id="8163" src="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-1024x428.png" alt="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? - Robo90 - Blog 13" class="wp-image-8163" title="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? 26" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-1024x428.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-300x125.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-768x321.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-150x63.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-450x188.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1-1200x502.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_devreSemasi-1.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p class="wp-block-paragraph">Potansiyometreden okunan değer 0 ile 1023 arasındadır yani 10 bite kadar değer yazdırabiliriz ama modüllerimiz arasındaki iletişim 8 bit ile sınırlıdır. <br>Bu yüzden &#8220;potValue=  map(potValue,0,1023,0,255);&#8221; satırında olduğu gibi haritalama komutu kullandım. Bu sayede potansiyometreden gelen değer artık 0 ile 255 değerleri arasında olmuş oldu.</p>



<pre class="wp-block-code"><code>#include &lt;SoftwareSerial.h&gt;

int Button = 8;

const byte potPin = A0;
SoftwareSerial mySerial(7, 6); // RX, TX
int potValue;
bool countingStatus = false; // Saymayı başlatmak ve durdurmak için bayrak değişkeni

void setup() {

  Serial.begin(9600);
 
  pinMode(Button, INPUT);
 
  mySerial.begin(9600);
}

void loop()
{
  potValue = analogRead(potPin);

  if (digitalRead(Button) == 1) {
    delay(50); // Butonun mekanik tepkisini düzeltmek için küçük bir gecikme ekledik
    if (!countingStatus) { //  saymaDurumu false ise, yani sayma başlamamışsa
      countingStatus = true; // Saymayı başlat
      Serial.println("Counting Started!");
      
    }
    else { // Eğer  saymaDurumu true ise, yani sayma başlamışsa
      countingStatus = false; // Saymayı durdur
      Serial.println("Counting stopped!"); 
    }
  }

  if (countingStatus) { // Eğer saymaDurumu true ise, yani sayma başlamışsa
    

     potValue=  map(potValue,0,1023,0,255);//(Değişken adı,dönüştürülecek veri aralığı,dönüştürülmüş veri aralığı)
     mySerial.write(potValue);//potValue'da depolanan değeri tek bir bayt olarak seri porta gönderir
     Serial.print("Pot Value: ");//Seri monitöre yazdırır
    Serial.println(potValue);//potValue'da depolanan değeri seri monitöre yazdırır
     

  }
  delay(500);
}
</code></pre>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="543" data-id="8165" src="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-1024x543.png" alt="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? - Robo90 - Blog 14" class="wp-image-8165" title="HC-06 ve HC-05 Aralarında Nasıl Haberleşir? 27" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-1024x543.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-300x159.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-768x408.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-1536x815.png 1536w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-150x80.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-450x239.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort-1200x637.png 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/HC-06_HC-05_Aralarinda_Nasil_Haberlesir_seriPort.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p class="wp-block-paragraph">Projemiz bitmiştir. Yazımı okuduğunuz için teşekkürler. Umarım yararlı olmuştur <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">Arduino ile yapılan diğer projelerimize göz atmak için:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><a href="https://blog.robo90.com/kategori/projeler/arduino-projeleri/">Arduino Projeleri</a></p>
</blockquote>
<p><a rel="nofollow" href="https://blog.robo90.com/hc-06-ve-hc-05-aralarinda-nasil-haberlesir/">HC-06 ve HC-05 Aralarında Nasıl Haberleşir?</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/hc-06-ve-hc-05-aralarinda-nasil-haberlesir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ESP32CAM ve OV2640 Nasıl Kullanılır?</title>
		<link>https://blog.robo90.com/esp32cam-ve-ov2640-nasil-kullanilir/</link>
					<comments>https://blog.robo90.com/esp32cam-ve-ov2640-nasil-kullanilir/#respond</comments>
		
		<dc:creator><![CDATA[Barkın Sarıkartal]]></dc:creator>
		<pubDate>Sat, 05 Aug 2023 12:35:29 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[IoT Eğitim Serisi]]></category>
		<category><![CDATA[IoT Projeleri]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7948</guid>

					<description><![CDATA[<p>Herkese merhaba, bugünkü yazımızda ESP32CAM WIFI Bluetooth Geliştirme Kartı ve OV2640 Kamera Modülünün nasıl kullanılacağını anlatacağız ve sıkça karşılaşılan problemlerin çözümlerine bakacağız. Malzemeler ESP32CAM Nasıl Kullanılır? İlk olarak bu kart Arduino IDE programına otomatik olarak gelmediği için kart seçme menüsüne eklememiz gerekiyor. Bunun için de; Dilerseniz yandaki &#8220;Resolution&#8221; seçeneğinden kameranızın görüntü kalitesini değiştirebilirsiniz. Ancak görüntü [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/esp32cam-ve-ov2640-nasil-kullanilir/">ESP32CAM ve OV2640 Nasıl Kullanılır?</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Herkese merhaba, bugünkü yazımızda ESP32CAM WIFI Bluetooth Geliştirme Kartı ve OV2640 Kamera Modülünün nasıl kullanılacağını anlatacağız ve sıkça karşılaşılan problemlerin çözümlerine bakacağız.</p>



<h2 class="wp-block-heading">Malzemeler</h2>



<ul class="wp-block-list">
<li><a href="https://www.robo90.com/esp32-cam-wifi-bluetooth-gelistirme-karti-ve-ov2640-kamera-modulu" data-type="link" data-id="https://www.robo90.com/esp32-cam-wifi-bluetooth-gelistirme-karti-ve-ov2640-kamera-modulu">ESP32CAM WIFI Bluetooth Geliştirme Kartı ve OV2640 Kamera Modülü</a></li>



<li><a href="https://www.robo90.com/40li-ayrilabilen-disi-disi-jumper-kablo-20cm-arduino-uyum" data-type="link" data-id="https://www.robo90.com/40li-ayrilabilen-disi-disi-jumper-kablo-20cm-arduino-uyum">Dişi-Dişi Jumper Kablo</a></li>



<li><a href="https://www.robo90.com/ft232rl-ftdi-usb-ttl-donusturucu-programlayici" data-type="link" data-id="https://www.robo90.com/ft232rl-ftdi-usb-ttl-donusturucu-programlayici">FT232RL FTDI USB-TTL Dönüştürücü-Programlayıcı</a></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="711" height="341" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32cam-schematic-diagram.jpg" alt="ESP32CAM Schematic Diagram" class="wp-image-8403" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 28" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32cam-schematic-diagram.jpg 711w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32cam-schematic-diagram-300x144.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32cam-schematic-diagram-150x72.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32cam-schematic-diagram-450x216.jpg 450w" sizes="(max-width: 711px) 100vw, 711px" /></figure>
</div>


<h2 class="wp-block-heading">ESP32CAM Nasıl Kullanılır?</h2>



<p class="wp-block-paragraph">İlk olarak bu kart Arduino IDE programına otomatik olarak gelmediği için kart seçme menüsüne eklememiz gerekiyor. Bunun için de;</p>



<ol class="wp-block-list">
<li>Öncelikle Arduino IDE programını açıyoruz ve Dosya > Tercihler kısmına geliyoruz ve altta &#8220;Ek Devre Kartları Yöneticisi URL’leri:&#8221; yazısının yanındaki boşluğa https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json linkini yapıştırıyoruz.</li>



<li>Daha sonra Araçlar > Kart > Kart Yöneticisi kısmına geliyoruz ve önümüzde açılan ekranın arama kısmına &#8220;ESP32&#8221; yazıyoruz. Ve aşağıdaki resimde gördüğümüz kart dizininin 1.0.6 versiyonunu ve 2.0.2 versiyonunu yüklüyoruz.<br><img loading="lazy" decoding="async" width="450" height="137" class="wp-image-7950" style="width: 450px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/asdasddddd.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 15" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 29" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/asdasddddd.png 423w, https://blog.robo90.com/wp-content/uploads/2023/08/asdasddddd-300x91.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/asdasddddd-150x46.png 150w" sizes="(max-width: 450px) 100vw, 450px" /></li>



<li>Şimdi Dosya &gt; Örnekler &gt; ESP32 &gt; Camera &gt; CameraWebServer örneğini açıyoruz. Bu örnek kodda değiştirmemiz gereken bazı satırlar var. Bunlardan ilki:<br><img loading="lazy" decoding="async" width="600" height="206" class="wp-image-7951" style="width: 600px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 16" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 30" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli.png 976w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-300x103.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-768x264.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-150x51.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-450x154.png 450w" sizes="(max-width: 600px) 100vw, 600px" /><br>Yukarıdaki resimdeki satırlardan sondan önceki satırı yorum olmaktan çıkarıp diğer satırları yorum haline getiriyoruz. İkinci olarak da:<br><img loading="lazy" decoding="async" width="600" height="76" class="wp-image-7952" style="width: 600px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-1.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 17" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 31" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-1.png 724w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-1-300x38.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-1-150x19.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-1-450x57.png 450w" sizes="(max-width: 600px) 100vw, 600px" /><br>Yukarıdaki satırlarda ssid satırındaki tırnaklar içine internet ağımızın adını, password satırındaki tırnaklar içine de internet ağımızın şifresini giriyoruz. Burada modülümüzün bağlanacağı ağ ile kamera yayınını izleyeceğimiz cihazın aynı ağa bağlı olması gerekmektedir ve bu ağın 2.4 GHz olması gerekmektedir.</li>



<li>Şimdi kodumuzu modülümüze yüklemek için modülümüzün ftdi dönüştürücü modülü ile bağlantısını aşağıdaki resimdeki gibi gerçekleştiriyoruz.</li>



<li>Sıradaki adımda ftdi modülümüzü usb kablo aracılığıyla bilgisayarımıza bağlıyoruz.</li>



<li>Modülü bağladıktan sonra Araçlar &gt; Kart &gt; ESP32 Arduino &gt; ESP32 Wrover Module seçeneğini seçiyoruz. Seçtikten sonra Araçlar &gt; Partition Scheme &gt; Huge APP seçeneğini de seçiyoruz. En son olarak da Araçlar &gt; Port menüsünden ESP32 Modülümüzün bağlı olduğu portu seçiyoruz.</li>



<li>Kodumuzu artık yükleyebiliriz. Arduino IDE programı &#8220;Yükleme Tamamlandı&#8221; uyarısını verdikten sonra kartımızın bağlantısını bilgisayarımızdan hemen koparmamamız lazım. &#8220;Yükleme Tamamlandı&#8221; yazısının altında, aşağıdaki resimdeki gibi bazı yazılar belirmekte.<br><img loading="lazy" decoding="async" width="300" height="194" class="wp-image-7954" style="width: 300px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-2.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 18" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 32" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-2.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-2-150x97.png 150w" sizes="(max-width: 300px) 100vw, 300px" /><br>İlk başta &#8220;Connecting&#8221; yazısı çıkmakta. Tam bu esnada modülümüzün reset tuşuna bir kere basmamız gerekmektedir.<br><img loading="lazy" decoding="async" width="300" height="262" class="wp-image-7953" style="width: 300px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-3.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 19" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 33" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-3.png 500w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-3-300x262.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-3-150x131.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-3-450x393.png 450w" sizes="(max-width: 300px) 100vw, 300px" /><br>Daha sonra &#8220;Writing at 0x….&#8221; Yazılarının yanındaki ifadenin %100’e ulaşmasını bekliyoruz.<br><img loading="lazy" decoding="async" width="300" height="211" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 34" class="wp-image-7955" style="width: 300px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-4.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 20" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-4.png 615w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-4-300x211.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-4-150x105.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-4-450x316.png 450w" sizes="(max-width: 300px) 100vw, 300px" /><br>En son olarak da &#8220;Hard resetting via RTS pin…&#8221; yazısını görmekteyiz. Bu yazı kodumuzun sorunsuz bir şekilde modülümüze yüklendiğini göstermektedir. (Eğer bu adımlara kadar herhangi bir hata ile karşılaştıysanız &#8220;ESP32-CAM WIFI Bluetooth Geliştirme Kartı ile Sıkça Karşılaşılan Hatalar ve Çözümleri&#8221; adlı yazımıza göz atmak isteyebilirsiniz.</li>



<li>Kodumuz yüklendikten sonra modülümüzün bilgisayarla bağlantısını ayırmamız gerekiyor. ESP32 CAM modülümüzün GPIO0 ve GND pinlerini kısa devre yapan jumper kablomuzu çıkarıyoruz ve modülümüzü yeniden bilgisayara bağlıyoruz.</li>



<li>Bağlantı gerçekleştikten sonra Arduino IDE üzerinden Seri Port Ekranını açıyoruz. Ekran açıldığı zaman ESP32 Cam modülümüz üzerindeki reset tuşuna bir defa basıyoruz.<br><img loading="lazy" decoding="async" width="450" height="286" class="wp-image-7956" style="width: 450px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 21" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 35" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5.png 1235w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-300x191.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-1024x651.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-768x488.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-150x95.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-450x286.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-5-1200x763.png 1200w" sizes="(max-width: 450px) 100vw, 450px" /><br>Modülümüze reset attıktan bir süre sonra yukarıdaki resimdeki gibi yazılar yazması gerekmekte. “http://” ile başlayan linki kopyalıyoruz ve internet tarayıcımızın arama çubuğuna yapıştırıyoruz.</li>



<li>Linkimizi yapıştırdıktan sonra bizi aşağıdaki resimdeki arayüz karşılıyor. Kamera yayınını başlatmak için sol alttaki kırmızı &#8220;Start Stream&#8221; tuşuna basıyoruz.</li>



<li>Son olarak karşımıza bu şekilde bir ekran çıkacak.<br><img loading="lazy" decoding="async" width="600" height="418" class="wp-image-7958" style="width: 600px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 22" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 36" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6.png 1260w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-300x209.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-1024x714.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-768x535.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-150x105.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-450x314.png 450w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-6-1200x836.png 1200w" sizes="(max-width: 600px) 100vw, 600px" /><br>bastığımız modülümüz aşağıdaki gibi kamera yayınına başlamaktadır.<br><img loading="lazy" decoding="async" width="450" height="590" class="wp-image-7957" style="width: 450px;" src="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-7.png" alt="ESP32CAM ve OV2640 Nasıl Kullanılır? - Robo90 - Blog 23" title="ESP32CAM ve OV2640 Nasıl Kullanılır? 37" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-7.png 678w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-7-229x300.png 229w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-7-150x197.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/esp32-cam-yazisi-kod-gorseli-7-450x590.png 450w" sizes="(max-width: 450px) 100vw, 450px" /></li>
</ol>



<p class="wp-block-paragraph">Dilerseniz yandaki &#8220;Resolution&#8221; seçeneğinden kameranızın görüntü kalitesini değiştirebilirsiniz. Ancak görüntü kalitesi arttıkça kameranızın yayın kalitesinin akıcılığının azaldığını unutmayın. Ayrıca internet hızınıza göre en yüksek bazı görüntü kaliteleri açılmayabilir.</p>



<p class="wp-block-paragraph"><a href="https://blog.robo90.com/?s=esp32cam" data-type="link" data-id="https://blog.robo90.com/?s=esp32cam">ESP32CAM ile İlgili Diğer Yazılarımız</a></p>
<p><a rel="nofollow" href="https://blog.robo90.com/esp32cam-ve-ov2640-nasil-kullanilir/">ESP32CAM ve OV2640 Nasıl Kullanılır?</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/esp32cam-ve-ov2640-nasil-kullanilir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ESP-NOW ile RGB LED Kontrolü 🎛️</title>
		<link>https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/</link>
					<comments>https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/#respond</comments>
		
		<dc:creator><![CDATA[Mustafa Topal]]></dc:creator>
		<pubDate>Fri, 04 Aug 2023 09:09:43 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[IoT Projeleri]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7878</guid>

					<description><![CDATA[<p>Bir önceki yazımızda ESP-NOW protokolünü kullanarak iki adet ESP32 kartı ile tek yönlü iletişim gerçekleştirmiştik. Bu yazımızda da bir önceki yazımızdaki kodumuzu revize ederek bir RGB LED ‘i kontrol edeceğiz. Ancak bu sefer farklı kartların birbirleri ile haberleşmesini istediğimiz için bir adet ESP32 kartı ile bir adet ESP32-CAM kartını haberleştireceğiz. Siz dilerseniz tekrar önceki yazıdaki [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/">ESP-NOW ile RGB LED Kontrolü 🎛️</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bir önceki yazımızda ESP-NOW protokolünü kullanarak iki adet ESP32 kartı ile tek yönlü iletişim gerçekleştirmiştik. Bu yazımızda da bir önceki yazımızdaki kodumuzu revize ederek bir RGB LED ‘i kontrol edeceğiz. Ancak bu sefer farklı kartların birbirleri ile haberleşmesini istediğimiz için bir adet ESP32 kartı ile bir adet ESP32-CAM kartını haberleştireceğiz. Siz dilerseniz tekrar önceki yazıdaki gibi iki adet ESP32 geliştirme kartı kullanabilirsiniz.</p>



<p class="wp-block-paragraph">Eğer bu projeyi yapmayı amaçlıyorsanız “ Yeni başlayanlar için ESP-NOW ” adlı blog yazımı incelemenizi tavsiye ederim. Koddaki ESP-NOW protokolüne ait tüm komutların açıklamaları o blog yazımda mevcut.</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-robo-90-blog wp-block-embed-robo-90-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="J4MilMSikf"><a href="https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e1.png" alt="📡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yeni başlayanlar için ESP-NOW</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;&#x1f4e1; Yeni başlayanlar için ESP-NOW&#8221; &#8212; Robo90 - Blog" src="https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/embed/#?secret=rwctKEJqdb#?secret=J4MilMSikf" data-secret="J4MilMSikf" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">1. Adım: İhtiyaç Listesi</h2>



<h3 class="wp-block-heading">İsteğe bağlı ESP kartları</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>ESP32-Wroom-32 Wifi ve Bluetooth Geliştirme Kartı:</strong> <a href="https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti" target="_blank" rel="noreferrer noopener">https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti</a></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h3 class="wp-block-heading">Altyazı</h3>



<p class="wp-block-paragraph">Eğer elinizde ESP32-CAM modülünüz yoksa veya satın almak istemiyorsanız bu yazılımların hepsi ESP32 işlemcisine sahip tüm cihazlarda çalışacaktır. ESP32-CAM modülü de adından da anlaşılabileceği gibi ESP32 işlemcisi taşımaktadır. Sadece ESP32-CAM modülünün bacak sayısı daha az olduğu için verici kodunda çıkışını 0 ve 5V yani HIGH ve LOW yapabildiğiniz herhangi bir pini değiştirip ESP32 kartında da aynı yazılımı kullanabilirsiniz. Ancak minimum 2 adet ESP kartı olmalı. </p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>ESP32-CAM Wifi Bluetooth Geliştirme Kartı ve OV2640 Kamera Modülü: </strong><a href="https://www.robo90.com/esp32-cam-wifi-bluetooth-gelistirme-karti-ve-ov2640-kamera-modulu" target="_blank" rel="noreferrer noopener">https://www.robo90.com/esp32-cam-wifi-bluetooth-gelistirme-karti-ve-ov2640-kamera-modulu</a></p>
</blockquote>



<h3 class="wp-block-heading">Gerekli Yan Malzemeler</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">10mm RGB LED 4 Bacaklı Ortak Katot: <a href="https://www.robo90.com/10mm-rgb-led-4-bacakli-ortak-katot" target="_blank" rel="noreferrer noopener">https://www.robo90.com/10mm-rgb-led-4-bacakli-ortak-katot</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Mini Breadboard &#8211; 170 Pin &#8211; Yeşil &#8211; Çıkıntısız: <a href="https://www.robo90.com/mini-breadboard-170-pin-yesil-cikintisiz" target="_blank" rel="noreferrer noopener">https://www.robo90.com/mini-breadboard-170-pin-yesil-cikintisiz</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">220R Direnç Paketi &#8211; 1/4 W &#8211; 10 Adet: <a href="https://www.robo90.com/220r-direnc-paketi-1-4-w-10-adet" target="_blank" rel="noreferrer noopener">https://www.robo90.com/220r-direnc-paketi-1-4-w-10-adet</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">40lı Ayrılabilen Dişi-Erkek Jumper Kablo &#8211; 20cm &#8211; Arduino Uyumlu: <a href="https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyumlu" target="_blank" rel="noreferrer noopener">https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyumlu</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">6X6 8mm Tach Buton (2 Bacak): <a href="https://www.robo90.com/6x6-8mm-tach-buton-2-bacak" target="_blank" rel="noreferrer noopener">https://www.robo90.com/6&#215;6-8mm-tach-buton-2-bacak</a></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">2. Adım: Nasıl Kodlarız ?</h2>



<h3 class="wp-block-heading">Verici ( TX ) kodu</h3>



<div id="wp-block-themeisle-blocks-accordion-85cc3432" class="wp-block-themeisle-blocks-accordion exclusive">

<details class="wp-block-themeisle-blocks-accordion-item"><summary class="wp-block-themeisle-blocks-accordion-item__title"><div><strong><em>Kodun Tamamı;</em></strong></div></summary><div class="wp-block-themeisle-blocks-accordion-item__content">

<pre class="wp-block-code"><code>#include &lt;esp_now.h&gt;
#include &lt;WiFi.h&gt;
//kanal belirliyoruz alıcı ve verici aynı kanalda olmalı 
#define CHANNEL 1
#define BUTTON_PIN 21  // GIOP21 pin connected to button
#define BUTTON_PIN_1 19  // GIOP21 pin connected to button
#define BUTTON_PIN_2 18  // GIOP21 pin connected to button
//Alıcının MAC adresini esp_now_peer_info yapısına tanıttığımız kod
esp_now_peer_info_t slave;
//göndermek istediğimiz veri
uint8_t data=0; 
int lastState = LOW;  // the previous state from the input pin
int currentState;     // the current reading from the input pin
int lastState_1 = LOW;  // the previous state from the input pin
int currentState_1;     // the current reading from the input pin
int lastState_2 = LOW;  // the previous state from the input pin
int currentState_2;     // the current reading from the input pin
void setup ()
{
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BUTTON_PIN_1, INPUT_PULLUP);
  pinMode(BUTTON_PIN_2, INPUT_PULLUP);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_register_send_cb(OnDataSent);
  ScanForSlave();
  esp_now_add_peer(&amp;slave);
}
void loop(){
  currentState = digitalRead(BUTTON_PIN);
  if (lastState == HIGH &amp;&amp; currentState == LOW)
    esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  else if (lastState == LOW &amp;&amp; currentState == HIGH)
    Serial.println("The button is released");
  lastState = currentState;
  currentState_1 = digitalRead(BUTTON_PIN_1);
  if (lastState_1 == HIGH &amp;&amp; currentState_1 == LOW){
    data=1;
    esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  }
  else if (lastState_1 == LOW &amp;&amp; currentState_1 == HIGH){
    Serial.println("The button is released");
    data=0;
  }
  lastState_1 = currentState_1;
  currentState_2 = digitalRead(BUTTON_PIN_2);
  if (lastState_2 == HIGH &amp;&amp; currentState_2 == LOW){
    data=2;
    esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  }
  else if (lastState_2 == LOW &amp;&amp; currentState_2 == HIGH){
    Serial.println("The button is released");
    data=0;
  }
  lastState_2 = currentState_2;
  
  
}
//CallBack fonksiyonu
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status ) {
  Serial.print("Datayı gönderdim-&gt;");
  Serial.println(data);
}
void ScanForSlave() 
{
  int16_t scanResults = WiFi.scanNetworks(); // Scan only on one channel
  
    for (int i = 0; i &lt; scanResults; ++i) 
    {
      // Print SSID and RSSI for each device found
      String SSID = WiFi.SSID(i);
      String BSSIDstr = WiFi.BSSIDstr(i);
      // Check if the current device starts with `Slave`
      if (SSID.indexOf("RX") == 0) 
      {
        int mac[6];
        if ( 6 == sscanf(BSSIDstr.c_str(), "%x:%x:%x:%x:%x:%x",  &amp;mac[0], &amp;mac[1], &amp;mac[2], &amp;mac[3], &amp;mac[4], &amp;mac[5] ) ) {
          for (int ii = 0; ii &lt; 6; ++ii ) {
            slave.peer_addr[ii] = (uint8_t) mac[ii];
          }
        }
        slave.channel = CHANNEL; // pick a channel
        slave.encrypt = 0; // no encryption
        break;
      }
    }
}</code></pre>

</div></details>

</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Gördüğünüz gibi bir önceki yazımızdaki tüm ESP-NOW komutlarını bu yazımızda da kullandık. Farklı olarak “ <em>#define BUTTON_PIN 21 </em>” ile butonlarımızı tanımladık. Sonrasında “ <em>lastState </em>” ve “ <em>currentState </em>” gibi değişlenlerle butonlara bastığımız anı ve çektiğimiz anı kaydetmek için tanımladık. Setup kısmında ise “ <em>pinMode(BUTTON_PIN, INPUT_PULLUP); </em>” komutu sayesinde BUTTON_PIN pinini giriş olarak belirledik ve PULL_UP yaptık. Bu sayede butonumuza dışarıdan bir direnç yardımıyla pull up yapmamıza gerek kalmadı.</p>



<p class="wp-block-paragraph">Sonrasında loop kısmında “ currentState = digitalRead(BUTTON_PIN); ” komutu ile currentState değişkenimizi BUTTON_PIN pinimize yani IO21 numaralı pinimize eşitledik. Diğer butonlar için de aynı işlemi yaptık.</p>



<pre class="wp-block-code"><code> currentState = digitalRead(BUTTON_PIN);
  if (lastState == HIGH &amp;&amp; currentState == LOW)
    esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  else if (lastState == LOW &amp;&amp; currentState == HIGH)
    Serial.println("The button is released");
  lastState = currentState;
</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Kodumuzun yukarıdaki kısmında ise eğer BUTTON_PIN yani IO21 numaraya bağlı butonumuza basılırsa “ <em>esp_now_send(slave.peer_addr, &amp;data, sizeof(data)); </em>” komutumuzun çalışması gerektiğini kodladık. Bir önceki blog yazımızdan hatırlarsak bu kod “ <em>slave.peer_addr</em> ” MAC adresine sahip alıcı cihazımıza “ <em>&amp;data, sizeof(data)</em> ” komutları ile <em>data </em>verimizi ve datamızın boyutunu gönderir. Diğer buton kodlamalarında ise data verisini “ <em>data=1;</em> ” kodu sayesinde bir sayısına eşitleriz. Bu değer her buton için farklıdır. Bu sayede alıcı cihaza hangi butona basıldıysa onun numarasını gönderebiliriz ve ona göre RGB LED’ imizi kontrol edebiliriz.</p>



<p class="wp-block-paragraph">Sonradan “ <em>else if</em> ” komutu ile butondan parmağımızı çektiğimizi algılarız ve tekrar “ <em>data “</em> değişkenimizi sıfıra eşitleriz. Bu sayede herhangi bir karışıklık olmasının önüne geçeriz.</p>



<p class="wp-block-paragraph">Verici kodumuz bu kadardı. Şimdi alıcı kodumuzu inceleyelim.</p>



<h3 class="wp-block-heading">Alıcı ( RX ) kodu</h3>



<div id="wp-block-themeisle-blocks-accordion-953c80ff" class="wp-block-themeisle-blocks-accordion exclusive">

<details class="wp-block-themeisle-blocks-accordion-item"><summary class="wp-block-themeisle-blocks-accordion-item__title"><div><strong><em>Kodun tamamı:</em></strong></div></summary><div class="wp-block-themeisle-blocks-accordion-item__content">

<pre class="wp-block-code"><code>#include &lt;esp_now.h&gt;
#include &lt;WiFi.h&gt;
#define CHANNEL 1 
#define LED_PIN 12   
#define LED_PIN_1 13
#define LED_PIN_2 15    
int data_1;
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_AP);
  WiFi.softAP("RX_1","RX_1_Password",CHANNEL, 0);
  esp_now_init();
  esp_now_register_recv_cb(OnDataRecv);
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN_1, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
}
void loop() {
  if(data_1==0){
    digitalWrite(LED_PIN,HIGH);
    delay(1000);
    digitalWrite(LED_PIN,LOW);
  }
    digitalWrite(LED_PIN,HIGH);
  if(data_1==1){
    digitalWrite(LED_PIN_1,HIGH);
    delay(1000);
    digitalWrite(LED_PIN_1,LOW);
  }
  if(data_1==2){
    digitalWrite(LED_PIN_2,HIGH);
    delay(1000);
    digitalWrite(LED_PIN_2,LOW);
  }
}
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len){
  data_1=*data;
  Serial.print(data_1);
}</code></pre>

</div></details>

</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Alıcı kodumuzda da bu sefer RGB LED pinlerinin ESP kartımızın hangi pinleri ile kontrol edeceğimizi tanımladık. Sonrasında ise tekrar data_1 adlı bir değişken oluşturduk. Bunu neden yaptığıma değineceğim.</p>



<p class="wp-block-paragraph">Setup kısmında ise LED pinlerimizin pin durumlarını çıkış olarak ayarladık. Sonrasında önceki yazımızda bahsettiğimiz ESP-NOW komutlarımızı çalıştırdık.</p>



<p class="wp-block-paragraph">OnDataRecv fonksiyonuna bakacak olursak da önceki blog yazısından da hatırlayacağımız gibi <em>data </em>değişkeni bize geliyordu. Bu değişkeni ise bir arttırıp seri monitöre yazdırıyorduk. Şimdi ise bu değişkenden gelen verileri kontrol ederek RGB LED yakıp söndüreceğimiz için bu değişkeni kendi blog satırından loop satırına almamız gerekir. Ancak değişken sadece OnDataRecv fonksiyonu içerisinde tanımlanmıştır. Bunun önüne geçmek için kütüphaneleri de tanımladığımız tüm fonksiyonların dışındaki alana bir “ <em>data_1</em> ” değişkeni tanımlayıp data değişkenini bu değişkene eşitledim. Bu sayede gelen verileri diğer tüm fonksiyonlarda kullanabileceğim. Sonrasında da “ <em>Serial.print(data_1);</em> ” komutu ile alıcı cihazımıza gelen verileri seri monitöre yazdıralım.</p>



<p class="wp-block-paragraph">Loop kısmında ise daha önceden oluşturduğumuz data_1 değişkenini kullanaraka if komutları oluşturduk. Hatırlarsanız verici kısmında butonlara basıldığında sırasıyla 0, 1 ve 2 komutları alıcı cihazımıza geliyordu. Bu verileri kullanarak eğer data_1 değişkeni 1 sayısına eşitse RGB LED’in kırmızı bacağını kontrol et, eğer data_1 değişkeni 0 a eşitse mavi LED ‘i kontrol et gibi if komutları yazabiliriz.</p>



<p class="wp-block-paragraph">Şimdi ise kodlarımızı sırasıyla alıcı ve verici cihazlarımıza yüklemeniz gerekmekte. Eğer daha önce ESP32 veya ESP32-CAM modüllerine kod yüklemediyseniz ve nasıl yükleneceğini bilmiyorsanz sırasıyla aşağıdaki blog yazılarımı da inceleyebilirsiniz. Bu yazımda kodun nasıl yükleneceğine değinmeyeceğim.</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-robo-90-blog wp-block-embed-robo-90-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="ouDuOFxs1P"><a href="https://blog.robo90.com/%f0%9f%a7%91%f0%9f%92%bb-esp32-ye-program-nasil-yazilir-nelere-dikkat-etmemiz-gerekir/"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bb.png" alt="🧑‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ESP32 &#8216;ye Program Nasıl Yazılır?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;&#x1f9d1;&#x200d;&#x1f4bb; ESP32 &#8216;ye Program Nasıl Yazılır?&#8221; &#8212; Robo90 - Blog" src="https://blog.robo90.com/%f0%9f%a7%91%f0%9f%92%bb-esp32-ye-program-nasil-yazilir-nelere-dikkat-etmemiz-gerekir/embed/#?secret=JFI6AisTlY#?secret=ouDuOFxs1P" data-secret="ouDuOFxs1P" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div><figcaption class="wp-element-caption">ESP32 modülüne kod atmak için</figcaption></figure>



<figure class="wp-block-embed is-type-wp-embed is-provider-robo-90-blog wp-block-embed-robo-90-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="tMiPM1aXHj"><a href="https://blog.robo90.com/esp32-cam-ile-yemekleriniz-yanmasin/">ESP32-CAM ile Yemekleriniz Yanmasın <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f958.png" alt="🥘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;ESP32-CAM ile Yemekleriniz Yanmasın &#x1f958;&#8221; &#8212; Robo90 - Blog" src="https://blog.robo90.com/esp32-cam-ile-yemekleriniz-yanmasin/embed/#?secret=C5RjpAqtCZ#?secret=tMiPM1aXHj" data-secret="tMiPM1aXHj" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div><figcaption class="wp-element-caption">ESP32-CAM modülüne kod atmak için. </figcaption></figure>



<h2 class="wp-block-heading">Donanım Kısmı ve Blog Şeması</h2>



<div id="wp-block-themeisle-blocks-progress-bar-f0ef2c03" class="wp-block-themeisle-blocks-progress-bar" data-percent="50" data-duration="2"><div class="wp-block-themeisle-blocks-progress-bar__area"><div class="wp-block-themeisle-blocks-progress-bar__area__title"><span>Skill</span></div><div class="wp-block-themeisle-blocks-progress-bar__area__bar"></div><div class="wp-block-themeisle-blocks-progress-bar__progress wp-block-themeisle-blocks-progress-bar__number">50%</div></div></div>



<p class="wp-block-paragraph">Eğer bu kısma kadar geldiyseniz harika bir iş çıkardınız. Şimdi devre şemamızı sırasıyla alıcı ve verici cihazlarımız için inceleyelim.</p>



<h3 class="wp-block-heading">Verici Devre Şeması</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/TX-Device-Circuit-Diagram.jpg" alt="ESP32 geliştirme kartı ve breadboarda bağlı butonlar arasındaki bağlantıyı gösteren şema fotoğrafı. " class="wp-image-7879" width="675" height="361" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 38" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/TX-Device-Circuit-Diagram.jpg 747w, https://blog.robo90.com/wp-content/uploads/2023/08/TX-Device-Circuit-Diagram-300x160.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/TX-Device-Circuit-Diagram-150x80.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/TX-Device-Circuit-Diagram-450x240.jpg 450w" sizes="(max-width: 675px) 100vw, 675px" /><figcaption class="wp-element-caption">Fotoğraf 1.0</figcaption></figure>
</div>


<p class="wp-block-paragraph">Gördüğünüz gibi yukarıdan aşağıya doğru sırasıyla D21, D19, D18 pinlerini butonlara bağladık. Sonrasında butonların diğer bacaklarını da ESP32 kartımızın GND bacağına bağladık. Bu sayede butona basğtığımızda seçtiğimiz pinler GND ‘ye çekilerek butona basıldığını anlayacağız. Şimdi Alıcı cihazımızın devre şemasını inceleyelim. ( <strong>Fotoğraf 1.0</strong> )</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Alıcı Devre Şeması</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="889" height="452" src="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram.jpg" alt="ESP-NOW ile RGB LED Kontrolü &#x1f39b; - Robo90 - Blog 24" class="wp-image-7880" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 39" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram.jpg 889w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram-300x153.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram-768x390.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram-150x76.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-CAM-RX-device-circuit-diagram-450x229.jpg 450w" sizes="(max-width: 889px) 100vw, 889px" /><figcaption class="wp-element-caption">Fotoğraf 1.1</figcaption></figure>
</div>


<p class="wp-block-paragraph">Gördüğünüz gibi sırasıyla RGB LED’imizin pinlerini ESP32-CAM modülünün IO12, IO13, IO15 numaralı pin bacaklarına bağladık. RGB LED imiz ortak katot yapısına sahip olduğu için bir direnç yardımıyla ESP32-CAM modülümüzün GND bacağına bağladık. Bu sayede seçtiğimiz pinlerden herhangi birsini HIGH yaparsak ( yani 0V’dan 5V ) RGB LED in kırmızı mavi ve yeşil renklerinden birisi yanacaktır. Alıcı cihazımızın devre şeması da bu kadardı. Şimdi isterseniz projemizi test kısmına geçelim. ( <strong>Fotoğraf 1.1</strong> )</p>



<h2 class="wp-block-heading">Test Kısmı</h2>



<p class="wp-block-paragraph">Şimdi iki cihazımız da ayrı ayrı bilgisayarıma bağlı ve ayrı Arduino IDE programında açıklar. Bu sayede hangi verinin nereye nasıl gittiğini görebileceğim.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/BLUE-LED-ON-WORK-2.jpg" alt="ESP32 cihazına bağlı butonlardan birisine bastığımda ESP32-CAM cihazına bağlı RGB LED &#039;in mavi ışığı yanıyor. " class="wp-image-7887" width="779" height="779" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 40" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/BLUE-LED-ON-WORK-2.jpg 735w, https://blog.robo90.com/wp-content/uploads/2023/08/BLUE-LED-ON-WORK-2-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/BLUE-LED-ON-WORK-2-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/BLUE-LED-ON-WORK-2-450x450.jpg 450w" sizes="(max-width: 779px) 100vw, 779px" /><figcaption class="wp-element-caption">Fotoğraf 1.2</figcaption></figure>
</div>


<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="268" src="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-1024x268.jpg" alt="ESP32 cihazına bağlı olan butona bastığımda Arduino IDE programında basıldığı ve 0 datasını gönderdiği yazıyor. Alıcı cihazına bağlı Arduino IDE programında ise 0 datasının geldiği görülüyor. " class="wp-image-7888" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 41" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-1024x268.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-300x79.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-768x201.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-150x39.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2-450x118.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-2.jpg 1049w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ve evet ! İlk butona bastığım anda mavi LED’imin yandığını görebiliyorum. (<strong> Fotoğraf 1.2 </strong>) Şimdi sırasıyla diğer butonlara basarak diğer LED&#8217;leri kontrol edelim. Yeşil ledi kontrol etmek için ortadaki butona bastığımda; ( <strong>Fotoğraf 1.3</strong> )                     </p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/GREEN-LED-ON-WORK.jpg" alt="ESP32 cihazına bağlı butonlardan birisine bastığımda ESP32-CAM cihazına bağlı RGB LED &#039;in yeşil ışığı yanıyor. " class="wp-image-7890" width="778" height="780" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 42" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/GREEN-LED-ON-WORK.jpg 735w, https://blog.robo90.com/wp-content/uploads/2023/08/GREEN-LED-ON-WORK-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/GREEN-LED-ON-WORK-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/GREEN-LED-ON-WORK-450x451.jpg 450w" sizes="(max-width: 778px) 100vw, 778px" /><figcaption class="wp-element-caption">Fotoğraf 1.3</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="287" src="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-1024x287.jpg" alt="ESP32 cihazına bağlı olan butona bastığımda Arduino IDE programında basıldığı ve 1 datasını gönderdiği yazıyor. Alıcı cihazına bağlı Arduino IDE programında ise 1 datasının geldiği görülüyor. " class="wp-image-7891" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 43" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-1024x287.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-300x84.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-768x215.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-150x42.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED-450x126.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Green-LED.jpg 1198w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Fotoğraf 1.4</figcaption></figure>



<p class="wp-block-paragraph">Gördüğünüz gibi ortadaki butona basınca yeşil RGB LED&#8217;i yanıyor ve verici seri monitöründe 1 datasını gönderdiğini gösteriyor. ( <strong>Fotoğraf 1.3- 1.4</strong> ) Alıcı monitöründe ise 1 datasının geldiğini görebiliyoruz. Şimdi aynı durumu kırmızı LED için de inceleyelim. </p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/RED-LED-ON-WORK.jpg" alt="ESP32 cihazına bağlı butonlardan birisine bastığımda ESP32-CAM cihazına bağlı RGB LED &#039;in kırmızı ışığı yanıyor. " class="wp-image-7892" width="777" height="778" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 44" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/RED-LED-ON-WORK.jpg 738w, https://blog.robo90.com/wp-content/uploads/2023/08/RED-LED-ON-WORK-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/RED-LED-ON-WORK-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/RED-LED-ON-WORK-450x451.jpg 450w" sizes="(max-width: 777px) 100vw, 777px" /><figcaption class="wp-element-caption">Fotoğraf 1.5</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="286" src="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-1024x286.jpg" alt="ESP32 cihazına bağlı olan butona bastığımda Arduino IDE programında basıldığı ve 2 datasını gönderdiği yazıyor. Alıcı cihazına bağlı Arduino IDE programında ise 2 datasının geldiği görülüyor. " class="wp-image-7893" title="ESP-NOW ile RGB LED Kontrolü &#x1f39b; 45" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-1024x286.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-300x84.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-768x215.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-150x42.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED-450x126.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/Arduino-IDE-ESP-NOW-Serial-Monitor-Red-LED.jpg 1059w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Fotoğraf 1.6</figcaption></figure>



<p class="wp-block-paragraph">Ve evet ! Gördüğünüz gibi butona bastığım anda 2 datası verici cihazdan alıcı cihaza gönderildi ve alıcı cihazın da seri monitöründe 2 datası göründü. ( <strong>Fotoğraf 1.5</strong>&#8211;<strong> 1.6</strong> ) Fotoğrafa bacakak olursak da kırmızı ışığın yandığını gözlemleyebiliriz. </p>



<p class="wp-block-paragraph">Bu projemiz bu kadardı. İki adet ESP32 cihazını kablosuz haberleştirerek yapabileceklerinizi bir düşünsenize. Ne kadar fazla. Bunun gibi daha fazla projeyi görmek istiyorsanız aşağıdaki bağlantıdan tüm projelerimi görebilirsiniz. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Diğer proje yazıları:</strong> <a href="https://blog.robo90.com/kategori/projeler/" target="_blank" rel="noreferrer noopener">https://blog.robo90.com/kategori/projeler/</a></p>
</blockquote>



<p class="wp-block-paragraph">Bir sonraki bloğumda ise ESP mesh Networking kavramını inceleyeceğim. </p>
<p><a rel="nofollow" href="https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/">ESP-NOW ile RGB LED Kontrolü 🎛️</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>📡 Yeni Başlayanlar için ESP-NOW</title>
		<link>https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/</link>
					<comments>https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Topal]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 12:38:27 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[IoT Projeleri]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7833</guid>

					<description><![CDATA[<p>Hiçbir grup cihazın birbirleriyle kablosuz olarak konuşmasını istediniz mi? Ancak belki de kulağa çok karmaşık geldi veya donanımın çok pahalı olacağını düşündünüz. Bu durumda ESP-NOW yardımımıza koşuyor. Yine de hayal ettiğimiz zaman bir veya birden fazla cihaz havaya 2.4GHz bandında veri basıyor ve sadece tutmasını istediğimiz cihazlar o verileri alıyor. Yine de karmaşık geliyorsa inanın [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/">📡 Yeni Başlayanlar için ESP-NOW</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hiçbir grup cihazın birbirleriyle kablosuz olarak konuşmasını istediniz mi? Ancak belki de kulağa çok karmaşık geldi veya donanımın çok pahalı olacağını düşündünüz. Bu durumda ESP-NOW yardımımıza koşuyor. Yine de hayal ettiğimiz zaman bir veya birden fazla cihaz havaya 2.4GHz bandında veri basıyor ve sadece tutmasını istediğimiz cihazlar o verileri alıyor. Yine de karmaşık geliyorsa inanın ESP-NOW protokolünü kullanmak düşündüğünüz kadar zor değil. Bu yazımızda ESP-NOW ’a başlamanın en basit yolunu inceleyeceğiz.</p>



<p class="wp-block-paragraph">Eğer bloğumdaki önceki yazıları okuyan birisiyseniz ESP32 ve ESP8266 kartlarına aşina olabilirsiniz. Yine de benimle bu yazımda tanışıyorsanız diğer blog yazılarımı da incelemenizi tavsiye ederim.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><a href="https://blog.robo90.com/kategori/projeler/" target="_blank" rel="noreferrer noopener">https://blog.robo90.com/kategori/projeler/</a></p>
</blockquote>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture.jpeg" alt="ESP32 geliştirme kartının fotoğrafı " class="wp-image-7834" style="width:450px;height:450px" width="450" height="450" title="&#x1f4e1; Yeni Başlayanlar için ESP-NOW 46" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture.jpeg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture-300x300.jpeg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture-150x150.jpeg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture-768x768.jpeg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-picture-450x450.jpeg 450w" sizes="(max-width: 450px) 100vw, 450px" /><figcaption class="wp-element-caption">ESP32 Geliştirme kartı</figcaption></figure>
</div>


<p class="wp-block-paragraph">ESP kartları gerek Wi-Fi modülü, gerek Bluetooth modülüne sahip olup ayrıca 32 bit işlemcileri sayesinde IOT projeleri ve haberleşme projeleri için süper ucuz ve çok kullanışlı kartlardır. Peki nedir bu ESP-NOW protokolü?</p>



<p class="wp-block-paragraph">ESP-NOW, bir çok ESP cihazının Wi-Fi kullanmadan birbirleriyle iletişim kurmaların sağlayan bir protokoldür. Bu kablosuz mouse cihazlarında kullandığımız 2.4GHz kablosuz bağlantısına benzer bir protokoldür. ESP-NOW’da tüm cihazlar birbirleriyle senkron bir şekilde de çalışabildikleri için bir kablosuz sensör ağı kurmak istiyorsanız muhteşem cihazlardır. Şimdilik bir cihazdan diğer cihaza gönderebileceğiniz verinin boyutu 250 Byte’tır. Yani bir ESP cihazından diğerine ses dosyası veya bir video akışı yapamazsınız. Ancak sensör okumak istiyorsanız veya küçük bir pakete sığacak bir veri göndermek istiyorsanız 250 byte oldukça yeterli. Tüm bu bilgileri anladığımıza göre şimdi ESP-NOW’u olabildiğince hızlı kullanmanızı sağlayacak adımlara geçelim.</p>



<h2 class="wp-block-heading">1. Adım: İhtiyaç Listesi</h2>



<p class="wp-block-paragraph">ESP-NOW protokolünü kullanmak istiyorsanız en az 2 adet ESP geliştirme cihazına ihtiyacınız var. Ben bu yazımda iki adet ESP32 kartını kullanacağım. Aşağıdaki linkten ESP32 veya ESP8266 kartlarına ulaşabilirsiniz.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>ESP32-Wroom-32 Wifi ve Bluetooth Geliştirme Kartı:</strong> <a href="https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti"></a><a href="https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti"></a><a href="https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti"></a><a href="https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti" target="_blank" rel="noreferrer noopener">https://www.robo90.com/esp32-wroom-32-wifi-ve-bluetooth-gelistirme-karti</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nodemcu V3 &#8211; ESP8266 Geliştirme Kartı &#8211; CH340G:</strong> <a href="https://www.robo90.com/nodemcu-v3-esp8266-gelistirme-karti-ch340g" target="_blank" rel="noreferrer noopener">https://www.robo90.com/nodemcu-v3-esp8266-gelistirme-karti-ch340g</a></p>
</blockquote>



<h2 class="wp-block-heading">2. Adım: Nasıl Kodlarız?</h2>



<p class="wp-block-paragraph">ESP32 kartını kullanabilmek için Arduino IDE uygulamasına doğru kütüphaneyi indirmemiz ve birkaç önemli işleme dikkat etmemiz gerekir. Bu yazımda ESP32 kartlarına nasıl kod yükleyebileceğimizden bahsetmeyeceğim. Eğer ESP kartlarına nasıl yazılım yükleneceğini merak ediyorsanız aşağıdaki blog yazımı inceleyebilirsiniz.</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-robo-90-blog wp-block-embed-robo-90-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="k6XuWklPg7"><a href="https://blog.robo90.com/esp32-ye-program-nasil-yazilir/"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bb.png" alt="🧑‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ESP32 Kullanımı &#8211; Esp32&#8217;ye Nasıl Kod Atılır?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;&#x1f9d1;&#x200d;&#x1f4bb; ESP32 Kullanımı &#8211; Esp32&#8217;ye Nasıl Kod Atılır?&#8221; &#8212; Robo90 - Blog" src="https://blog.robo90.com/esp32-ye-program-nasil-yazilir/embed/#?secret=8za1UnMZ2Z#?secret=k6XuWklPg7" data-secret="k6XuWklPg7" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">Bu yazımızda ESP32 ’ ye Arduino IDE kullanarak ESP32’ye nasıl yazılım yükleneceğini ve örnek bir kod olarak ESP32’ye blink kodunu yükleyeceğiz.</p>



<p class="wp-block-paragraph">Eğer ESP kartlarından birisini ilk defa kullanacaksanız yukarıdaki yazımdaki aşamaları sırasıyla inceleyip kartınızda basit bir blink programı çalıştırmanızı tavsiye ederim. Bu sayede kartınızı hızlı bir şekilde test edip yazılım yüklenebildiğini görmüş olursunuz.</p>



<h2 class="wp-block-heading">3. Adım: Yazılım Kısmı.</h2>



<p class="wp-block-paragraph">kodu incelerken kodun en ama en basite indirgenmiş halini teker teker açıklayıp hangi kodun ne işe yaradığından bahsedeceğim. Bu sayede ezbere bir sistem çalıştırmaktansa hangi kodun ne işe yaradığını biliyor olacağız. Bana sorarsanız bunu bilmek önemli. Çünkü her yeni bir proje yaptığımızda önceki bilgilerimizi kullanıp üstüne koyarak ilerliyor, hataları bu sayede görüp sorunları olabildiğince hızlı çözüyoruz. Şimdi gelin projenin kodlarını incelemeye başlayalım.</p>



<p class="wp-block-paragraph">Proje iki ayrı koddan oluşuyor olacak. Birisi Transmitter Device veya Master Device ( İleten cihaz veya Master Cihaz ), diğer cihaz ise Receiver device veya Slave Device ( Alıcı Cihaz veya Köle Cihaz ). Bu isimler karmaşık geliyorsa olaya sadece ileten ve dinleyen cihaz gözüyle bakabilirsiniz. Kod ESP-NOW protokolünün çalışması için minimum gereken koda sahiptir.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Daha fazla bilgiye Espressif API referans sayfasından ulaşabilirsiniz. Kodumuzu incelerken şu kod şu işlevi gerçekleştirir dediğimizde hepsi aşağıdaki sitede belgelenmiştir. Belgeyi incelediğimizde 18 adet işlev var gibi görünüyor ve gerçekten fazla değil.</p>



<p class="wp-block-paragraph"><a href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/network/esp_now.html" target="_blank" rel="noreferrer noopener nofollow">https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/network/esp_now.html</a></p>
</blockquote>



<h2 class="wp-block-heading">Verici Kodu</h2>



<pre class="wp-block-code"><code>#include &lt;esp_now.h&gt;
#include &lt;WiFi.h&gt;

//kanal belirliyoruz alıcı ve verici aynı kanalda olmalı 
#defie CHANNEL 1

esp_now_peer_info_t slave;</code></pre>



<p class="wp-block-paragraph">Kodumuzun başlangıcına bakacak olursak önce kütüphanelerimizi tanımlamışız. Daha sonrasında ise ESP cihazlarımızın konuşacakları kanalı “<em><strong> #defie CHANNEL 1</strong> </em>” kodu ile 1. kanala atıyorum. Aslında varsayılan olarak 1. kanal olarak tanımlanmıştır ancak biz bu kısımda kanalımızı belirleyeceğiz.</p>



<p class="wp-block-paragraph">Burada bir diğer dikkat etmemiz gereken kısım ise MAC adresidir. Eğer cihazınız verici ( Transmitter ) konumunda ise alıcı hakkında bazı bilgilere sahip olması gerekir. Özellikle bilmemiz gereken bilgi alıcının MAC adresidir. MAC adresi donanıma atanmış benzeri olmayan, her cihazın farklı olduğu benzersiz bir ağ adresidir. Bu bizim belirlediğimiz bir şey değil zaten donanımda olan bir şeydir. Bu MAC adresi vericiyle birlikte kaydedilir. Kodumuzdaki “ <em><strong>esp_now_peer_info_t</strong> </em>” alıcı cihazın MAC adresinin eşlenildiği kısımdır.     “ <em><strong>esp_now_peer_info_t</strong> </em>” veri türünde “ <em><strong>slave</strong></em> ” adlı bir değişken oluştururuz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="936" height="469" src="https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures.png" alt="Espressif firmasının ESP-NOW için hazırladığı dökümandan bir kesitin fotoğrafı." class="wp-image-7835" title="&#x1f4e1; Yeni Başlayanlar için ESP-NOW 47" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures.png 936w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures-300x150.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures-768x385.png 768w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures-150x75.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP-NOW-structures-450x225.png 450w" sizes="(max-width: 936px) 100vw, 936px" /><figcaption class="wp-element-caption">Fotoğraf 1.0</figcaption></figure>



<p class="wp-block-paragraph">Espressif firmasının belgelerini incelersek eğer aslında bu kodun bir Structures ( Yapı ) olduğunu da anlarız. ( <strong>Fotoğraf 1.0</strong> ) Ancak fotoğraftaki <strong>peer_addr</strong> alıcının MAC adresini bu yapıya kaydettiğimiz kısımdır. Kodun devamına bakacak olursak;</p>



<pre class="wp-block-code"><code>uint8_t data=0; 

void ()
{
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_register_send_cb(OnDataSent);
  ScanForSlave();
  esp_now_add_peer(&amp;slave);
}</code></pre>



<p class="wp-block-paragraph">Kodumuzun bu kısmında ise göndereceğimiz int formunda bir data değişkeni tanımlıyoruz. formatın int ( integer, sayısal ) formunda olması zorunlu değil. Sensör verilerini içerisinde tuttuğumuz bir dizi veya başka bir veri türü olabilir. Buradaki tek kıstas verinin 250 byte boyutundan düşük olması gerekmesi.</p>



<p class="wp-block-paragraph">Sonrasında ise “ <em><strong>Serial.begin(115200);</strong></em> ” kodu ile seri monitörümüzü kartımızda 115200 baudrate hızıyla haberleşebileceği şekilde ayarlıyoruz. ESP-NOW için gerekli değil ama bazı verileri bilgisayar ekranımızda görmek istiyoruz.</p>



<p class="wp-block-paragraph">Vericinin modunu “ <em><strong>Wifi.mode(WIFI_STA);</strong> </em>” kodu sayesinde istasyon moduna alıyoruz. Sonrasında ise ESP-NOW protokolünü başlatacak olan “ <em>esp_now_init(); </em>” fonksiyonunu çağırıyoruz.</p>



<p class="wp-block-paragraph">Sonrasında ise “ <em><strong>esp_now_register_send_cb(OnDataSent);</strong></em> ” fonksiyonu ile bir <em>Callback Function ( </em>Geri arama fonksiyonu<em> ) </em>başlatmamız ve ona bir isim vermemiz gerekiyor. Biz OnDataSent ismini verdik. Daha sonra OnDataSent fonksiyonunu ayrıca tanımlamamız ve ne iş yapacağını fonksiyonun içerisine yazmamız gerekir. Bu kısma sonradan tekrar değineceğiz. Şimdi Callback fonksiyonumuzu inceleyelim.</p>



<pre class="wp-block-code"><code>//CallBack fonksiyonu
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status ) {
  Serial.print("Datayı gönderdim-&gt;");
  Serial.println(data);
}</code></pre>



<p class="wp-block-paragraph">CallBack fonksiyonu oluşturduğumuzda 2 parametre gerekecek, bir EROR( hata ) durum kodu ve MAC adresi işaretçisi.</p>



<p class="wp-block-paragraph">Sonrasında önceki kod satırındaki “ <em><strong>ScanForSlave();</strong></em> ” fonksiyonunu anlamamız gerek. Bu fonksiyon açık ara koddaki en karmaşık fonksiyon. Şimdi fonksiyonu inceleyelim.</p>



<h3 class="wp-block-heading">ScanForSlave() Fonksiyonu</h3>



<pre class="wp-block-code"><code>void ScanForSlave() 
{
  int16_t scanResults = WiFi.scanNetworks(); 
  
    for (int i = 0; i &lt; scanResults; ++i) 
    {
      String SSID = WiFi.SSID(i);
      String BSSIDstr = WiFi.BSSIDstr(i);

      if (SSID.indexOf("RX") == 0) 
      {
        int mac&#91;6];
        if ( 6 == sscanf(BSSIDstr.c_str(), "%x:%x:%x:%x:%x:%x",  &amp;mac&#91;0], &amp;mac&#91;1], &amp;mac&#91;2], &amp;mac&#91;3], &amp;mac&#91;4], &amp;mac&#91;5] ) ) {
          for (int ii = 0; ii &lt; 6; ++ii ) {
            slave.peer_addr&#91;ii] = (uint8_t) mac&#91;ii];
          }
        }

        slave.channel = CHANNEL; 
        slave.encrypt = 0; 

        break;
      }
    }
}</code></pre>



<p class="wp-block-paragraph">Bu kodun çalışma mantığını derinlemesine incelemeyeceğiz ama temel olarak ne yaptığından bahsedeceğim. Yaptığı şey aslında WiFi ismi RX ile başlayan cihazları bulmak. Sonrasında onların MAC adreslerini almak. İstersek sabit kullanacağımız cihazların MAC adreslerine ulaşıp kodumuzun içerisine direk de yazabiliriz. Ancak bu yolla yeni bir cihaz eklemek istediğimizde sadece WiFi ismini RX ile başlayan bir isim koymamız yeterli. Master cihaz çevreyi tarayıp otomatik o cihazın MAC adresini alacaktır.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h3 class="wp-block-heading">Alt Yazı</h3>



<p class="wp-block-paragraph">Eğer bu tarama işlemindense direk slave ( alıcı ) cihazımızın MAC adresini kodumuzun içine sabitlemek istiyorsak tek yapmamız gereken şey ” <em><strong>WiFi.macAddress();</strong> </em>“ kodunu alıcı cihazımızda çalıştırıp sonucunu seri monitöre yazdırmaktır. Bu sayede alıcı cihazımızın MAC adresini elde etmiş oluruz. Sonrasında o adresi                                             “ <em><strong>esp_now_peer_info_t slave;</strong></em> ” kodunda <strong>slave </strong>değişkenine kaydedip yazarsak verici cihazımıza alıcı cihazın MAC adresini kaydetmiş oluruz.</p>
</blockquote>



<p class="wp-block-paragraph">Sonrasında “ <em><strong>esp_now_add_peer(&amp;slave);</strong> </em>” koduna bakacak olursak burada da elde edip slave değişkenine kaydettiğimiz tüm alıcı bilgilerini bu komut ile ESP ağımızın içerisine entegre ediyoruz.</p>



<pre class="wp-block-code"><code>void loop(){
  esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  data++;
  delay(1000);
}</code></pre>



<p class="wp-block-paragraph">“ <em><strong>esp_now_send</strong> </em>” fonksiyonu gerçekten göndermek istediğimiz verileri alıcıya gönderir. Bu yüzden ona       “ <em>slave.peer_addr</em> ” kodu ile MAC adresini ve “ <em><strong>&amp;data, sizeof(data)</strong></em> ” kodu ile de göndereceğimiz datayı ve datanın boyutunu vermemiz gerekir. Sonrasında “ <em><strong>data++;</strong></em> ” komutu ile data verisini “ <em><strong>delay( 1000 );</strong></em> “ komutu ile bir bir arttıracağız. </p>



<h3 class="wp-block-heading">Verici Kodunun Tamamı </h3>



<pre class="wp-block-code"><code>#include &lt;esp_now.h&gt;
#include &lt;WiFi.h&gt;

//kanal belirliyoruz alıcı ve verici aynı kanalda olmalı 
#define CHANNEL 1

//Alıcının MAC adresini esp_now_peer_info yapısına tanıttığımız kod
esp_now_peer_info_t slave;
//göndermek istediğimiz veri
uint8_t data=0; 

void setup ()
{
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_register_send_cb(OnDataSent);
  ScanForSlave();
  esp_now_add_peer(&amp;slave);
}

void loop(){
  esp_now_send(slave.peer_addr, &amp;data, sizeof(data));
  data++;
  delay(1000);
}


//CallBack fonksiyonu
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status ) {
  Serial.print("Datayı gönderdim-&gt;");
  Serial.println(data);

}
void ScanForSlave() 
{
  int16_t scanResults = WiFi.scanNetworks(); // Scan only on one channel
  
    for (int i = 0; i &lt; scanResults; ++i) 
    {
      // Print SSID and RSSI for each device found
      String SSID = WiFi.SSID(i);
      String BSSIDstr = WiFi.BSSIDstr(i);

      // Check if the current device starts with `Slave`
      if (SSID.indexOf("RX") == 0) 
      {
        int mac&#91;6];
        if ( 6 == sscanf(BSSIDstr.c_str(), "%x:%x:%x:%x:%x:%x",  &amp;mac&#91;0], &amp;mac&#91;1], &amp;mac&#91;2], &amp;mac&#91;3], &amp;mac&#91;4], &amp;mac&#91;5] ) ) {
          for (int ii = 0; ii &lt; 6; ++ii ) {
            slave.peer_addr&#91;ii] = (uint8_t) mac&#91;ii];
          }
        }

        slave.channel = CHANNEL; // pick a channel
        slave.encrypt = 0; // no encryption

        break;
      }
    }
}</code></pre>



<p class="wp-block-paragraph">Evet. Master kodumuzun sonuna geldik. Çok şey oluyormuş gibi duruyor ama gördüğünüz üzere anlaşılmayacak bir kod değil. Şimdi alıcı kodunu inceleye başlayalım.</p>



<h2 class="wp-block-heading">Alıcı Kodu</h2>



<h3 class="wp-block-heading">Alıcı kodunun tamamı</h3>



<pre class="wp-block-code"><code>#include &lt;esp_now.h&gt;
#include &lt;WiFi.h&gt;

#define CHANNEL 1 


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_AP);
  WiFi.softAP("RX_1","RX_1_Password",CHANNEL, 0);

  esp_now_init();
  esp_now_register_recv_cb(OnDataRecv);

}

void loop() {

}

void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len){
  Serial.print("Bir veri aldım-&gt;");
  Serial.println(*data);
}</code></pre>



<p class="wp-block-paragraph">İşte alıcı kodumuz. Ne kadar kısa değil mi? Hepsi bu kadar. Kodumuzun başlangıcında tıpkı vericideki gibi sonrasında alıcımızı vericimizdeki gibi “ <em><strong>#define CHANNEL 1</strong></em> ” kodu ile aynı kanada ayarlıyoruz.</p>



<p class="wp-block-paragraph">Sonrasında Setup fonksiyonundaki “ <em><strong>WiFi.mode(WIFI_AP);</strong> </em>” fonksiyonu ile alıcımızı AP moduna alıyoruz.</p>



<p class="wp-block-paragraph">Sonrasında “ <em><strong>WiFi.softAP(&#8220;RX_1&#8243;,&#8221;RX_1_Password&#8221;,CHANNEL 0);</strong></em> ” kodu ile AP modunu yapılandırıyoruz. Kodumuzun içerisindeki <em>&#8220;RX_1&#8221; </em>kısmını vericimizin arayacağı bir şeye ayarlamamız gerekiyor. Hatırlarsanız vericimizdeki “ <em><strong>ScanForSlave()</strong> </em>” kodu sayesinde alıcıların MAC adresini almadan sadece WiFi isimlerinin ilk karakterleri ile alıcılarımızın MAC adreslerini elde edebiliyorduk. Verici baş harfleri RX olan isimleri arayacak. Biz de alıcımızın ismini RX_1 koyduk. Bu sayede verici alıcıyı kolay bir şekilde bulabiliyor.</p>



<p class="wp-block-paragraph">Sonrasında ise “ <em><strong>esp_now_init();</strong></em> ” kodu ile ESP-NOW protokolünü başlatıyoruz.</p>



<p class="wp-block-paragraph">Sonrasında ise “ <em><strong>esp_now_register_recv_cb(OnDataRecv)</strong> </em>” fonksiyonu ile bir Receive Callback ( alıcı geri arama ) fonksiyonu başlatıyoruz. Bu kod alıcı her vericiden veri aldığında çalışacaktır. Bu yüzden <strong>OnDataReceive </strong>fonksiyonuna bir göz atalım.</p>



<pre class="wp-block-code"><code>void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len){
  Serial.print("Bir veri aldım-&gt;")
  Serial.print(*data);
}</code></pre>



<p class="wp-block-paragraph"><strong>OnDataRecv </strong>fonksiyonuna baktığımızda üç parametre görmekteyiz. İlki “ <strong><em>const uint8_t*mac_addr</em> </strong>” kodu. Bu kod sayesinde fonksiyona alıcımızın MAC adresini tanımlıyoruz. Sonrasında bir data değişkeni tanımlayıp içerisine gelen verilerimizi yazdırıyoruz.</p>



<p class="wp-block-paragraph">Evet, Kod kısmını bitirdik. Şimdi ise test edelim.</p>



<h2 class="wp-block-heading">4. Test Kısmı</h2>



<p class="wp-block-paragraph">Bir cihazımızı alıcı, diğer cihazımızı verici olarak seçiyoruz. Daha sonrasında yazdığımız alıcı kodunu seçtiğimiz alıcı cihazına, verici kodunu ise seçtiğimiz verici cihazına yüklüyoruz.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-1024x1024.jpeg" alt="ESP32 kartımıza bilgisayar üzerinden kod yüklediğimiz anın fotoğrafı " class="wp-image-7836" title="&#x1f4e1; Yeni Başlayanlar için ESP-NOW 48" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-1024x1024.jpeg 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-300x300.jpeg 300w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-150x150.jpeg 150w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-768x768.jpeg 768w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-1536x1536.jpeg 1536w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-450x450.jpeg 450w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code-1200x1200.jpeg 1200w, https://blog.robo90.com/wp-content/uploads/2023/08/ESP32-uploading-code.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Fotoğraf 1.1</figcaption></figure>



<p class="wp-block-paragraph">Daha sonra alıcı kodunu ise alıcı cihaza yüklüyoruz. ( <strong>Fotoğraf 1.1</strong> )</p>



<p class="wp-block-paragraph">Sonrasında iki ESP32 kartına da Reset attıktan sonra ayrı Arduino IDE programlarında kartları seri monitöre bağlıyoruz. ( <strong>Fotoğraf 1.3</strong> )</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/08/send-take-1024x554.png" alt="Bilgisayar ekranında iki adet Arduino IDE programına ayrı ayrı bağlı alıcı ve vericinin seri monitördeki çıktısı ve haberleşmeleri." class="wp-image-7837" style="width:921px;height:497px" width="921" height="497" title="&#x1f4e1; Yeni Başlayanlar için ESP-NOW 49" srcset="https://blog.robo90.com/wp-content/uploads/2023/08/send-take-1024x554.png 1024w, https://blog.robo90.com/wp-content/uploads/2023/08/send-take-300x162.png 300w, https://blog.robo90.com/wp-content/uploads/2023/08/send-take-150x81.png 150w, https://blog.robo90.com/wp-content/uploads/2023/08/send-take-450x244.png 450w" sizes="(max-width: 921px) 100vw, 921px" /><figcaption class="wp-element-caption">Fotoğraf 1.3</figcaption></figure>



<p class="wp-block-paragraph">Ve evet ! Gördüğünüz gibi verici cihazımız saniyede bir data verisini gönderirken alıcı cihazımız ise o veriyi alıyor. Bugünkü yazımızda ESP-NOW protokolünü inceledik ve kullanabileceğimiz minimum gereklilikteki kodları kullanarak basitçe ESP-NOW arayüzünü inceledik. Bir sonraki yazımızda bu kodumuzu geliştirerek basit bir haberleşme projesi gerçekleştireceğiz. Aşağıdaki linkten o yazıma ulaşabilirsiniz.</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-robo-90-blog wp-block-embed-robo-90-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="OGTnUHXEjr"><a href="https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/">ESP-NOW ile RGB LED Kontrolü <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39b.png" alt="🎛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;ESP-NOW ile RGB LED Kontrolü &#x1f39b;&#8221; &#8212; Robo90 - Blog" src="https://blog.robo90.com/esp-now-ile-rgb-led-kontrolu/embed/#?secret=2b9qiGKHnN#?secret=OGTnUHXEjr" data-secret="OGTnUHXEjr" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p><a rel="nofollow" href="https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/">📡 Yeni Başlayanlar için ESP-NOW</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/yeni-baslayanlar-icin-esp-now/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Dengede Duramayan Dijital Top Nasıl Yapılır? ⚖️</title>
		<link>https://blog.robo90.com/dengede-duramayan-dijital-top-nasil-yapilir/</link>
					<comments>https://blog.robo90.com/dengede-duramayan-dijital-top-nasil-yapilir/#respond</comments>
		
		<dc:creator><![CDATA[Mustafa Topal]]></dc:creator>
		<pubDate>Mon, 31 Jul 2023 13:33:21 +0000</pubDate>
				<category><![CDATA[Arduino Projeleri]]></category>
		<category><![CDATA[Editor's Choice]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Latest Posts]]></category>
		<guid isPermaLink="false">https://blog.robo90.com/?p=7269</guid>

					<description><![CDATA[<p>İnternette hemen hemen hepimiz bir tablanın üstüne bir top bırakıldığında neresinden bırakılırsa bırakılsın motorları sayesinde hemen topu merkezine alıp dengede durmasını sağlayan top dengede tutan robot projelerine denk gelmişizdir. İzlemesi son derece keyifli ve kafamızda hep “ Acaba nasıl üretiliyor, ben de yapabilir miyim ki ? ” sorularını getiriyor. Sizin de kafanıza bu tarz sorular [...]</p>
<p><a rel="nofollow" href="https://blog.robo90.com/dengede-duramayan-dijital-top-nasil-yapilir/">Dengede Duramayan Dijital Top Nasıl Yapılır? ⚖️</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image is-style-default">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1459" height="760" src="https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz.jpg" alt="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; - Robo90 - Blog 25" class="wp-image-7271" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 50" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz.jpg 1459w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-300x156.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-1024x533.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-768x400.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-150x78.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-450x234.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/07/top-dengeleyen-cihaz-1200x625.jpg 1200w" sizes="(max-width: 1459px) 100vw, 1459px" /><figcaption class="wp-element-caption">Dengede duramayan top. Photo by <a href="https://www.youtube.com/@acrome_robotics" target="_blank" rel="noreferrer noopener nofollow">ACROME</a></figcaption></figure>
</div>


<p class="wp-block-paragraph">İnternette hemen hemen hepimiz bir tablanın üstüne bir top bırakıldığında neresinden bırakılırsa bırakılsın motorları sayesinde hemen topu merkezine alıp dengede durmasını sağlayan top dengede tutan robot projelerine denk gelmişizdir. İzlemesi son derece keyifli ve kafamızda hep “ Acaba nasıl üretiliyor, ben de yapabilir miyim ki ? ” sorularını getiriyor. Sizin de kafanıza bu tarz sorular geliyorsa, gerçek toplar ve gerçek sistemler kadar olmasa da dijital top nasıl dengede tutabileceğinizi merak ediyor ve çevrenizi etkilemek istiyorsanız gelin projemizi yapmaya başlayalım.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="571" src="https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--1024x571.jpg" alt="Arduino Uno&#039;ya bağlı Dot Matrix modülü ve MPU-6050 modülü." class="wp-image-7272" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 51" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--1024x571.jpg 1024w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--300x167.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--768x429.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--150x84.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--450x251.jpg 450w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top--1200x670.jpg 1200w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-.jpg 1360w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Fotoğraftan da anlaşılabileceği gibi ne kadar basit bir sistem değil mi ? Proje bir adet eksen sensörü sayesinde hareketi algılayıp 8&#215;8 Dot Matrix Display ekranında hareketin tam tersi yönde dijital top hareket etmesini sağlıyor. Bu sayede dijital top sanki dijital bir ekranda dengede kalmaya çalışıyor.</p>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-test.jpg" alt="MPU-6050 modülünü eğince Dot Matrix modülündeki top da tam tersi yönde hareket ediyor." class="wp-image-7273" style="width:349px;height:349px" width="349" height="349" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 52" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-test.jpg 661w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-test-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-test-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/Dengede-duramayan-dijital-top-test-450x450.jpg 450w" sizes="(max-width: 349px) 100vw, 349px" /></figure>
</div>


<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h3 class="wp-block-heading">Ne Kullanmam Gerekiyor ki ?</h3>



<p class="wp-block-paragraph">Projemiz için ihtiyacımız olan tüm malzemelerin listesi ;</p>



<ul class="wp-block-list">
<li><strong><a href="https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli" target="_blank" rel="noreferrer noopener">Arduino Uno</a>:</strong> <a href="https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli" target="_blank" rel="noreferrer noopener">https://www.robo90.com/arduino-uno-r3-smd-klonch340-cipli-usb-kablo-hediyeli</a></li>



<li><strong><a href="https://www.robo90.com/max7219-8x8-dot-matrix-display-modulu-kirmizi" target="_blank" rel="noreferrer noopener">Max7219 8&#215;8 Dot Matrix Display Modülü &#8211; Kırmızı</a>:</strong> <a href="https://www.robo90.com/max7219-8x8-dot-matrix-display-modulu-kirmizi" target="_blank" rel="noreferrer noopener">https://www.robo90.com/max7219-8&#215;8-dot-matrix-display-modulu-kirmizi</a></li>



<li><strong><a href="https://www.robo90.com/mpu6050-6-eksen-ivme-ve-gyro-sensoru-gy-521" target="_blank" rel="noreferrer noopener">MPU6050 6 Eksen İvme ve Gyro Sensörü</a>:</strong> <a href="https://www.robo90.com/mpu6050-6-eksen-ivme-ve-gyro-sensoru-gy-521" target="_blank" rel="noreferrer noopener">https://www.robo90.com/mpu6050-6-eksen-ivme-ve-gyro-sensoru-gy-521</a></li>



<li><a href="https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyu" target="_blank" rel="noreferrer noopener"><strong>40lı Ayrılabilen Dişi-Erkek Jumper Kablo:</strong></a> <a href="https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyu">https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyu</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">Donanım kısmı</h2>



<p class="wp-block-paragraph">Önce 8&#215;8 Max7219 8&#215;8 Dot Matrix Display Modülümüzü Arduino Uno ile bağlantılarını yaparak başlayalım. ( <strong>Fotoğraf 1.0</strong> )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix.jpg" alt="Dot Matrix Display Modülü" class="wp-image-7274" style="width:345px;height:344px" width="345" height="344" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 53" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-450x449.jpg 450w" sizes="(max-width: 345px) 100vw, 345px" /><figcaption class="wp-element-caption">Fotoğraf 1.0</figcaption></figure>
</div>


<p class="wp-block-paragraph">Göründüğü gibi 8&#215;8 matrix modülümüzün sırasıyla VCC, GND, DIN, CS, CLK pinleri bulunmakta. Biz bu projemizde bu pinlerimizi Arduinonun şu pinlerine bağladık;</p>



<ul class="wp-block-list">
<li>VCC = Arduinonun +5V pini</li>



<li>GND = Arduinonun GND pini</li>



<li>DIN = Arduinonun 12. pini</li>



<li>CS = Arduinonun 11. pini</li>



<li>CLK = Arduinonun 10. pini</li>
</ul>



<p class="wp-block-paragraph">Bu bağlantıları yaptıktan sonra MPU6050 6 Eksen İvme ve Gyro Sensörünü nasıl bağlayacağımıza geçelim. ( <strong>Fotoğraf 1.1</strong> ) </p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/MPU-6050.jpg" alt="MPU-6050 modülü" class="wp-image-7275" style="width:354px;height:354px" width="354" height="354" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 54" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/MPU-6050.jpg 706w, https://blog.robo90.com/wp-content/uploads/2023/07/MPU-6050-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/MPU-6050-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/MPU-6050-450x450.jpg 450w" sizes="(max-width: 354px) 100vw, 354px" /><figcaption class="wp-element-caption">Fotoğraf 1.1</figcaption></figure>
</div>


<p class="wp-block-paragraph">Göründüğü gibi MPU6050 6 Eksen İvme ve Gyro Sensörünün sırasıyla VCC, GND, SCL, SDA, XDA, XCL, AD0 ve INT pinleri bulunmakta. Biz projemiz için ilk 4 pin olan VCC, GND, SCL ve SDA pinlerini kullanacağız. Bu pinleri sırasıyla Arduinonun şu pinlerine bağladık;</p>



<ul class="wp-block-list">
<li>VCC = Arduinonun +5V pini</li>



<li>GND = Arduinonun GND pini</li>



<li>SCL = Arduinonun A5 pinine</li>



<li>SDA = Arduinonun A4 pinine</li>
</ul>



<p class="wp-block-paragraph">Gerekli olan tüm bağlantıları sırasıyla yaptıktan sonra şimdi projenin çalışma mantığına bakalım.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Peki Nasıl Çalışıyor ?</h2>



<p class="wp-block-paragraph">Yazımızın başlarında da bahsettiğimiz gibi aslında Proje bir adet eksen sensörü sayesinde hareketi algılayıp 8&#215;8 Dot Matrix Display ekranında hareketin tam tersi yönde dijital top hareket etmesini sağlıyor. Bu sayede dijital top sanki dijital bir ekranda dengede kalmaya çalışıyormuş gibi görünüyor. Eksen sensörünün sadece X ve Y ekseni için ürettiği verileri kullanıyoruz. Sensörümüzü X ekseni için her bir hareketinde +-10, Y ekseni için de +-10 değerlerini üretecek şekilde ayarlıyoruz. ( İleride kaynak kodu incelerken bu kısıma değineceğiz ) ( <strong>Fotoğraf 1.2</strong> )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/mpu-6050-eksen-.jpg" alt="MPU-6050 modülünün x ve y eksenlerine bölünmüş hali, x ve y ekseninde +-10 değer döndürüyor." class="wp-image-7278" style="width:475px;height:471px" width="475" height="471" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 55" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/mpu-6050-eksen-.jpg 769w, https://blog.robo90.com/wp-content/uploads/2023/07/mpu-6050-eksen--300x298.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/mpu-6050-eksen--150x149.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/mpu-6050-eksen--450x446.jpg 450w" sizes="(max-width: 475px) 100vw, 475px" /><figcaption class="wp-element-caption">Fotoğraf 1.2</figcaption></figure>
</div>


<p class="wp-block-paragraph">Göründüğü gibi eksen sensörü her yönde hareket ettirdiğimizde eğime bağlı olarak konumu değişiyor.        ( <strong>Fotoğraf 1.3</strong> )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/4-lu-mpu6050-test-.jpg" alt="MPU-6050&#039;yi ü her yönde hareket ettirdiğimizde eğime bağlı olarak dijital topun konumu değişiyor.  " class="wp-image-7279" style="width:481px;height:481px" width="481" height="481" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 56" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/4-lu-mpu6050-test-.jpg 715w, https://blog.robo90.com/wp-content/uploads/2023/07/4-lu-mpu6050-test--300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/4-lu-mpu6050-test--150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/4-lu-mpu6050-test--450x450.jpg 450w" sizes="(max-width: 481px) 100vw, 481px" /><figcaption class="wp-element-caption">Fotoğraf 1.3</figcaption></figure>
</div>


<p class="wp-block-paragraph">Şimdi ise 8&#215;8 Dot Matrix’imizi aşağıdaki fotoğrafta göründüğü gibi dört parçaya bölelim. ( Fotoğraf 1.4 )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen-.jpg" alt="8x8 Dot Matrix’imizi  dört parçaya bölelim. Sonrasında Dot matrix modülümüzü koordinat eksenindeki ızgaralara bölelim" class="wp-image-7280" style="width:584px;height:292px" width="584" height="292" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 57" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen-.jpg 973w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen--300x150.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen--768x384.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen--150x75.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/8x8-Dot-Matrix-Eksen--450x225.jpg 450w" sizes="(max-width: 584px) 100vw, 584px" /><figcaption class="wp-element-caption">Fotoğraf 1.4</figcaption></figure>
</div>


<p class="wp-block-paragraph">Daha sonra bu bölgelere sırasıyla 1, 2, 3, 4 diyelim. Hatırlarsanız eksen sensörü x ve y ekseni için +-10 arasında değerler üretiyordu. Bu yüzden ızgaranın eksenleri kestiği her bir noktayı sayısal parçalara ayırabiliriz ( -5, -2.5, -0, 2.5, 5 gibi ) Bu sayede her bir 64 farklı LED’in konumunu bulabiliriz. ( <strong>Fotoğraf 1.5</strong> )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/xy-ekseni-parcalama-.jpg" alt="Koordinat eksenini bölgelere ayıralım ve ızgaraların kestiği her bir noktaya +-10 arasında değerler verelim. Dört parçaya böldüğü için sırasıyla 0, 2,5, 5, 7,5 ve 10 değerlerini verdik." class="wp-image-7281" style="width:476px;height:478px" width="476" height="478" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 58" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/xy-ekseni-parcalama-.jpg 768w, https://blog.robo90.com/wp-content/uploads/2023/07/xy-ekseni-parcalama--300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/xy-ekseni-parcalama--150x151.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/xy-ekseni-parcalama--450x452.jpg 450w" sizes="(max-width: 476px) 100vw, 476px" /><figcaption class="wp-element-caption">Fotoğraf 1.5</figcaption></figure>
</div>


<p class="wp-block-paragraph">Yukarıdaki resme bakarak her bir LED’in konumunu ve bölgesini rahatlıkla söyleyebiliriz. Mesela 1. satır 2. sütundaki LED’in konumu için -7.5&lt;x&lt;-5 ve 7.5&lt;y&lt;10 , 2. bölgede diyebiliriz.</p>



<p class="wp-block-paragraph">Hatırlarsanız eksen sensörümüz x ve y ekseni için +- 10 arasında değerler üretiyordu. Yani ben sensörüme doğru eğimi verirsem -7.5&lt;x&lt;-5 ve 7.5&lt;y&lt;10 arasında bir değeri tutturabilirim ve eğer bir if komutu yazıp -7.5&lt;x&lt;-5 ve 7.5&lt;y&lt;10 arasında 1. satır 2. sütundaki LED’ i aç dersem doğru eğimde 8&#215;8 Dot Matrix modülünde o LED açılacaktır.</p>



<p class="wp-block-paragraph">Peki ya eksen sensörü -7.5&lt;x&lt;-5 ve 7.5&lt;y&lt;10 arasındaki değerleri üretirken 1. satır 2. sütunun başlangıç noktası 0’ a göre aynalarsam ne olur ? Konum 8. satır ve 7. sütun olur. Peki o konumdaki LED’in yanmasını istersem ? İşte bu ! Benim eksen sensörümün tam tersi konumunda topumuz hareket ediyor. Asla düşürülemez dijital bir top ! </p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/image-1.png" alt="MPU-6050&#039;yi eğince top tam tersi istikamette Dengede durmaya çalışıyor" class="wp-image-7282" style="width:436px;height:435px" width="436" height="435" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 59" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/image-1.png 768w, https://blog.robo90.com/wp-content/uploads/2023/07/image-1-300x300.png 300w, https://blog.robo90.com/wp-content/uploads/2023/07/image-1-150x150.png 150w, https://blog.robo90.com/wp-content/uploads/2023/07/image-1-450x449.png 450w" sizes="(max-width: 436px) 100vw, 436px" /><figcaption class="wp-element-caption">Fotoğraf 1.6</figcaption></figure>
</div>


<p class="wp-block-paragraph">Tabi ki de düşürebiliriz. Topumuzun ekrandan düşmemesi için bir çerçeve yaparsak eğer if-else sayımız 32’den 25’e düşer. Bu sayede 25 farklı ihtimali kodlarsak Ne olursa olsun düşüremeyeceğimiz bir dijital top yapmış oluruz. ( Fotoğraf 1.6 )</p>



<h2 class="wp-block-heading">Projenin Yazılımı Nasıl Çalışır ?</h2>



<p class="wp-block-paragraph">Gerekli olan kütüphaneleri programımızın içine yazıyoruz.</p>



<pre class="wp-block-code"><code>#include "LedControl.h"
#include &lt;Adafruit_MPU6050.h&gt;
#include &lt;Adafruit_Sensor.h&gt;
#include &lt;Wire.h&gt;</code></pre>



<p class="wp-block-paragraph">Setup kısmında ise hem 8&#215;8 Dot Matrix ekranı hem de MPU-6050 sensörü için gerekli olan kurulum kodlarını yazıyoruz.</p>



<pre class="wp-block-code"><code>void setup() {
  Serial.begin(115200);
  while (!Serial)
    delay(10); // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("Adafruit MPU6050 test!");

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    Serial.println("5 Hz");
    break;
  }

  Serial.println("");
  delay(100);


  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}</code></pre>



<p class="wp-block-paragraph">Sonrasında ekranda topun tüm konumlarının LCD için kütüphanesini yazıyoruz.</p>



<pre class="wp-block-code"><code>void middle() {
  /* here is the data for the characters */
  
  byte ball&#91;8]={B11111111,B10000001,B10000001,B10011001,B10011001,B10000001,B10000001,B11111111};
  /* now display them one by one with a small delay */
  
  lc.setRow(0,0,ball&#91;0]);
  lc.setRow(0,1,ball&#91;1]);
  lc.setRow(0,2,ball&#91;2]);
  lc.setRow(0,3,ball&#91;3]);
  lc.setRow(0,4,ball&#91;4]);
  lc.setRow(0,5,ball&#91;5]);
  lc.setRow(0,6,ball&#91;6]);
  lc.setRow(0,7,ball&#91;7]);
  lc.setRow(0,8,ball&#91;8]);
  
  lc.setRow(0,0,0);
  lc.setRow(0,1,0);
  lc.setRow(0,2,0);
  lc.setRow(0,3,0);
  lc.setRow(0,4,0);
  lc.setRow(0,5,0);
  lc.setRow(0,6,0);
  lc.setRow(0,7,0);
  lc.setRow(0,8,0);
  
}</code></pre>



<p class="wp-block-paragraph">Bu sadece dijital top orta kısımda olduğu ve çevçevenin kodlandığı durum. ( <strong>Fotoğraf 1.7</strong> )</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.robo90.com/wp-content/uploads/2023/07/top-ortadayken-1-1.jpg" alt="Dijital top Dot Matrix modülünün tam ortasındayken Dengede durmaya çalışıyor." class="wp-image-7528" style="width:467px;height:466px" width="467" height="466" title="Dengede Duramayan Dijital Top Nasıl Yapılır? &#x2696; 60" srcset="https://blog.robo90.com/wp-content/uploads/2023/07/top-ortadayken-1-1.jpg 765w, https://blog.robo90.com/wp-content/uploads/2023/07/top-ortadayken-1-1-300x300.jpg 300w, https://blog.robo90.com/wp-content/uploads/2023/07/top-ortadayken-1-1-150x150.jpg 150w, https://blog.robo90.com/wp-content/uploads/2023/07/top-ortadayken-1-1-450x449.jpg 450w" sizes="(max-width: 467px) 100vw, 467px" /><figcaption class="wp-element-caption">Fotoğraf 1.7</figcaption></figure>
</div>


<p class="wp-block-paragraph">Sonrasında ana void loop fonksiyonunda 25 farklı durum için 25 tane if kodluyoruz. Bu İf-Else yapılarının tamamını kodun tamamında bulabilirsiniz.</p>



<pre class="wp-block-code"><code>//y ekseni if-else
  if ( a.acceleration.x&lt;=2.5 &amp;&amp; a.acceleration.x&gt;=-2.5 &amp;&amp; a.acceleration.y&lt;=5 &amp;&amp; a.acceleration.y&gt;=2.5 ){
    middletop1();
  }
  if ( a.acceleration.x&lt;=2.5 &amp;&amp; a.acceleration.x&gt;=-2.5 &amp;&amp; a.acceleration.y&lt;=7.5 &amp;&amp; a.acceleration.y&gt;=5 ){
    middletop2();
  }
  
  if ( a.acceleration.x&lt;=2.5 &amp;&amp; a.acceleration.x&gt;=-2.5 &amp;&amp; a.acceleration.y&lt;=0 &amp;&amp; a.acceleration.y&gt;=-2.5 ){
    middlebottom1();
  }
  if ( a.acceleration.x&lt;=2.5 &amp;&amp; a.acceleration.x&gt;=-2.5 &amp;&amp; a.acceleration.y&lt;=-2.5 &amp;&amp; a.acceleration.y&gt;=-5 ){
    middlebottom2();
  }
  
  //y ekseni if bitiş </code></pre>



<h2 class="wp-block-heading">Kodun tamamı ;</h2>



<div id="wp-block-themeisle-blocks-accordion-f13e5e45" class="wp-block-themeisle-blocks-accordion exclusive">

<details class="wp-block-themeisle-blocks-accordion-item"><summary class="wp-block-themeisle-blocks-accordion-item__title"><div>Kaynak Kod</div></summary><div class="wp-block-themeisle-blocks-accordion-item__content">

<p class="wp-block-paragraph">//We always have to include the library</p>


<p class="wp-block-paragraph">#include &#8220;LedControl.h&#8221;</p>


<p class="wp-block-paragraph">#include &lt;Adafruit_MPU6050.h&gt;</p>


<p class="wp-block-paragraph">#include &lt;Adafruit_Sensor.h&gt;</p>


<p class="wp-block-paragraph">#include &lt;Wire.h&gt;</p>


<p class="wp-block-paragraph">Adafruit_MPU6050 mpu;</p>


<p class="wp-block-paragraph">/*</p>


<p class="wp-block-paragraph">&nbsp;Now we need a LedControl to work with.</p>


<p class="wp-block-paragraph">&nbsp;***** These pin numbers will probably not work with your hardware *****</p>


<p class="wp-block-paragraph">&nbsp;pin 12 is connected to the DataIn</p>


<p class="wp-block-paragraph">&nbsp;pin 11 is connected to the CLK</p>


<p class="wp-block-paragraph">&nbsp;pin 10 is connected to LOAD</p>


<p class="wp-block-paragraph">&nbsp;We have only a single MAX72XX.</p>


<p class="wp-block-paragraph">&nbsp;*/</p>


<p class="wp-block-paragraph">LedControl lc=LedControl(12,10,11,1 );</p>


<p class="wp-block-paragraph">/* we always wait a bit between updates of the display */</p>


<p class="wp-block-paragraph">unsigned long delaytime=100;</p>


<p class="wp-block-paragraph">void setup() {</p>


<p class="wp-block-paragraph">&nbsp; Serial.begin(115200);</p>


<p class="wp-block-paragraph">&nbsp; while (!Serial)</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; delay(10); // will pause Zero, Leonardo, etc until serial console opens</p>


<p class="wp-block-paragraph">&nbsp; Serial.println(&#8220;Adafruit MPU6050 test!&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; // Try to initialize!</p>


<p class="wp-block-paragraph">&nbsp; if (!mpu.begin()) {</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;Failed to find MPU6050 chip&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; while (1) {</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; &nbsp; delay(10);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; Serial.println(&#8220;MPU6050 Found!&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; mpu.setAccelerometerRange(MPU6050_RANGE_8_G);</p>


<p class="wp-block-paragraph">&nbsp; Serial.print(&#8220;Accelerometer range set to: &#8220;);</p>


<p class="wp-block-paragraph">&nbsp; switch (mpu.getAccelerometerRange()) {</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_2_G:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+-2G&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_4_G:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+-4G&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_8_G:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+-8G&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_16_G:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+-16G&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; mpu.setGyroRange(MPU6050_RANGE_500_DEG);</p>


<p class="wp-block-paragraph">&nbsp; Serial.print(&#8220;Gyro range set to: &#8220;);</p>


<p class="wp-block-paragraph">&nbsp; switch (mpu.getGyroRange()) {</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_250_DEG:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+- 250 deg/s&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_500_DEG:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+- 500 deg/s&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_1000_DEG:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+- 1000 deg/s&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_RANGE_2000_DEG:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;+- 2000 deg/s&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);</p>


<p class="wp-block-paragraph">&nbsp; Serial.print(&#8220;Filter bandwidth set to: &#8220;);</p>


<p class="wp-block-paragraph">&nbsp; switch (mpu.getFilterBandwidth()) {</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_260_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;260 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_184_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;184 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_94_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;94 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_44_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;44 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_21_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;21 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_10_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;10 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; case MPU6050_BAND_5_HZ:</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; Serial.println(&#8220;5 Hz&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; break;</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; Serial.println(&#8220;&#8221;);</p>


<p class="wp-block-paragraph">&nbsp; delay(100);</p>


<p class="wp-block-paragraph">&nbsp; /*</p>


<p class="wp-block-paragraph">&nbsp; &nbsp;The MAX72XX is in power-saving mode on startup,</p>


<p class="wp-block-paragraph">&nbsp; &nbsp;we have to do a wakeup call</p>


<p class="wp-block-paragraph">&nbsp; &nbsp;*/</p>


<p class="wp-block-paragraph">&nbsp; lc.shutdown(0,false);</p>


<p class="wp-block-paragraph">&nbsp; /* Set the brightness to a medium values */</p>


<p class="wp-block-paragraph">&nbsp; lc.setIntensity(0,8);</p>


<p class="wp-block-paragraph">&nbsp; /* and clear the display */</p>


<p class="wp-block-paragraph">&nbsp; lc.clearDisplay(0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">/*</p>


<p class="wp-block-paragraph">&nbsp;This method will display the characters for the</p>


<p class="wp-block-paragraph">&nbsp;word &#8220;Arduino&#8221; one after the other on the matrix.</p>


<p class="wp-block-paragraph">&nbsp;(you need at least 5&#215;7 leds to see the whole chars)</p>


<p class="wp-block-paragraph">&nbsp;*/</p>


<p class="wp-block-paragraph">&nbsp;//y ekseni</p>


<p class="wp-block-paragraph">void middle() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10011001,B10011001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middletop1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10011001,B10011001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middletop2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10011001,B10011001,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middlebottom1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10011001,B10011001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middlebottom2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000001,B10011001,B10011001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">//y ekseni bitiş</p>


<p class="wp-block-paragraph">//x ekseni başlangıç</p>


<p class="wp-block-paragraph">void middleright1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10001101,B10001101,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middleright2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000111,B10000111,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middleleft1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10110001,B10110001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void middleleft2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B11100001,B11100001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">//x ekseni bitiş</p>


<p class="wp-block-paragraph">//1. alan</p>


<p class="wp-block-paragraph">void area1topright1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10001101,B10001101,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area1topright2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10001101,B10001101,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area1topright4() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000111,B10000111,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area1topright5() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000111,B10000111,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area1topright7() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000111,B10000111,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area1topright8() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B01000111,B10000111,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">//1. alan bitiş</p>


<p class="wp-block-paragraph">//2. alan</p>


<p class="wp-block-paragraph">void area2left1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10110001,B10110001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area2left2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10110001,B10110001,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area2left4() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B11100001,B11100001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area2left5() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B11100001,B11100001,B10000001,B10000001,B10000001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">//2. alan bitiş</p>


<p class="wp-block-paragraph">//3. alan</p>


<p class="wp-block-paragraph">void area3left1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10110001,B10110001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area3left2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000001,B10110001,B10110001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area3left4() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B11100001,B11100001,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area3left5() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000001,B11100001,B11100001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">//3. alan bitiş</p>


<p class="wp-block-paragraph">//4. alan</p>


<p class="wp-block-paragraph">void area4right1() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10001101,B10001101,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area4right2() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000001,B10001101,B10001101,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area4right4() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000111,B10000111,B10000001,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void area4right5() {</p>


<p class="wp-block-paragraph">&nbsp; /* here is the data for the characters */</p>


<p class="wp-block-paragraph">&nbsp; byte ball[8]={B11111111,B10000001,B10000001,B10000001,B10000001,B10000111,B10000111,B11111111};</p>


<p class="wp-block-paragraph">&nbsp; /* now display them one by one with a small delay */</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,ball[0]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,ball[1]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,ball[2]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,ball[3]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,ball[4]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,ball[5]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,ball[6]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,ball[7]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,ball[8]);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,0,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,1,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,2,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,3,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,4,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,5,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,6,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,7,0);</p>


<p class="wp-block-paragraph">&nbsp; lc.setRow(0,8,0);</p>


<p class="wp-block-paragraph">}</p>


<p class="wp-block-paragraph">void loop() {</p>


<p class="wp-block-paragraph">&nbsp; sensors_event_t a, g, temp;</p>


<p class="wp-block-paragraph">&nbsp; mpu.getEvent(&amp;a, &amp;g, &amp;temp);</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;2.5 &amp;&amp; a.acceleration.x&gt;0 &amp;&amp; a.acceleration.y&lt;2.5 &amp;&amp; a.acceleration.y&gt;0 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middle();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //y ekseni if-else</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;2.5 &amp;&amp; a.acceleration.x&gt;-2.5 &amp;&amp; a.acceleration.y&lt;5 &amp;&amp; a.acceleration.y&gt;2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middletop1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;2.5 &amp;&amp; a.acceleration.x&gt;-2.5 &amp;&amp; a.acceleration.y&lt;7.5 &amp;&amp; a.acceleration.y&gt;5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middletop2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;2.5 &amp;&amp; a.acceleration.x&gt;-2.5 &amp;&amp; a.acceleration.y&lt;0 &amp;&amp; a.acceleration.y&gt;-2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middlebottom1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;2.5 &amp;&amp; a.acceleration.x&gt;-2.5 &amp;&amp; a.acceleration.y&lt;-2.5 &amp;&amp; a.acceleration.y&gt;-5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middlebottom2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //y ekseni if bitiş</p>


<p class="wp-block-paragraph">&nbsp; //x ekseni if</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;5 &amp;&amp; a.acceleration.x&gt;2.5 &amp;&amp; a.acceleration.y&lt;2.5 &amp;&amp; a.acceleration.y&gt;-2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middleright1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;7.5 &amp;&amp; a.acceleration.x&gt;5 &amp;&amp; a.acceleration.y&lt;2.5 &amp;&amp; a.acceleration.y&gt;-2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middleright2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-2.5 &amp;&amp; a.acceleration.x&gt;-5 &amp;&amp; a.acceleration.y&lt;2.5 &amp;&amp; a.acceleration.y&gt;-2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middleleft1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-5 &amp;&amp; a.acceleration.x&gt;-7.5 &amp;&amp; a.acceleration.y&lt;2.5 &amp;&amp; a.acceleration.y&gt;-2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; middleleft2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //x ekseni if bitiş</p>


<p class="wp-block-paragraph">&nbsp; //1. alan if</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;5 &amp;&amp; a.acceleration.x&gt;2.5 &amp;&amp; a.acceleration.y&lt;5 &amp;&amp; a.acceleration.y&gt;2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area1topright1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;5 &amp;&amp; a.acceleration.x&gt;2.5 &amp;&amp; a.acceleration.y&lt;7.5 &amp;&amp; a.acceleration.y&gt;5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area1topright2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;7.5 &amp;&amp; a.acceleration.x&gt;5 &amp;&amp; a.acceleration.y&lt;5 &amp;&amp; a.acceleration.y&gt;2.5 )</p>


<p class="wp-block-paragraph">&nbsp; {</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area1topright4();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;7.5 &amp;&amp; a.acceleration.x&gt;5 &amp;&amp; a.acceleration.y&lt;7.5 &amp;&amp; a.acceleration.y&gt;5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area1topright5();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //1. alan bitti</p>


<p class="wp-block-paragraph">&nbsp; //2. alan</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-2.5 &amp;&amp; a.acceleration.x&gt;-5 &amp;&amp; a.acceleration.y&lt;5 &amp;&amp; a.acceleration.y&gt;2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area2left1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-2.5 &amp;&amp; a.acceleration.x&gt;-5 &amp;&amp; a.acceleration.y&lt;10 &amp;&amp; a.acceleration.y&gt;5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area2left2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-5 &amp;&amp; a.acceleration.x&gt;-10 &amp;&amp; a.acceleration.y&lt;5 &amp;&amp; a.acceleration.y&gt;2.5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area2left4();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-5 &amp;&amp; a.acceleration.x&gt;-10 &amp;&amp; a.acceleration.y&lt;10 &amp;&amp; a.acceleration.y&gt;5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area2left5();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //2. alan bitti</p>


<p class="wp-block-paragraph">&nbsp; //3. alan</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-2.5 &amp;&amp; a.acceleration.x&gt;-5 &amp;&amp; a.acceleration.y&lt;-2.5 &amp;&amp; a.acceleration.y&gt;-5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area3left1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-2.5 &amp;&amp; a.acceleration.x&gt;-5 &amp;&amp; a.acceleration.y&lt;-5 &amp;&amp; a.acceleration.y&gt;=-10 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area3left2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-5 &amp;&amp; a.acceleration.x&gt;-10 &amp;&amp; a.acceleration.y&lt;-2.5 &amp;&amp; a.acceleration.y&gt;-5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area3left4();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;-5 &amp;&amp; a.acceleration.x&gt;-10 &amp;&amp; a.acceleration.y&lt;-5 &amp;&amp; a.acceleration.y&gt;-10 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area3left5();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; //3. alan bitti</p>


<p class="wp-block-paragraph">&nbsp; //4. alan</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;5 &amp;&amp; a.acceleration.x&gt;2.5 &amp;&amp; a.acceleration.y&lt;-2.5 &amp;&amp; a.acceleration.y&gt;-5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area4right1();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;5 &amp;&amp; a.acceleration.x&gt;2.5 &amp;&amp; a.acceleration.y&lt;-5 &amp;&amp; a.acceleration.y&gt;-10 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area4right2();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;10 &amp;&amp; a.acceleration.x&gt;5 &amp;&amp; a.acceleration.y&lt;-2.5 &amp;&amp; a.acceleration.y&gt;=-5 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area4right4();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">&nbsp; if ( a.acceleration.x&lt;10 &amp;&amp; a.acceleration.x&gt;5 &amp;&amp; a.acceleration.y&lt;-5 &amp;&amp; a.acceleration.y&gt;-10 ){</p>


<p class="wp-block-paragraph">&nbsp; &nbsp; area4right5();</p>


<p class="wp-block-paragraph">&nbsp; }</p>


<p class="wp-block-paragraph">}</p>

</div></details>

</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bu projemizde de çevrenize gösterdiğiniz zaman gülümsetecek, insanların şaşıracağı, çözümlerinin de anlaşılmasının da oldukça basit olduğu dengede duramayan dijital top projesini inceledik. Bu tarz çevrenizi şaşırtacak veya bakış açınızı genişletecek başka projeler arıyorsanız aşağıdaki projelerimi inceleyebilirsiniz.   </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Yazının başındaki fotoğraf <a href="https://www.youtube.com/watch?v=tPr6-Rh0m-8" target="_blank" rel="noreferrer noopener nofollow">https://www.youtube.com/watch?v=tPr6-Rh0m-8</a> videosundan alınmıştır</p>
</blockquote>



<p class="wp-block-paragraph"></p>
<p><a rel="nofollow" href="https://blog.robo90.com/dengede-duramayan-dijital-top-nasil-yapilir/">Dengede Duramayan Dijital Top Nasıl Yapılır? ⚖️</a> yazısı ilk önce <a rel="nofollow" href="https://blog.robo90.com">Robo90 - Blog</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.robo90.com/dengede-duramayan-dijital-top-nasil-yapilir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
