Hallo Zusammen,
irgendwie stehe ich gerade aufm Schlauch bzw. komme nicht weiter.
Und zwar würde ich gerne einen Variablennamen hochzählen.
Hier mal zu Verdeutlichung der Code
1
for(i=0;i<20;i++)
2
{
3
Sensor_VALUE[i]=get_sensor_value(Sensor_X)
4
}
Jetzt ist es so das Sensor_X eigentlich Sensor_0 .... Sensor_19 ist, und
diesen namen würde ich gerne parallel zum Array Sensor_VALUE[]
hochzählen.
Schon mal vielen Dank für eure Tips.......
Die Funktion get_sensor_value() erwartet doch eh einen Parameter, das
muss die Funktion selber halt richtig hinbiegen, auf welchen Sensorwert
sie dann zugreift...
Wenn du die get_sensor_value modifizieren kannst (oder eine neue
Funktion schreiben kannst), dann ist es vermutlich am saubersten einfach
die Laufvariable als Funktionsparameter zu übergeben, und die Sensoren
so zu adressieren. Vorteil du kannst auch auf evtl. fehlerhafte Werte
reagieren.
Ansonsten ein Array in dem die Werte von Sensor_1 bis Sensor_19 drin
stehen, bzw. die Pointer auf diese Werte (je nachdem wie komplex die
entsprechenden Datentypen sind, und ob sie an mehreren Stellen benutzt
werden.
Da würde ich mir für den Übergabewert Sensor_X einen String
zusammensetzen:
Sensor_ & i
Und dann diesen String als Übergabeparameter verwenden.
Evtl. kannst Du das Zusammensetzen auch direkt im Funktionsaufruf
machen.
Gruß
Sebastian
Sebastian R. schrieb:> Da würde ich mir für den Übergabewert Sensor_X einen String> zusammensetzen:
Der Funktion wird doch kein String übergeben, sondern eine Zahl...
irgendwo steht sicher ein equate für "Sensor_X"... Macht es doch nicht
komplizierter als unbedingt nötig...
Edit: wieder zu langsam... ;-)
PIC-Neuling85 schrieb im Beitrag #5698211:
> Schon mal vielen Dank für eure Tips..
Grundlagen im Programmieren lernen.
Nan kann Variablennamen nicht hochzählen, dafür gibt es Arrays
die du ja auch auf der linken Seite verwendet hast.
Du musst dir also eine andere Art der Zuordnung der Sensorwerte auf die
Arrayzellen ausdenken.
Entweder einen nach dem anderen, ohne Schleife
1
Sensor_VALUE[0]=get_sensor_value(Sensor_0);
2
Sensor_VALUE[1]=get_sensor_value(Sensor_1);
3
Sensor_VALUE[2]=get_sensor_value(Sensor_2);
4
Sensor_VALUE[3]=get_sensor_value(Sensor_3);
5
:
oder mal hinterfragen was get_sensor_value überhaupt tut, den Sensorwert
wie im Namen behauptet holt es jedenfalls nicht, denn der wird als
Parameter schon reingesteckt, und hinterfragen, was Sensor_X überhaupt
ist, vielleicht wäre dort ein Array auch möglich/passender.
Jedenfalls fehlt dir einiges am Grundverständnis übers Programmieren,
der Unterschied compile-time zu Laufzeit.
PIC-Neuling85 schrieb im Beitrag #5698211:
> Jetzt ist es so das Sensor_X eigentlich Sensor_0 .... Sensor_19 ist, und> diesen namen würde ich gerne parallel zum Array Sensor_VALUE[]> hochzählen.
Keine Ahnung, ob ich verstehe, was Du brauchst, aber wenn Du Variablen
namens
Sensor_0 bis Sensor_19 hast (und die - aus welchen Gründen auch immer -
nicht in ein Array "Sensor[20]" umbauen kannst), bau' dir eine
Lookup-Tabelle (vielleicht sogar mit einer Lookup-Funktion):
Ob das jetzt "von hinten durch die Brust ins Auge" oder irgendwie
sinnvoll ist, mußt Du selber rausfinden (es wird ja wohl hoffentlich
einen Grund geben, warum Du das so gemacht hast, wie Du's gemacht
hast..)
PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h
Es sind also gar keine Variablennamen.
Sondern enum-Bezeichner.
Soviel zu Grundkenntnissen im Programmieren.
adamap lag also richtig.
MaWin schrieb:> Es sind also gar keine Variablennamen.> Sondern enum-Bezeichner.>> Soviel zu Grundkenntnissen im Programmieren.>> adamap lag also richtig.
Na an der Stelle macht ein enum eher wenig Sinn - wenn er sie trotzdem
nutzen will, wird er um eine LookUp nicht herum kommen...
Aber ich würde hier eher KISS bevorzugen.
MaWin schrieb:> Es sind also gar keine Variablennamen.> Sondern enum-Bezeichner.
Dann Wert bekommt man über einen pointer. Als Neuling würde ich das
weglassen.
PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h
Ein wenig sinnlos wenn da dann doch wieder die gleichen Zahlen stehen.
Würde ich drauf verzichten und den Sensor "abstrahieren" und die
SensorNr nennen.
PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h>>
1
>enumsensor_names
2
>{
3
>Sensor_0=0,
4
>Sensor_1=1,
5
...
6
>Sensor_19=19
7
>};
8
>
Aha. Also eine komplett nutzlose enum Deklaration. Wenn es um
Lesbarkeit gehen sollte (kann ich ehrlich gesagt nicht erkennen, aber
sei es drum) dann wäre das hier besser:
1
#define Sensor(x) (x)
2
3
//und dann statt
4
get_sensor_value(i);
5
6
// das besser(?) lesbare
7
get_sensor_value(Sensor(i));
Außerdem: du schreibst davon, daß du einen Variablennamen hochzählen
willst. Das ist Unsinn. Die benamten Konstanten in einer enum
Deklaration sind keine Variablen sondern heißen Enumerator(en).
Axel S. schrieb:> get_sensor_value(Sensor(i));
Na das ist aber irgendwie auch doppelt gemoppelt,
der Funktionsname sagt ja schon das man einen Wert von einem Sensor
abrufen möchte.
Ich glaub man sollte sich da nicht zu sehr verbiegen um was zu erzwingen
was nicht sein müsste.