Juhu, ich habe es hin bekommen, auch wenn ich der Meinung bin das ich bei der Abfrage von NAN noch was Falsch mache, doch es Klappt
genial.
DANKE an euch alle.
das ist der Code mit einen Schieber.
muss jetzt erst mal noch weg, werde dann später die Anderen Schieber auch noch einbauen, und den Code hier veröffentlichen.
DANKE noch mal an euch alle.
#include "math.h"
unsigned long temp_millis;
int Taster = 3; // Taster PIN = Nr
int i = 0;
float Ergebnis_Schieber5 = NAN;
void setup()
{
Serial.begin(9600); // Seriele Einstellungen
pinMode(Taster, INPUT); // Taster PIN = Eingang
// ********* Tabellen Kopf
Serial.print("ID");
Serial.print("\t");
Serial.print("Schieber 1");
Serial.print("\t");
Serial.print("Schieber 2");
Serial.print("\t");
Serial.print("Schieber 3");
Serial.print("\t");
Serial.print("Schieber 4");
Serial.print("\t");
Serial.print("Schieber 5");
Serial.print("\t");
Serial.print("Dehnungsmessstreifen");
Serial.print("\n");
// ********* Tabellen Kopf
}
void loop()
{
while ( digitalRead(Taster)== LOW ) { } // Waren bis Taster gedrückt wurde
delay(100); // kurze Pause machen damit sich nichts überschlägt
while ( digitalRead(Taster)== HIGH) { } // Waren bis Taster gedrückt wurde
i = i + 1; // vortlaufende ID Nr. hochzählen
Serial.print(i); // vortlaufende ID Nr. Ausgaben
Serial.print("\t"); // Tabulattor ausgeben
Serial.print(Schieber1()); // Schieber Nr. 1 Auslesen udn Wert zurück geben
Serial.print("\t"); // Tabulattor ausgeben
Serial.print(Schieber2()); // Schieber Nr. 2 Auslesen udn Wert zurück geben
Serial.print("\t"); // Tabulattor ausgeben
Serial.print(Schieber3()); // Schieber Nr. 3 Auslesen udn Wert zurück geben
Serial.print("\t"); // Tabulattor ausgeben
Serial.print(Schieber4()); // Schieber Nr. 4 Auslesen udn Wert zurück geben
Serial.print("\t"); // Tabulattor ausgeben
while ( isnan(Ergebnis_Schieber5) ) { Ergebnis_Schieber5 = Schieber5(); } // Schieber Nr. 5 Auslesen udn Wert zurück geben
Serial.print(Ergebnis_Schieber5);
Ergebnis_Schieber5 = NAN;
Serial.print("\t"); // Tabulattor ausgeben
Serial.print(Dehnungsmessstreifen()); // Dehnungsmessstreifen auslesen und Wert zurückgeben
Serial.print("\n"); // Zeilenumbruch erstellen
} // ENDE --> void loop
float Schieber1()
{
} // ENDE --> Schieber1
float Schieber2()
{
} // ENDE --> Schieber2
float Schieber3()
{
} // ENDE --> Schieber3
float Schieber4()
{
} // ENDE --> Schieber4
float Schieber5()
{
int Schieber_5_ClockPin = 24; // Pin 24 das 2. Bit vom Port A (PINA PA2)
int Schieber_5_DataPin = 25; // Pin 25 das 3. Bit vom Port A (PINA PA3)
pinMode(Schieber_5_ClockPin, INPUT);
pinMode(Schieber_5_DataPin, INPUT);
while (digitalRead(Schieber_5_ClockPin) == LOW) {} // wenn CLOCK auf LOW, dann warten bis wieder HIGH
temp_millis = millis(); // aktuelle Zeitnahme
while (digitalRead(Schieber_5_ClockPin) == HIGH) {} // wenn CLOCK auf HIGH, warten bis wieder LOW
if ((millis() - temp_millis) > 100) // wenn High-Pegel länger wie 100ms war, springe in 'decode' Funktion
{
long value = 0;
byte SIGN_Bit = 0; // Vorzeichen Bit 21
for (int i=0;i<24;i++) // 24 Durchläufe, 0 bis 23
{
if ( PINA & ( 1 << PA3 )) // wenn Data (Port.A Bit.3) HIGH ist,
{ // eine 1 in die Variable 'value' an Bitnummer i
value |= 1UL << i; // Syntax Hinweis aus dem Forum, wegen default 16 bit int Arithmetik
}
while ( !(PINA & (1 << PA2))) { } // solange warten bis Clock (Port.A Bit.2) wieder HIGH ist
while ( PINA & (1 << PA2 )) { } // solange warten bis Clock (Port.A Bit.2) wieder LOW ist
} // for Schleifenende
SIGN_Bit = (value >> 21) & B01; // Vorzeichen Bit 21 separieren
value = value & 0xFFFF; // nur Bit 0 bis Bit 15 behalten, den Rest davor nullen
value = value >> 1; // und alles um ein Bit nach rechts schieben, Startsignal wird entfernt
if (SIGN_Bit == 1) // wenn Vorzeichen-Bit gesetzt war, alles mit -1 multiplizieren
{ value = value * -1; }
// Serial.println((float)value / 100); // Kommastelle setzen und man erhält den endgültigen Meßwert (Rückgabe wert)
return (float)value / 100; // Kommastelle setzen und man erhält den endgültigen Meßwert (Rückgabe wert)
}
return NAN; // Fehlerwert ausgeben
} // ENDE --> Schieber5
float Dehnungsmessstreifen()
{
} // ENDE --> Dehnungsmessstreifen