Untitled

 avatar
unknown
plain_text
a month ago
4.3 kB
5
Indexable
#include <EEPROM.h>
#include <DigiPotX9Cxxx.h>
int maxvalue = 255;
int minvalue = 0;
int butonhiz = 100;  // butona basılı tutma hızı

const int buttonPin = 14;  // Buton pini (Dijital pin 2)
int pwmPin = 9;            // pwm pini
DigiPot pot(18, 19, 5);    // Potansiyometreyi bağladığınız pinler


int buttonState = 0;                // Buton durumu
int lastButtonState = 0;            // Son buton durumu
unsigned long buttonPressTime = 0;  // Butona basılma süresi

// Değişkenler
int value = 0;            // Değer (0 ile 1024 arasında artacak)
bool onOffState = false;  // ON/OFF durumu (başlangıçta OFF)


// EEPROM adresleri
const int eepromAddressLow = 0;    // Düşük byte için adres
const int eepromAddressHigh = 1;   // Yüksek byte için adres
const int eepromAddressOnOff = 2;  // ON/OFF durumu için adres
bool buttonok = false;
bool invert = false;
void setup() {
  pinMode(pwmPin, OUTPUT);

  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(115200);

  // EEPROM'dan değeri oku (2 byte olarak)
  byte lowByte = EEPROM.read(eepromAddressLow);
  byte highByte = EEPROM.read(eepromAddressHigh);

  // Değerin oluşturulması:
  value = (highByte << 8) | lowByte;  // Yüksek ve düşük byte'ları birleştiriyoruz

  // EEPROM'dan ON/OFF durumunu oku
  if (value < 85)
    value = 85;

  onOffState = EEPROM.read(eepromAddressOnOff) == 1;



  // Başlangıç mesajı
  Serial.println("Cihaz Baslatildi");
  Serial.print("Baslangic degeri: ");
  Serial.println(value);

  if (onOffState) {
    Serial.print("Durum: ");
    Serial.println(value);
    pot.set(value);  // Bu fonksiyonun kütüphanenizde olup olmadığını kontrol edin
    analogWrite(pwmpin, value);
    delay(500);
  } else {
    Serial.print("Durum: 0");
    pot.set(0);
    delay(500);
  }
}

void loop() {
  // Buton durumunu oku
  buttonState = digitalRead(buttonPin);

  // Butona basıldığında
  if (buttonState == LOW) {
    buttonok = true;
    if (lastButtonState == HIGH) {
      // Buton yeni basıldığında zamanlayıcıyı başlat
      buttonPressTime = millis();
    }

    // 2 saniye veya daha fazla basılı tutulursa
    if (millis() - buttonPressTime > 2000) {
      // Değeri arttır
      if (invert == false)
        value++;
      else
        value--;

      if (value > maxvalue) {
        invert = true;
      }
      if (value <= minvalue) {
        invert = false;
      }
      delay(butonhiz);
      pot.set(value);
      analogWrite(pwmpin, value);
      Serial.print("Deger: ");
      Serial.println(value);
    }
  } else {
    // Buton bırakıldığında
    if (lastButtonState == LOW) {
      unsigned long pressDuration = millis() - buttonPressTime;

      // Buton basılı kaldıysa 2 saniye ve daha uzun süre
      if (pressDuration > 2000) {
        // Değeri 2 byte olarak EEPROM'a kaydet
        byte lowByte = value & 0xFF;          // Düşük byte
        byte highByte = (value >> 8) & 0xFF;  // Yüksek byte

        EEPROM.write(eepromAddressLow, lowByte);
        EEPROM.write(eepromAddressHigh, highByte);
        Serial.print("Yeni deger EEPROM'a kaydedildi: ");
        Serial.println(value);
      } else {
        // Butona kısa basıldığında ON/OFF durumunu değiştir
        if (buttonok) {


          onOffState = !onOffState;

          // ON/OFF durumunu EEPROM'a kaydet
          EEPROM.write(eepromAddressOnOff, onOffState ? 1 : 0);


          // Ekranda ON/OFF durumunu göster

          if (onOffState) {
            Serial.print("Durum: ");
            Serial.println(value);
            analogWrite(pwmpin, value);
            pot.set(value);

            delay(500);
          } else {
            Serial.print("Durum: 0");
            pot.set(0);
            analogWrite(pwmpin, 0);
            delay(500);
          }
        }
      }

      delay(500);  // Kısa bir bekleme (değerin stabilleşmesi için)
    }
  }
  delay(30);
  // Son buton durumunu güncelle
  lastButtonState = buttonState;
}

void setPotValue(int value) {

  for (int i = 255; i > 0; i--) {
    pot.decrease(1);
    delay(10);
  }

  for (int i = 0; i < value; i++) {
    pot.increase(1);
    delay(10);
  }
}
void setPotValuelow(int value) {

  for (int i = 255; i > 0; i--) {
    pot.decrease(1);
    delay(10);
  }
}
Leave a Comment