Also ich versuche das jetzt alle in der INO Datei.
Doch ich bekomme das nicht hin
- versuch
Schieber 5 auslesen alles in (Loop) --> Klappt richtig Heppy
also alles aus dem (Loop) nehmen und in die Funktion int Schiber5() packen
und in Loop dann Seriel.Print Schieber5() aufrufen.
jetzt klappt es nicht mehr, ich bekomme immer 0 angezeigt ab und an ist mal ein wert dabei.
Was zum Henker mache ich da Falsch?
ich versuche das jetzt erst mal nicht in eine Externe Datei zu packen sondern bleibe in der INO Datei.
Code wie es Richtig Klappt:
unsigned long temp_millis;
void setup()
{
Serial.begin(9600);
}
void loop ()
{
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
// return (float)value / 100; // Kommastelle setzen und man erhält den endgültigen Meßwert (Rückgabe wert)
}
} // ENDE --> void loop
Code wie ich es gerne hätte, doch nicht klappt
unsigned long temp_millis;
void setup()
{
Serial.begin(9600);
}
void loop ()
{
Serial.println(Schieber5());
} // ENDE --> void loop
int 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
return (float)value / 100; // Kommastelle setzen und man erhält den endgültigen Meßwert (Rückgabe wert)
}
} // ENDE --> Schieber5
kann das sein das das an dem int liegt?
int Schieber5()