Untitled
#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