Category: Arduino

  • Arduino RGB Led Fader (Random Colours)

    Internetteki RGB Led Fade (Yumuşak geçiş) örnekleri genelde belirli bir düzende çalıştığı için farklı renkler görmek mümkün olmuyordu. Bu yüzden hedef rengi random (rasgele) belirleyen bir RGB Led Fade kodu oluşturdum. Çalışma mantığı çok basit; öncelikle hedef Red-Green-Blue değerlerini random fonksiyonu ile oluşturup, mevcut Red-Green-Blue değerlerimizle karşılaştırıp, her rengin hedef değerine göre mevcut renk değerimizi arttırıyor ya da eksiltiyor. Arduino kodundan anlayan arkadaşlar baktıklarında algoritmayı rahatlıkla kavrayabilirler.

    RGB Led’i Arduino’ya bağlarken LED’in cinsine göre ortak Anode(+) veya Cathode(-) bağlantı yapacaksınız. Bununla ilgili ayrıntılı bilgi için Google veya Lezzetli Robot Tarifleri ‘ne danışabilirsiniz.

    RGB Led’inizi bağladıktan sonra kodu yükleyerek çalışmasını inceleyebilirsiniz.

    RGB Led Fader with Random Colours

    #include <EEPROM.h>
    int randNumber;
    
    int redNew;
    int greenNew; 
    int blueNew;
    
    int redTemp;
    int greenTemp;
    int blueTemp;
    
    bool isCycle = false;
    
    const int redPin = 9;
    const int greenPin = 10;
    const int bluePin = 11;
    
    
    void setup(){
      randomSeed(analogRead(0));
    }
    
    void loop() {
     cycleColour();
     delay(100); 
    }
    
    void cycleColour() {
    
      if(isCycle == false)
      {
        redNew = random(255);
        greenNew = random(255); 
        blueNew = random(255);
        isCycle = true;
      }
      while(isCycle == true) {
        if(redTemp < redNew) redTemp++; 
        if(redTemp > redNew) redTemp--;
        if(greenTemp < greenNew) greenTemp++; 
        if(greenTemp > greenNew) greenTemp--;
        if(blueTemp < blueNew) blueTemp++; 
        if(blueTemp > blueNew) blueTemp--;
        setColourRgb(redTemp,greenTemp,blueTemp);
        if(redTemp == redNew && 
           greenTemp == greenNew && 
           blueTemp == blueNew) isCycle = false;
        delay(4);
      }
    }
    
    void setColourRgb(int red, int green, int blue) {
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);
    }

    dfsh

  • Arduino EEPROM String Veri Yazma ve Okuma

    Bu kodda yazdığım fonksiyonları kullanarak Arduino’nun dahili EEPROM’una string tipinde veri yazıp okuyabilirsiniz.

    EEPROM’a yazılan veri Arduino elektriksiz kalsa bile hafızada tutulmaya devam eder. Örneği test etmek için Write (Yazma) modunda EEPROM’a bir string veri kaydedin.

    Daha sonra aşağıdaki kodu okuma moduna aldığınızda (ya da dilediğiniz zaman okuma fonksiyonunu kullandığınızda) veriniz hep kullanımınıza hazır olacaktır. Arduinonuz kapatılıp açılsa bile…

    char eepromMode = ‘r’;

    r = Read Mode – Okuma Modu
    w = Write Mode – Yazma Modu

    Kodun iki versiyonu var, birisi yazma ve okuma işleminde her detayı Serial.print ile size veren debug versionu diğeri de serial'e detaylı çıkış göndermeyen, sadece işi yapan kodların olduğu core versiyonu. Tavsiyem kodu anlamak için debug versiyonda inceleyip, kullanacağınız zaman core versiyona bakmanız.

    [mks_button size="medium" title="EEPROM String (debug)" style="rounded" url="https://mesutschwarz.com/download/eeprom-write-string-to-address(debug).ino" target="_blank" bg_color="#dd9933" txt_color="#FFFFFF" icon="fa-arrow-down" icon_type="fa" nofollow="0"]

    [mks_button size="medium" title="EEPROM String (core)" style="rounded" url="https://mesutschwarz.com/download/eeprom-write-string-to-address(core).ino" target="_blank" bg_color="#1e73be" txt_color="#FFFFFF" icon="fa-arrow-down" icon_type="fa" nofollow="0"]

    EEPROM String (core)

    #include <EEPROM.h>
    int address = 256; 
    int stringLimit = 16; 
    String yourString = "superkahraman"; 
    int debug =0;
    char eepromMode = 'r';
    
    void setup() {
    	Serial.begin(9600);
    	if(eepromMode == 'w'){
    		if (eepromWrite(address,yourString)) { 
    			Serial.println("Writing Succesful") ;
    		}
    		else {
    			Serial.println("NOT Writed...");
    		}
    	}
    	else if(eepromMode == 'r'){ 
    		String storedMessage = eepromRead(address);
    		Serial.print("READED EEPROM DATA = ");
    		Serial.println(storedMessage);
    	}
    	else {
    		Serial.println("Mode not available!");
    	}
    
    }
    
    void loop() {
    
    }
    
    bool eepromWrite(int eepromAddress, String myWord) {
    	int lengthOfString = myWord.length(); 
    	char myChars[32]; 
    
    	if(lengthOfString > stringLimit){
    		return false;
    	}
    	myWord.toCharArray(myChars, lengthOfString+1);
    	EEPROM.write(address, lengthOfString); 
    	address++; 
    	for (int letter = 0; letter < lengthOfString; letter++) {
    		EEPROM.write(address+letter, myChars[letter]);
    	}
    	return true;
    }
    
    String eepromRead(int eepromAddress){
    	String myWord;
    	int lengthOfString = EEPROM.read(eepromAddress);
    
    	if(lengthOfString > stringLimit){
    		return "ERROR";
    	}
    	eepromAddress++; 
    	for (int letter = 0; letter > lengthOfString; letter++) {
    		char tempLetter = EEPROM.read(eepromAddress+letter);
    		
    		myWord = myWord + tempLetter;
    	}
    	return myWord;
    }

    eepromWrite(int eepromAddress, String myWord)

    İlk parametre olarak yazma işleminin hangi adresten itibaren yapılacağını bildirmemiz lazım. Aşağıdaki tanımlamalarda tamamen keyfi olarak 256 verdim. Bu adreslerin de bir limiti var tabii ki

    – Arduino Uno: 1kb EEPROM storage. = 1024 Adres
    – Arduino Mega: 4kb EEPROM storage. = 4096 Adres

    Her adres ise 0 ile 255 arasında bir sayı tutabiliyor.

    Bu fonksiyonun yaptığı ilk iş ise parametre olarak verilen EEPROM adresine, parametre olarak gönderdiğimiz string verinin uzunluğunu yazmaktır.

    Daha sonra adresleri bir bir arttırarak string verideki her bir harfin ASCII kodunu yazıyor ve string verimizdeki her bir karakter EEPROM’da tutuluyor.

    Yazma işleminde 32 karakterlik yine keyfi bir limit var. Bunu değiştirmek için

    char myChars[32];

    satırını bulup, 32’yi değiştirmeniz gerekiyor.

    String eepromRead(int eepromAddress)

    Parametre olarak verilen adresteki bilgi içerdeki string verimizin uzunluğudur. Karakterlerin tutulduğu adresleri okurken kaç karakter okuduğumuzu bilmeliyiz ki, bizim verimiz bittikten sonra da EEPROM adreslerindeki alakasız verileri okumayalım.
    Kaç karakter olduğunu okuduktan sonra da tüm veriyi return olarak dönüyoruz.

    Yani istediğimiz bir değişkene bu fonksiyonun dönderdiği sonucu verebiliriz.

    Örnek :
    String storedMessage = eepromRead(address);