Untitled
unknown
plain_text
9 months ago
4.3 kB
7
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);
}
}
Editor is loading...
Leave a Comment