PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable aus for-schleife ausserhalb weiterbenutzen. Arduino



Zimt Creme
22.04.2011, 11:30
Hallo,


ich habe derzeit das Problem, dass ich eine Variable, die während einer for-schleife geändert wird, später nichtmehr nutzen kann.



Die Schleife läuft eine gewisse Zeit lang.
In der Schleife wird in gewissem Zeitabstand 2 mal ein Sensor ausgelesen. Die beiden Werte werden verglichen. Bei großen Unterschieden zwischen den Werten wird eine weitere Variable erhöht.

Den "Endwert" dieser weitere Variable würde ich auch gerne ausserhalb der for-schleife nutzen.
Über ein "serial.Println(weitere Variable)" innerhalb der Schleife, sehe ich, dass die Variable hochgezählt wird und auch ausgegeben werden kann.
Sobald ich sie nach der Schleife ausgeben lasse ist sie wieder = 0.

Definiert wurde die Variable global, nur scheint ihre Änderung innerhalb der Schleife hängen zu bleiben.



void setup() {
Serial.begin(9600);
pinMode(A0,INPUT);
}
int vU = 0; // Variable die ausserhalb benutzt werden soll
int vk;

void loop()
{
vk = fotos(); // fotos() ließt den Sensor aus, vergleicht
// und sollte am Ende die Variable ausgeben
// und als vk speichern
//Serial.println(vk);
}


int fotos()
{
long vZeit = 0;
int vV = 0; // Sensorwert
int vN = 0; // "skalierter" Sensorwert
int vNa = 0; // "skalierter" Sensorwert der vorherigen Messung


for (vZeit = 0; vZeit < 3000; vZeit++) // Schleife soll 3000 mal durchlaufen werden
{
vV = analogRead(A0); // Sensor auslesen
vN =sq(vV-62); // Wert skalieren
if(vNa > 200 && vN < 20) // bei abfallender Flanke vU hochzählen
{
vU++;
}
delayMicroseconds(50); // Zeit zwischen den beiden Messungen
vNa = vN; // neuen "alten Wert"
Serial.println(vU); // Von hier lässt sich vU ausgeben

}
Serial.println(vU); // Von hier nichtmehr
return vU; // return liefert demnach auch nurnoch 0
}


ps.: Interessieren tut mich nur der Wert den vU nach dem Schleifendurchlauf hat. Also die "Sensorausschläge" innerhalb xx Sekunden.
Soll später mal ein Drehzahlmesser werden.


Vielen Dank

TobiKa
22.04.2011, 11:44
Da vU global definiert ist und alles in "fotos()" passiert, müsste es eigentlich gehen.
Desweiteren benutz bitte die Code-Tags, sonst ist dein Code kaum lesbar.

Wenn es um eine Drehzahlmessung geht, gehst du falsch an die Sache ran! Da wäre ein Timer und ein Interrupt Eingang viel besser. Und dann noch ne analoge Messung um die steigende Flanke festzustellen, oh je...