Hallo Roky,
leider werden mir jetzt Ganz falsche Werte angezeigt.
0.10V bei Values von 364.
Hier mal der Komplette Code ...
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int analogInput = 2;
float vin = 0;
float values = 0;
// An die Pins 2 und 3 ist der Encoder angeschlossen
#define encoderA 2
#define encoderB 3
// Globale Variablen zur Auswertung in der
// Interrupt-Service-Routine (ISR)
volatile int8_t altAB = 0;
volatile long encoderWert = 0;
// 1/1 Auflösung
int8_t schrittTab[16] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
// 1/2 Auflösung ergibt bei Lego-Motoren 1 tick pro Grad (standard wie bei Lego)
//int8_t schrittTab[16] = {0, 0,0,0,1,0,0,-1, 0,0,0,1,0,0,-1,0};
// 1/4 Auflösung
//int8_t schrittTab[16] = {0,0,0,0,0,0,0,-1,0,0,0,0,0,1,0,0};
ISR(TIMER1_COMPA_vect) {
altAB <<= 2;
altAB &= B00001100;
altAB |= (digitalRead(encoderA) << 1) | digitalRead(encoderB);
encoderWert += schrittTab[altAB];
}
void setup()
{
pinMode(encoderA, INPUT_PULLUP); // mit pullUp pinMode(encoderA, INPUT_PULLUP);
pinMode(encoderB, INPUT_PULLUP); // mit pullUp pinMode(encoderB, INPUT_PULLUP);
pinMode(2, INPUT);
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
lcd.begin(16, 2);
lcd.setCursor(1, 0);
lcd.print("xxx");
lcd.setCursor(1, 1);
lcd.print("Encoder Test");
noInterrupts(); // Jetzt keine Interrupts
TIMSK1 |= (1 << OCIE1A); // Timer 1 Output Compare A Match Interrupt Enable
TCCR1A = 0; // "Normaler" Modus
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10);
OCR1A = 14;
interrupts(); // Interrupts wieder erlauben
delay(1500);
Serial.begin(115200);
}
void loop()
{
lcd.begin(16, 2);
for (int x = 0; x < 2; x++)
{
lcd.print(" Bitte Warten "); // print a simple message
delay(1000);
lcd.clear();
delay(1000);
}
while (true)
{
// Werte am analogen Pin lesen
values = analogRead(analogInput); //Messwerte am analogen Pin als "values" definieren
vin = values * ( 4.5 / 1023.0 ) / ( 100 + 6.8 ) * 6.8; // Messwerte in Volt umrechnen = Spannung am Ausgang des
Serial.println(values);
if (vin < 0)
{
lcd.print(" Akku Laden "); // print a simple message
delay(1000);
lcd.clear();
delay(1000);
}
else
{
lcd.setCursor(1, 0);
lcd.print(" "); // print a simple message
lcd.setCursor(6, 0);
lcd.print(vin ); // print a simple message
lcd.setCursor(10, 0);
lcd.print("V Batt"); // print a simple message
lcd.setCursor(1, 1);
lcd.print("ecWert:"); // print a simple message
lcd.setCursor(8, 1);
lcd.print(encoderWert); // print a simple message
if (encoderWert < 10) lcd.print(' ');
if (encoderWert < 100) lcd.print(' ');
if (encoderWert < 1000) lcd.print(' ');
if (encoderWert < 10000) lcd.print(' ');
if (encoderWert < 100000) lcd.print(' ');
if (encoderWert < 1000000) lcd.print(' ');
}
}
}
Aufgabestellung:
Hallsensor einlesen und auf LCD ausgeben.
Versorgung-Spannung auf dem LCD Anzeigen.
Bei Unterschreitung von Spannung XX Meldung auf dem LCD Ausgeben.