/**************************************************************************/
/*
     In diesem Beispiel wird mit dem D>A_Converter MCP4725 ein Poti auf A0 ausgelesen
     und auf den Ausgang als Spannung 0-5 Volt ausgegeben
     Dies ist eine von mir geänderte Beispielskizze
     für das Breakout Board Adafruit MCP4725
     ----> http://www.adafruit.com/products/935

     Adafruit investiert Zeit und Ressourcen, um diesen Open-Source-Code bereitzustellen.
     Bitte unterstützen Sie Adafruit und Open-Source-Hardware durch den Kauf
     Produkte von Adafruit!

     5 KiloOhm Poti zwischen GND und VCC 5V und Mittelabgriff auf PIN A3
*/
/**************************************************************************/
#include <Wire.h>

#include <Adafruit_MCP4725.h>
Adafruit_MCP4725 dac;

#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int ANALOG_PIN = A0; // Hier wird der Name Steuereingang festgelegt
int a31 = 0;      // Der Speicher für den ausgelesenen Analogwert vom Poti
int a32 = 0;      // Der Speicher für den ausgegebenen Analogwert zum DA Wandler
int a32alt = 10;  // Vergleichspeicher ob es neue Werte gibt
unsigned long Anzeigepause = 500;
unsigned long Pausestartzeit = 0;
//====================================================================================
void setup(void) {
  // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC)
  // For MCP4725A0 the address is 0x60 or 0x61
  // For MCP4725A2 the address is 0x64 or 0x65
  dac.begin(0x60); // Meine MCP4725 haben die I2C-Adresse 0x60

  pinMode(ANALOG_PIN, INPUT); // Poti Input

  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print ("Auslesewert");
  lcd.setCursor (0, 1);
  lcd.print ("Ausgabewert");
  
}
//===================================================================================
void loop(void) {
  a31 = analogRead (ANALOG_PIN); // Analogen Eingang A3 (Poti) auslesen
  a32 = map(a31, 0, 1023, 0, 4095); //Ausgabewerte für MCP4725 anpassen
  if (a32 != a32alt) {   // Hat sich der Wert verändert, dann geben ich den neuen Wert aus
    a32alt = a32;          // Wert "a3alt" für den nächste Vergleich aktuallisieren
    dac.setVoltage(a32, false); // Wert ausgeben
    if (millis() - Pausestartzeit >= Anzeigepause) { // Anzeigeänderung nur alle 500ms
      lcd.setCursor (13, 0);
      lcd.print ("    ");
      lcd.setCursor (13, 0);
      lcd.print (a31);
      lcd.setCursor (13, 1);
      lcd.print ("    ");
      lcd.setCursor (13, 1);
      lcd.print (a32);
      Pausestartzeit = millis();
    }
  }
}