Guten Morgen zusammen !
Ich habe gestern mal den Sketch entsprechend erweitert. Grundsätzlich werden die Werte angezeigt, jedoch in dieser Form erst mit einer Verzögerung von bis zu 180 Sekunden auf die LCD ausgegeben.
Wenn ich die Codezeilen im Loop-Bereich und decode-Bereich für die Z-Achse herausnehme, werden veränderte Werte sofort auf den Displays dargestellt. Auch im Serial-Monitor sind diese Zeitunterschiede sichtbar.
Kann mir da jemand helfen?
#include <LiquidCrystal.h> // LCD Library einbinden
LiquidCrystal lcddrehzahl(12, 3, 7, 8, 9, 10); //sketch wird später noch erweitert
LiquidCrystal lcdxachse(12, 4, 7, 8, 9, 10);
LiquidCrystal lcdyachse(12, 5, 7, 8, 9, 10);
LiquidCrystal lcdzachse(12, 6, 7, 8, 9, 10);
int ixachse;
int iyachse;
int izachse;
int signxachse;
int signyachse;
int signzachse;
long valuexachse;
long valueyachse;
long valuezachse;
float resultxachse;
float resultyachse;
float resultzachse;
int clockpinxachse = 23;
int clockpinyachse = 27;
int clockpinzachse = 31;
int datapinxachse = 25;
int datapinyachse = 29;
int datapinzachse = 33;
unsigned long tempmicrosxachse;
unsigned long tempmicrosyachse;
unsigned long tempmicroszachse;
void setup() {
Serial.begin(9600);
pinMode(clockpinxachse, INPUT);
pinMode(clockpinyachse, INPUT);
pinMode(clockpinzachse, INPUT);
pinMode(datapinxachse, INPUT);
pinMode(datapinyachse, INPUT);
pinMode(datapinzachse, INPUT);
lcddrehzahl.begin (16,2);
lcddrehzahl.print("keine Drehzahl");
lcddrehzahl.setCursor(0,1);
lcddrehzahl.print("messbar");
lcdxachse.begin(16,2); // Display hat 2 Zeilen a 16 Zeichen
lcdxachse.print("X-Achse");
lcdxachse.setCursor(0, 1); // cursor an den Anfang der 2. Zeile
lcdxachse.print(" mm"); // Leerzeichen für Messwert freihalten
lcdyachse.begin(16,2); // Display hat 2 Zeilen a 16 Zeichen
lcdyachse.print("Y-Achse");
lcdyachse.setCursor(0, 1); // cursor an den Anfang der 2. Zeile
lcdyachse.print(" mm");
lcdzachse.begin(16,2); // Display hat 2 Zeilen a 16 Zeichen
lcdzachse.print("Z-Achse");
lcdzachse.setCursor(0, 1); // cursor an den Anfang der 2. Zeile
lcdzachse.print(" mm");
}
void loop () {
// zuerst die X-Achse
while (digitalRead(clockpinxachse)==LOW) {}
tempmicrosxachse=micros();
while (digitalRead(clockpinxachse)==HIGH) {}
if ((micros()-tempmicrosxachse)>500) {
decodexachse(); //decode the bit sequence
//jetzt die Y-Achse
while (digitalRead(clockpinyachse)==LOW) {}
tempmicrosyachse=micros();
while (digitalRead(clockpinyachse)==HIGH) {}
if ((micros()-tempmicrosyachse)>500) {
decodeyachse(); //decode the bit sequence
//jetzt die Z-Achse
while (digitalRead(clockpinzachse)==LOW) {}
tempmicroszachse=micros();
while (digitalRead(clockpinzachse)==HIGH) {}
if ((micros()-tempmicroszachse)>500) {
decodezachse(); //decode the bit sequence
}
}
}
}
//jetzt Decodierung und Anzeige der X-Achse
void decodexachse() {
signxachse=1;
valuexachse=0;
for (ixachse=0;ixachse<23;ixachse++) {
while (digitalRead(clockpinxachse)==LOW) { }
while (digitalRead(clockpinxachse)==HIGH) {}
if (digitalRead(datapinxachse)==HIGH) {
if (ixachse<20) {
valuexachse|= 1<<ixachse;
}
if (ixachse==20) { //wenn Bit 20 LOW ist, dann ist Messwert negativ
signxachse=-1; //deshalb vor dem Messwert ein Minuszeichen setzen
}
}
}
resultxachse=(valuexachse*signxachse)/100.00; //Messwert x Vorzeichen/100 ergibt Meßwert mit 2 Stellen hinter dem Komma
lcdxachse.setCursor(0, 1);
if (resultxachse<-999.99) resultxachse=-999.99;
if (resultxachse>999.99) resultxachse=999.99;
char strResultxachse[8];
dtostrf(resultxachse,8,2,strResultxachse);
lcdxachse.print(strResultxachse);
Serial.print(strResultxachse);
}
//jetzt Decodierung und Anzeige der Y-Achse
void decodeyachse() {
signyachse=1;
valueyachse=0;
for (iyachse=0;iyachse<23;iyachse++) {
while (digitalRead(clockpinyachse)==LOW) { }
while (digitalRead(clockpinyachse)==HIGH) {}
if (digitalRead(datapinyachse)==HIGH) {
if (iyachse<20) {
valueyachse|= 1<<iyachse;
}
if (iyachse==20) { //wenn Bit 20 LOW ist, dann ist Messwert negativ
signyachse=-1; //deshalb vor dem Messwert ein Minuszeichen setzen
}
}
}
resultyachse=(valueyachse*signyachse)/100.00; //Messwert x Vorzeichen/100 ergibt Meßwert mit 2 Stellen hinter dem Komma
lcdyachse.setCursor(0, 1);
if (resultyachse<-999.99) resultyachse=-999.99;
if (resultyachse>999.99) resultyachse=999.99;
char strResultyachse[8];
dtostrf(resultyachse,8,2,strResultyachse);
lcdyachse.print(strResultyachse);
Serial.print(strResultyachse);
}
//jetzt Decodierung und Anzeige der Z-Achse
void decodezachse() {
signzachse=1;
valuezachse=0;
for (izachse=0;izachse<23;izachse++) {
while (digitalRead(clockpinzachse)==LOW) { }
while (digitalRead(clockpinzachse)==HIGH) {}
if (digitalRead(datapinzachse)==HIGH) {
if (izachse<20) {
valuezachse|= 1<<izachse;
}
if (izachse==20) { //wenn Bit 20 LOW ist, dann ist Messwert negativ
signzachse=-1; //deshalb vor dem Messwert ein Minuszeichen setzen
}
}
}
resultzachse=(valuezachse*signzachse)/100.00; //Messwert x Vorzeichen/100 ergibt Meßwert mit 2 Stellen hinter dem Komma
lcdzachse.setCursor(0, 1);
if (resultzachse<-999.99) resultzachse=-999.99;
if (resultzachse>999.99) resultzachse=999.99;
char strResultzachse[8];
dtostrf(resultzachse,8,2,strResultzachse);
lcdzachse.print(strResultzachse);
Serial.print(strResultzachse);
}
Viele Grüße
Safran