#include <Arduino.h>
#include <U8g2lib.h>
#include "I2CKeyPad.h"
#include "hardware/watchdog.h"
// DAC Kodları Set Constants
const int dacChipSelectPin = 17; // pin 9'u DAC için çip seçimi olarak ayarlayın:
/// Röle devresi ////////////////////////
#define onikiv 16
#define yirmialtiv 20
#define otuzikiv 21
#define fanPwr 3
#define cikis 22
void setup(void) {
Serial.begin(115200);
bt.setRX(1); //kullanacağımız rx pini
bt.setTX(0); //kuellanacağımız tx pini
delay(50); //gerek varmı bilmiyorum kısa bir bekleme
bt.begin(115200); //115200baud değerinde haberleşmemizi 12-13 pinlerinden başlattık
SPI.begin();
SPI.setTX(19);
SPI.setSCK(18);
Wire.setSDA(4);
Wire.setSCL(5);
Wire.begin();
u8g2.begin();
// DAC KODLARI /////////////
pinMode(dacChipSelectPin, OUTPUT);
// set the ChipSelectPins high initially:
digitalWrite(dacChipSelectPin, HIGH);
// initialise SPI:
//SPI.setBitOrder(MSBFIRST); // Kesinlikle gerekli değil, sadece emin olmak için.
//SPI.setDataMode(SPI_MODE0); // Kesinlikle gerekli değil, sadece emin olmak için.
setDac(0, 0); //Amper
setDac(0, 1); //Volt
pinMode(interrup, INPUT_PULLUP);
pinMode(onikiv, OUTPUT);
pinMode(yirmialtiv, OUTPUT);
pinMode(otuzikiv, OUTPUT);
pinMode(fanPwr, OUTPUT);
pinMode(cikis, OUTPUT);
digitalWrite(onikiv, LOW);
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
digitalWrite(fanPwr, LOW);
digitalWrite(cikis, LOW);
}
void setDac(int value, int channel) {
byte dacRegister = 0b00110000; // Varsayılan DAC kayıtlarını ayarlar B00110000, 1. bit DAC'yi seçer, A=0 B=1, 2. Bit giriş Tamponunu atlar, 3. bit çıkış kazancını 1x'e ayarlar, 4. bit aktif düşük kapatmayı kontrol eder. LSB burada önemsizdir.
int dacSecondaryByteMask = 0b0000000011111111; // 12 bitlik değer olan B00000000111111111'in son 8 bitini izole eder.
byte dacPrimaryByte = (value >> 8) | dacRegister; //Değer maksimum 12 Bit değerdir, Birincil Bayta giriş için değerden ilk 4 MSB'yi almak için 8 bayt sağa kaydırılır, ardından da Register ile BORed
byte dacSecondaryByte = value & dacSecondaryByteMask; // 8 LSB'yi izole etmek ve onu tek bir bayta indirmek için 12 bit değerini karşılaştırır.
// Ayarlanacak DAC'yi belirlemek için birincil Baytta MSB'yi ayarlar, DAC A=0, DAC B=1
switch (channel) {
case 0:
dacPrimaryByte &= ~(1 << 7);
break;
case 1:
dacPrimaryByte |= (1 << 7);
}
noInterrupts(); // DAC'ye veri göndermeye hazırlanmak için kesintileri devre dışı bırakın
digitalWrite(dacChipSelectPin, LOW); // DAC'yi seçmek için Chip Select pinini alçaltın:
SPI.transfer(dacPrimaryByte); // Birincil Baytı gönder:
SPI.transfer(dacSecondaryByte); // İkincil Baytı gönder
digitalWrite(dacChipSelectPin, HIGH); // DAC'nin seçimini kaldırmak için Chip Select pinini yükseğe alın:
interrupts(); // Kesintileri etkinleştir
}
void loop(void) {
ts = millis();
if (ts != prev_ts) {
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(20);
digitalWrite(onikiv, HIGH);
digitalWrite(cikis, LOW);
voltaj = 10.00 * 136;
setDac(voltaj, 1); // Volt
akim = 2.00 * 819;
setDac(akim, 0); //Amper
}
}