Untitled
unknown
plain_text
10 months ago
3.7 kB
6
Indexable
#include <EEPROM.h>
#include <DigiPotX9Cxxx.h>
// Değişken tanımlamaları
int maxvalue = 255;
int minvalue = 0;
int butonhiz = 100;
const int buttonPin = 14; // Buton pini
int pwmPin = 9; // PWM pini
DigiPot pot(18, 19, 5); // Dijital pot kontrolü
int buttonState = 0;
int lastButtonState = 0;
unsigned long buttonPressTime = 0;
int value = 0; // Pot değeri
bool onOffState = false; // Açma/Kapama durumu
// EEPROM adresleri
const int eepromAddressLow = 0;
const int eepromAddressHigh = 1;
const int eepromAddressOnOff = 2;
bool buttonok = false;
bool invert = false;
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Buton pini giriş olarak ayarlandı
pinMode(pwmPin, OUTPUT); // PWM pini çıkış olarak ayarlandı
Serial.begin(115200);
// EEPROM'dan başlangıç değerlerini oku
byte lowByte = EEPROM.read(eepromAddressLow);
byte highByte = EEPROM.read(eepromAddressHigh);
value = (highByte << 8) | lowByte;
// Minimum başlangıç değerini kontrol et
if (value < 85)
value = 85;
// EEPROM'dan açma/kapama durumu oku
onOffState = EEPROM.read(eepromAddressOnOff) == 1;
// Seri Monitöre başlangıç mesajları yazdır
Serial.println("Cihaz Baslatildi");
Serial.print("Baslangic degeri: ");
Serial.println(value);
if (onOffState) {
Serial.print("Durum: ");
Serial.println(value);
pot.set(value);
analogWrite(pwmPin, value);
delay(500);
} else {
Serial.println("Durum: 0");
pot.set(0);
analogWrite(pwmPin, 0);
delay(500);
}
}
void loop() {
buttonState = digitalRead(buttonPin); // Buton durumunu oku
if (buttonState == LOW) {
buttonok = true;
if (lastButtonState == HIGH) {
buttonPressTime = millis();
}
// Uzun basma algılama
if (millis() - buttonPressTime > 2000) {
if (!invert)
value++;
else
value--;
// Değer sınırlarını kontrol et
if (value > maxvalue) {
invert = true;
}
if (value <= minvalue) {
invert = false;
}
delay(butonhiz);
pot.set(value);
Serial.print("Deger: ");
Serial.println(value);
}
} else {
// Buton bırakıldığında
if (lastButtonState == LOW) {
unsigned long pressDuration = millis() - buttonPressTime;
// Uzun basma sonrası EEPROM'a kaydetme
if (pressDuration > 2000) {
byte lowByte = value & 0xFF;
byte highByte = (value >> 8) & 0xFF;
EEPROM.write(eepromAddressLow, lowByte);
EEPROM.write(eepromAddressHigh, highByte);
Serial.print("Yeni deger EEPROM'a kaydedildi: ");
Serial.println(value);
} else {
// Kısa basma ile açma/kapama durumu değiştirme
if (buttonok) {
onOffState = !onOffState;
EEPROM.write(eepromAddressOnOff, onOffState ? 1 : 0);
if (onOffState) {
Serial.print("Durum: ");
Serial.println(value);
analogWrite(pwmPin, value);
pot.set(value);
delay(500);
} else {
Serial.println("Durum: 0");
pot.set(0);
analogWrite(pwmPin, 0);
delay(500);
}
}
}
delay(500);
}
}
delay(30);
lastButtonState = buttonState;
}
void setPotValue(int value) {
// Dijital pot değerini belirli bir seviyeye ayarla
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) {
// Dijital pot değerini sıfıra ayarla
for (int i = 255; i > 0; i--) {
pot.decrease(1);
delay(10);
}
}
Editor is loading...
Leave a Comment