// definiert Pin-Nummern
const int stepPin = 6 ;
const int dirPin = 7 ;
const int enPin = 8 ;
const int tasterlinks = 10;
int wertalt10 = LOW;
const int tasterrechts = 11;
int wertalt11 = LOW;
int Geschwindigkeit;
int Geschwindigkeit1 = 100 ;
int Geschwindigkeit2 = 1000 ;
long zaehler = 0;
//------------------------------------
/* www.electronicsprojectshub.com */
/*Import following Libraries*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//I2C pins declaration
LiquidCrystal_I2C lcd(0x27, 16, 2);
//------------------------------------
#define encoderPinA 2
#define encoderPinB 3
long encoderPos = 100000;
float encoderPoslcd = 1.00000;
float encoderPoslcderr;
float encoderPostausch = 0.00000;
unsigned int lastReportedPos = 1; // change management
static boolean rotating = false; // debounce management
// interrupt service routine vars
boolean A_set = false;
boolean B_set = false;
//Taster vom Drehschalter
int pin_drehschalter = 4;
int Richtung = 5;
String text1 = "";
int anzahl_der_drehungen = 10;
int i, k = 0;
bool taster = false;
bool tasteralt = false;
bool richtung = false;
//int zeit = 0;//encoderPos ist der Startwert
int frei, tast;
int veraendern=0;
int aendern=0;
long schritte=0;
//------------------------------------
#define ledPin 13
void setup () {
Serial.begin(115200);
// Legt die beiden Pins als Ausgänge fest
pinMode (stepPin, OUTPUT);
pinMode (dirPin, OUTPUT);
pinMode (enPin, OUTPUT);
digitalWrite (enPin, LOW);
//------------------------------------
lcd.init(); //Initializing display
lcd.backlight(); //To Power ON the back light
lcd.print(" Controller");
lcd.setCursor(0, 1);
lcd.print(" Teilapperat");
delay(2000);
lcd.clear();
//------------------------------------
pinMode(ledPin, OUTPUT); // Ausgabe LED festlegen
pinMode(tasterlinks, INPUT);
pinMode(tasterrechts, INPUT);
// Timer 2
noInterrupts(); // Alle Interrupts temporär abschalten
TCCR2A = 0;
TCCR2B = 0;
TCNT2 = 34286; // Timer nach obiger Rechnung vorbelegen
TCCR2B |= (1 << CS22) | (1 << CS21); // 256 als Prescale-Wert spezifizieren
TIMSK2 |= (1 << TOIE2); // Timer Overflow Interrupt aktivieren
interrupts(); // alle Interrupts scharf schalten
//------------------------------------
//Drehschalter
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
digitalWrite(encoderPinA, HIGH); // turn on pullup resistors
digitalWrite(encoderPinB, HIGH); // turn on pullup resistors
attachInterrupt(0, doEncoderA, CHANGE); // encoder pin on interrupt 0 (pin 2)
attachInterrupt(1, doEncoderB, CHANGE); // encoder pin on interrupt 1 (pin 3)
//Taster vom Drehschalter
pinMode(pin_drehschalter, INPUT_PULLUP);
}
void loop () {
Display();
Encoder();
//Schrittmotor();
Geschwindigkeit = 6553;
if (aendern==1)
{
aendern=0;
//schritte=encoderPos / 1125;
//schritte=3200;
}
encoderPostausch=encoderPos;
encoderPoslcd=encoderPostausch / 100000;
//schritte=veraendern;
//encoderPoslcderr=encoderPoslcderr+zaehler;
encoderPoslcderr=zaehler;
richtung = !digitalRead(Richtung);
if (richtung == HIGH)
{
digitalWrite (dirPin, HIGH);
} else digitalWrite (dirPin, LOW);
int wertneu10 = digitalRead(tasterlinks);
int wertneu11 = digitalRead(tasterrechts);
if(wertneu10 != wertalt10)
{
if(wertneu10 == HIGH)
{
Serial.println("Taster Links gedrückt");
}
else
{
Serial.println("Taster Links losgelassen");
}
// Remember the value for the next time.
wertalt10 = wertneu10;
}
if(wertneu11 != wertalt11)
{
if(wertneu11 == HIGH)
{
Serial.println("Taster Rechts gedrückt");
}
else
{
Serial.println("Taster Rechts losgelassen");
}
// Remember the value for the next time.
wertalt11 = wertneu11;
}
delay(100);
}