Zimt Creme
22.04.2011, 12: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
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