Bascom-> aus 2 vars mach 1 var...

  • Hey


    ich habe folgendes Problem


    ich muss oft die variablen LED1 - LED4 ansprechen... Bei einem Programm würde ich gerne die Zahl durchrotieren, da ich sonst alles 100mal schreiben muss was natürlich unsinnigerweiße auf den Flash geht... Mit Select und case könnte es man lösen... find ich aber auch ned so schön...


    Bsp.: Ich hab die variable N kann ich da den string LED und die variable N verheiraten, sodass eine "variable Variable" rauskommt?


    Also zum Beispiel irgendwie so:
    "LED".N = 1
    oder
    "LED"&N = 1


    Funktioniert alles nicht. Hab auch schon gegoogelt aber nix gefunden... Könnt ihr mir helfen :?:
    Gruß
    Matze

  • aha hört sich interessant an. ich weiß leider den textcode von 8) nicht. sonst könnte ichs entschlüsseln :)
    greez


    [edit]
    habs schon: ist 8 )
    werds gleich ausprobieren
    [/edit]

  • Also das haut irgendwie nicht so ganz hin. Ich poste mal den code:



    Den Teil ab bl_rgby müsste ich bei 4 LEDs 4mal schreiben. Ich möchte den Teil nur einmal schreiben und diesen entsprechend variabel gestalten... Könntet ihr mir zeigen wie das geht? Ich bekomm das mit den arrays nicht so ganz hin...
    danke

  • Hm.... sry kann dir da schlecht helfen köntnest du vielleicht noch die deklarierung der Vaiabelen posten, allso was z.B bl_rgby ist, bit oder was auch immer.
    und ne kleine beschreibung. z.B Taster 1 setzt bl_rbgy um den wert 1 nach oben oder toggelt oder macht was auch immer.


    allso die farbwahl bestimmt dann ob bl_ oder rot_ oder grün_ angesprochen ist. stimmts? und noch was


    If Bl_inc = 1 Then
    Waitms 50
    Incr Led1
    If Led1 > 255 Then
    Led1 = 0
    End If


    wenn du den pwm = 8 eingestellt hast oder halt nen 8 bit timmer genommen hast dann zählt der timer nie höher als 255., allso wenn er bei 255 ist und um 1 weiter zählt springt er wieder automatisch auf 0. allso kannst du das so machen.


    If Bl_inc = 1 Then
    Waitms 50
    Incr Led1
    End If



    da hab ich doch noch ne frage


    If Bl_dec = 1 Then
    Waitms 50
    Decr Led1
    If Led1 < 0 Then
    Led1 = 0
    End If
    diesen abscnitt. da sagst du wenn led1 kleiner als 0 ist sollder led1 auf 0 setzten. Dies ist doch nie der fall weil nach 0 kommt 255 ( bei einer 8 bit pwm) oder wenn das wirklich funktioniert das er dann die 255 kleiner wie 0 ansieht würde der genau 1 schritt machen. Allso das geht schonmal nicht.


    Dec heißt nämlich -1


    If Bl_dec = 1 Then
    Waitms 50
    Decr Led1
    End If


    nach 256 schritten ist er genau an dem wert wo er angefangen hat.


    If Bl_rgby = 1 Then 'farbauswahl aktiviert
    Waitms 100
    If Farbwahl = 4 Then
    Farbwahl = 1
    Else
    incr Farbwahl
    End If
    End If


    Select Case Farbauswahl

  • Zitat

    wenn du den pwm = 8 eingestellt hast oder halt nen 8 bit timmer genommen hast dann zählt der timer nie höher als 255., allso wenn er bei 255 ist und um 1 weiter zählt springt er wieder automatisch auf 0. allso kannst du das so machen.

    Ah ja. Stimmt hab ich gar nicht dran gedacht. Danke...


    So jetzt nen bisschen ausführlicher... Was das Programm können soll: Ich hab RGBY LEDs. Die Farben der LED will ich mit 3 Tastern manuell in der Helligkeit verstellen können, sodass die Farbe also manuell einstellbar ist. Man betätigt erst den Anodentaster (der wählt dann von welcher Farbe der Wert geändert wird) und dann kann man + oder - drücken (heller oder dunkler). Diese Taster heißen:

    Code
    Bl_rgby Alias Pind.2                                   	'Taster zur Anodenwahl R oder G oder B oder Y
    Bl_inc Alias Pind.1                                     	'+
    Bl_dec Alias Pind.0                                     	'-


    (bl steht hier für Bool)


    Dann werden die Anoden auf die PWM-Kanäle gelegt...

    Code
    Led1 Alias Ocr1bl                                       	'PWM-Pin 1
    Led2 Alias Ocr1al                                       	'PWM-Pin 2
    Led3 Alias Ocr0b                                        	'PWM-Pin 3
    Led4 Alias Ocr0a                                        	'PWM-Pin 4


    Dann kommt der Code zum manuellen einstellen der Farbe (Erklärung siehe kommentare):


    Das funktioniert hier ja jetzt nur für LED1. Ich möchte die Variablen jetzt so gestalten, dass die Variable LEDx von der Variablen Farbwahl gesteuert wird...

  • Ich glaube das das das dadasdasdasdas ist was du suchst.




    Hab bischen was verändert guck dirs mal an.


    Die Variabele Led ist unterandern noch dazu gekommen.




    Was sind den RGBY Leds??


    MfG

  • RGBY = Red Green Blue Yellow, da ist gelb noch mit drauf...


    Bin jetzt zwar nicht der Bascom-Spezialist, aber folgende Überlegung:


    Du willst ne Farbe einstellen, stellst Rot meinetwegen auf 220 - die Variable "Led" hat dann den Wert 220 - dann drückst Du weiter auf Blau, also hat dann Blau auch gleich 220 (= Variable "Led")... erstmal halb so wild... jetzt drehst Du Blau runter, meinetwegen auf 30, die Variable LED hat dann auch 30...


    und jetzt der Haken: willst Du Rot z.B. noch etwas heller drehen, und wählst wieder rot aus, dann springt die Helligkeit von Rot auch auf 30 runter - weil das ja noch in "Led" drin steht... ebenso setzt Du beim "Durchsteppen" der Farben grün und gelb auch gleich auf 30


    also müsste zwischen die Farbauswahl und Inc/Decr noch mal so ein Select-Case-Dingens rein, das dann die Variable "Led" erst mal wieder auf den momentanen Wert der ausgewählten Farbe setzt - aber dann sollte das so funktionieren... :thumbup:


    Oder mit nem Array sollte die Schreibweise so sein:


    z.B. Inc Led (Farbwahl) - Wenn jetzt "Farbwahl" z.B. den Wert "2" hat, dann kommt das auf das selbe raus, wie Inc Led (2), also das 2. Element in dem Array...


    in die PWM-Register musst Du das dann (ich selbst wüsste jetzt nicht, wie anders) per Hand übertragen, also:


    Led1 = Led (1)
    Led2 = Led (2)
    Led3 = Led (3)
    Led4 = Led (4)


    aber Du sparst Dir zumindest den einen Select-Case-Fall, um den Wert für Led wieder aus dem PWM-Register zurückzuholen...was da jetzt in Bascom sinnvoller ist und/oder weniger Speicher braucht (Select Case oder Array), weiß ich leider auch nicht...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Der Vollständigkeits halber hänge ich jetzt den code so wie es pesi vorgeschalgen hat mal an.



    @ pesi: bin ja ganz erstaunt. würde viele meiner Probleme eine einfachere Lösung geben. Das mit dem led(variabele) und dann led(1) , .... led(20). Wird dann das led(1) z.B. als eins, allso als komplette variabele gesehen? oder muss ich die vaiabele


    Led


    andester bestimmen ( dim led as byte) ?? Ich würde sagen, das man die dann die Variabele Led so deklareiren muss: dim led(20) as byte allso nen arry mit 20 mal der variabelen machen, so das er dann auch mit z.b. led(farbwahl) was anfangen kann, den sonst weis der ja nicht was die klammern bedeuten oder?


    Ich sehe mich auch nicht als profi an, doch ich versuche zu helfen.












    MfG

  • oder muss ich die vaiabele


    Led


    andester bestimmen ( dim led as byte) ?? Ich würde sagen, das man die dann die Variabele Led so deklareiren muss: dim led(20) as byte allso nen arry mit 20 mal der variabelen machen, so das er dann auch mit z.b. led(farbwahl) was anfangen kann, den sonst weis der ja nicht was die klammern bedeuten oder?

    Also, wie gesagt, bin nicht der Bascom-Spezialist, aber habe mal gegoogelt, das "Dim Led(4) As Byte" müsste stimmen, ein Array mit 4 Feldern, jeweils Bytes....


    das ist dann so, wie wenn Du 4 einzelne Variablen hast, nur dass Du mit dem Index, also Led (x) aussuchen kannst, welche Du haben willst - kann mir schon vorstellen, dass das bei einigen Deiner Sachen hilfreich ist...


    Ich sehe mich auch nicht als profi an, doch ich versuche zu helfen.

    Geht mir ja auch so - und Du machst das ja auch gut :thumbup:

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!