2 For Next Schleifen in kurzen Abständen laufen lassen?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Der Einfachheit halber habe ich mal so begonnen:

      BASCOM-Quellcode

      1. For Led_zaehler = 0 to Ledanzahl - 52
      2. R = 50 : G = 0 : B = 0
      3. RB_SetColor Led_zaehler , color(1)
      4. RB_Send
      5. i = Ledanzahl - Led_zaehler
      6. i = i - 1
      7. RB_SetColor i, color(1)
      8. RB_Send
      9. Waitms 500
      10. Next Led_zaehler
      Die Leds gehen nacheinander von beiden seiten an.

      Jetzt ist aber ,
      i = Ledanzahl - Led_zaehler
      i = i - 1
      nicht Led_zaehler, den Led_zähler sollte ja

      Ledzaehler - 1 sein.

      Den er beginnt bei der 57sten LED die ja nicht vorhanden ist, rein Theoretisch.

      Aber da sind ja keine 3 Parameter zulässig.

      Das ist nicht zulässig:

      i = Ledanzahl - Led_zaehler - 1

      Wie kann ich das den hinbekommen das ich das so reinbekomme?
    • Kannst du ja mal testen. :D

      BASCOM-Quellcode

      1. '**************************
      2. '--------< Chip >----------
      3. '**************************
      4. $regfile = "m328pdef.dat" ' Arduino nano v.3.0
      5. $crystal = 16000000
      6. '**************************
      7. '-------< Stack >----------
      8. '**************************
      9. $hwstack = 40
      10. $swstack = 16
      11. $framesize = 32
      12. '**************************
      13. '---------< E/A >----------
      14. '**************************
      15. Ddrb = &B11111111 'port c 1 Ausgänge / 0 Eingänge
      16. Ddrc = &B11110011 'port c 1 Ausgänge / 0 Eingänge
      17. Ddrd = &B11110111 'port d 1 Ausgänge / 0 Eingänge
      18. '-------< pullup >---------
      19. Portd = &B00001000 ' Pullups Taster
      20. '**************************
      21. '--------< Const >---------
      22. '**************************
      23. Const Gesch = 2
      24. Const Num_leds = 60
      25. Const Leds = 12
      26. Const Num_leds_1 = Num_leds - 1
      27. Const Num_leds_x = Num_leds - Leds
      28. Const Num_leds_2 = Num_leds / 2
      29. Const Alignment = 768 / Num_leds 'Aufteilung des Farbspektrums auf die Anzahl der LEDs
      30. Const Start_timer0 = 241
      31. '*****************************
      32. '----------< Dim >-----------
      33. '*****************************
      34. Dim Farbe(3) As Byte
      35. Dim Farb(3) As Byte
      36. Dim Zaehler_uhr As Word
      37. Dim Richtung As Byte
      38. Dim Pos As Word
      39. Dim a As Word
      40. dim b as byte
      41. Dim Zaehler As Byte
      42. Dim Adc0 As Integer
      43. Dim Farb_wert As Word
      44. Dim Dimmen As Byte
      45. Dim Merker As Byte
      46. Dim Z As Byte
      47. Dim Pos_z As Byte
      48. Dim Menue As Byte
      49. dim sekunden as word
      50. '*****************************
      51. '--------< Config >-----------
      52. '*****************************
      53. Config Rainbow = 1 , Rb0_len = Num_leds , Rb0_port = Portb , Rb0_pin = 0
      54. Config Timer0 = Timer , Prescale = 1024
      55. '*****************************
      56. '--------< Alias >------------
      57. '*****************************
      58. Rot Alias Farbe(_base)
      59. Gruen Alias Farbe(_base + 1)
      60. Blau Alias Farbe(_base + 2)
      61. Rb_selectchannel 0
      62. Pos = 0
      63. do
      64. gosub sollfarbe
      65. for zaehler=0 to 4 '5x
      66. Rb_setcolor zaehler , Farbe(1)
      67. waitms 200
      68. b= Num_leds_1 -zaehler
      69. Rb_setcolor b, Farbe(1)
      70. waitms 100
      71. Rb_send
      72. next
      73. For A = 1 To Num_leds_2 - 1
      74. Rb_shiftright 0 ,Num_leds_2 'shift to the right
      75. Rb_shiftleft Num_leds_2 ,Num_leds_2 'Alle LEDs bis auf die letzte nach links verschieben
      76. waitms 100
      77. Rb_send
      78. Next
      79. gosub f_rot
      80. Rb_setcolor Num_leds_2, Farbe(1)
      81. Rb_setcolor Num_leds_2-1, Farbe(1)
      82. waitms 100
      83. Rb_send
      84. For A = 1 To Num_leds_2 - 1
      85. Rb_shiftleft 0 , Num_leds_2 'Alle LEDs bis auf die letzte nach links verschieben
      86. Rb_shiftright Num_leds_2 , Num_leds 'shift to the right
      87. waitms 100
      88. Rb_send
      89. Next
      90. Loop
      91. Hintergrundfarbe:
      92. Rot = 0 '200
      93. Gruen = 0 '200
      94. Blau = 0 '200
      95. Return
      96. Sollfarbe:
      97. Rot = 0
      98. Gruen = 0
      99. Blau = 255
      100. Return
      101. f_rot:
      102. Rot = 255
      103. Gruen = 0
      104. Blau = 0
      105. return
      Alles anzeigen
    • Hier ist mal mein Code, das funktioniert momentan mit nur einem Fehler.
      Und zwar in der letzten For Schleife wo die LEDs wieder zurück laufen,
      bleibt eine LED stehen und nur 4 LEDs werden wieder nach rechts
      geschoben(die linke Seite funktioniert), das in der Mitte(das 5te LED)
      leuchtet Fröhlich weiter und bleibt dort stehen.
      Den Fehler habe ich noch nicht gefunden.

      Wer findet den Fehler :D

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. const Ledanzahl = 56
      7. Config RAINBOW = 1 , RB0_LEN = Ledanzahl , RB0_PORT = PORTb , rb0_pin = 0
      8. ' ^-- using rgbW leds #### MUST BE FIRST PARAMETER when defined ###
      9. ' ^ connected to pin 0
      10. ' ^------------ connected to portB
      11. ' ^-------------------------- 8 leds on stripe
      12. ' ^------------------------------------- 1 channel
      13. 'Global Color-variables
      14. Dim Color(4) as Byte
      15. R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
      16. Dim i As Byte
      17. Dim Led_zaehler As Byte
      18. R = 50 : G = 0 : B = 0
      19. 'Kanal Auswahl**************************************************************************
      20. Rb_selectchannel 0 'Kanal Auswahl
      21. 'Hauptprogramm beginn*****************************************************************
      22. Do
      23. '5 LEDs hinterinander Anschalten
      24. For Led_zaehler = 0 to Ledanzahl - 52
      25. R = 50 : G = 0 : B = 0
      26. RB_SetColor Led_zaehler , color(1)
      27. i = Ledanzahl - Led_zaehler
      28. i = i - 1
      29. RB_SetColor i, color(1)
      30. RB_Send
      31. Waitms 500
      32. Next Led_zaehler
      33. Waitms 1000
      34. 'Die 5 LEDs von Links und Rechts bis in die Mitte Laufen lassen
      35. For Led_zaehler = 0 To Ledanzahl - 34 Step 1 '4 LEDs werden nach Rechts verschoben
      36. R = 50 : G = 0 : B = 0
      37. Rb_Shiftright Led_zaehler, 6 'Bewege nach rechts Start , 4LEDs +1 angeben
      38. i = i - 1
      39. Rb_Shiftleft i, 6
      40. Rb_send 'An LED senden
      41. Print i
      42. Waitms 1000 'Warte
      43. Next Led_zaehler
      44. Waitms 500
      45. 'Die 5 LEDs Links und Rechst wieder nach aussen laufen lassen
      46. For Led_zaehler = Ledanzahl - 34 To 0 Step - 1 '4 LEDs werden nach Rechts verschoben
      47. R = 50 : G = 0 : B = 0
      48. Rb_Shiftleft Led_zaehler, 6 'Bewege nach rechts Start , 4LEDs +1 angeben
      49. i = i + 1
      50. Rb_Shiftright i, 6
      51. Rb_send 'An LED senden
      52. Waitms 1000 'Warte
      53. Next Led_zaehler
      54. Loop
      Alles anzeigen
    • Ich weiß nicht genau wie du das haben möchtest. So vielleicht?

      Quellcode

      1. **************************
      2. '--------< Chip >----------
      3. '**************************
      4. $regfile = "m328pdef.dat" ' Arduino nano v.3.0
      5. $crystal = 16000000
      6. '**************************
      7. '-------< Stack >----------
      8. '**************************
      9. $hwstack = 40
      10. $swstack = 16
      11. $framesize = 32
      12. '**************************
      13. '---------< E/A >----------
      14. '**************************
      15. Ddrb = &B11111111 'port c 1 Ausgänge / 0 Eingänge
      16. Ddrc = &B11110011 'port c 1 Ausgänge / 0 Eingänge
      17. Ddrd = &B11110111 'port d 1 Ausgänge / 0 Eingänge
      18. '-------< pullup >---------
      19. Portd = &B00001000 ' Pullups Taster
      20. '**************************
      21. '--------< Const >---------
      22. '**************************
      23. Const Gesch = 2
      24. Const Num_leds = 60
      25. Const Leds = 12
      26. Const Num_leds_1 = Num_leds - 1
      27. Const Num_leds_x = Num_leds - Leds
      28. Const Num_leds_2 = Num_leds / 2
      29. Const Alignment = 768 / Num_leds 'Aufteilung des Farbspektrums auf die Anzahl der LEDs
      30. Const Start_timer0 = 241
      31. '*****************************
      32. '----------< Dim >-----------
      33. '*****************************
      34. Dim Farbe(3) As Byte
      35. Dim Farb(3) As Byte
      36. Dim Zaehler_uhr As Word
      37. Dim Richtung As Byte
      38. Dim Pos As Word
      39. Dim a As Word
      40. dim b as byte
      41. Dim Zaehler As Byte
      42. Dim Adc0 As Integer
      43. Dim Farb_wert As Word
      44. Dim Dimmen As Byte
      45. Dim Merker As Byte
      46. Dim Z As Byte
      47. Dim Pos_z As Byte
      48. Dim Menue As Byte
      49. dim sekunden as word
      50. '*****************************
      51. '--------< Config >-----------
      52. '*****************************
      53. Config Rainbow = 1 , Rb0_len = Num_leds , Rb0_port = Portb , Rb0_pin = 0
      54. Config Timer0 = Timer , Prescale = 1024
      55. 'Config Adc = Single , Prescaler = Auto , Reference = Avcc
      56. '-------< COM >------------
      57. Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      58. Config Debounce = 30
      59. '*****************************
      60. '--------< Alias >------------
      61. '*****************************
      62. Rot Alias Farbe(_base)
      63. Gruen Alias Farbe(_base + 1)
      64. Blau Alias Farbe(_base + 2)
      65. '*****************************
      66. '-----< Taster/LED >----------
      67. '*****************************
      68. 'Taster_1 Alias Pind.3
      69. 'Led_1 Alias Portd.5 'run LED
      70. 'Led_2 Alias Portd.6
      71. 'Led_3 Alias Portd.7
      72. '*****************************
      73. '------< funktion >-----------
      74. '*****************************
      75. '*****************************
      76. '----< Timer/Interrupt>-------
      77. '*****************************
      78. Timer0 = Start_timer0
      79. On Timer0 Timer_0 'timer 0 überlauf --> unterprogramm timer_0
      80. Enable Timer0
      81. Enable Interrupts
      82. Rb_selectchannel 0
      83. Pos = 0
      84. Do
      85. gosub sollfarbe
      86. for zaehler=0 to 4 '5x
      87. Rb_setcolor zaehler , Farbe(1)
      88. waitms 200
      89. b= Num_leds_1 -zaehler
      90. Rb_setcolor b, Farbe(1)
      91. gosub anzeigen
      92. next
      93. For A = 1 To Num_leds_2 - 5
      94. RB_ROTATERIGHT 0, Num_leds_2
      95. RB_ROTATEleft Num_leds_2 ,Num_leds_2
      96. 'Rb_shiftright 0 ,Num_leds_2 'shift to the right
      97. 'Rb_shiftleft Num_leds_2 ,Num_leds_2 'Alle LEDs bis auf die letzte nach links verschieben
      98. gosub anzeigen
      99. Next
      100. For A = 1 To Num_leds_2 - 5
      101. RB_ROTATEleft 0 , Num_leds_2
      102. RB_ROTATEright Num_leds_2 , Num_leds
      103. 'Rb_shiftleft 0 , Num_leds_2 'Alle LEDs bis auf die letzte nach links verschieben
      104. 'Rb_shiftright Num_leds_2 , Num_leds 'shift to the right
      105. gosub anzeigen
      106. Next
      107. Loop
      108. Hintergrundfarbe:
      109. Rot = 0 '200
      110. Gruen = 0 '200
      111. Blau = 0 '200
      112. Return
      113. Sollfarbe:
      114. Rot = 0
      115. Gruen = 0
      116. Blau = 255
      117. Return
      118. f_rot:
      119. Rot = 255
      120. Gruen = 0
      121. Blau = 0
      122. return
      123. anzeigen:
      124. waitms 100
      125. Disable Interrupts
      126. Rb_send
      127. enable interrupts
      128. return
      129. '**************************
      130. '-------< Timer >----------
      131. '**************************
      132. Timer_0: '1 ms
      133. Timer0 = Start_timer0
      134. Incr Zaehler_uhr
      135. If Zaehler_uhr = 1000 Then
      136. Zaehler_uhr = 0
      137. ' Toggle Led_1
      138. incr sekunden
      139. End If
      140. Return
      141. end
      Alles anzeigen
    • businski schrieb:

      Ich weiß nicht genau wie du das haben möchtest. So vielleicht?
      Hallo @businski,

      hab deinen Code mal getestet und er funktioniert so wie ich meinte, danke. a_57_04ef5ee8


      Pluto25 schrieb:

      Tausch mal Zeile 49 mit 50
      Danke @Pluto25,

      das war der springende Punkt jetzt funtioniert es. a_57_04ef5ee8

      Hier nun wie er funktioniert:

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. const Ledanzahl = 56
      7. Config RAINBOW = 1 , RB0_LEN = Ledanzahl , RB0_PORT = PORTb , rb0_pin = 0
      8. ' ^-- using rgbW leds #### MUST BE FIRST PARAMETER when defined ###
      9. ' ^ connected to pin 0
      10. ' ^------------ connected to portB
      11. ' ^-------------------------- 8 leds on stripe
      12. ' ^------------------------------------- 1 channel
      13. 'Global Color-variables
      14. Dim Color(4) as Byte
      15. R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
      16. Dim i As Byte
      17. Dim Led_zaehler As Byte
      18. R = 50 : G = 0 : B = 0
      19. 'Kanal Auswahl**************************************************************************
      20. Rb_selectchannel 0 'Kanal Auswahl
      21. 'Hauptprogramm beginn*******************************************************************
      22. Do
      23. '5 LEDs hinterinander Anschalten je links und rechts
      24. For Led_zaehler = 0 to Ledanzahl - 52
      25. RB_SetColor Led_zaehler , color(1)
      26. i = Ledanzahl - Led_zaehler 'Farbe setzen für LED links
      27. i = i - 1 'Beginn zuweisen
      28. RB_SetColor i, color(1) 'Runter zählen
      29. RB_Send 'Farbe setzen für LED rechts
      30. Waitms 50 'An LED senden
      31. Next Led_zaehler
      32. Waitms 100
      33. 'Die 5 LEDs von Links und Rechts bis in die Mitte Laufen lassen
      34. For Led_zaehler = 0 To Ledanzahl - 34 Step 1 '5 LEDs werden nach Rechts verschoben
      35. Rb_Shiftright Led_zaehler, 6 'Bewege nach rechts Start , 4LEDs +1 angeben
      36. i = i - 1 'Runter zählen
      37. Rb_Shiftleft i, 6 'Nach Links schieben
      38. Rb_send 'An LED senden
      39. Waitms 50 'Warte
      40. Next Led_zaehler
      41. Waitms 100
      42. 'Die 5 LEDs Links und Rechst wieder nach aussen laufen lassen
      43. For Led_zaehler = Ledanzahl - 34 To 0 Step - 1 '5 LEDs werden nach Rechts verschoben
      44. 'R = 50 : G = 0 : B = 0
      45. Rb_Shiftleft Led_zaehler, 6 'Bewege nach rechts Start , 4LEDs +1 angeben
      46. Rb_Shiftright i, 6 'Nach Rechts schieben
      47. i = i + 1 'Hoch zählen
      48. Rb_send 'An LED senden
      49. Waitms 100 'Warte
      50. Next Led_zaehler
      51. Loop
      Alles anzeigen
    • Mitch64 schrieb:

      Da dein Programm jetzt läuft, schaust du dir trotzdem noch den Code aus Post 14 an?
      Ja, das hab ich mir sogar als Mitch64 abgespeichert.

      Hier bekomme ich aber 2 Fehlermeldungen und weiß nicht wie ich die weg bekomme.

      Error : 117 Line : 54 Unknown interrupt [OC2]
      Error : 85 Line : 55 Unknown interrupt source [OC2]

      BASCOM-Quellcode

      1. ' Knight-Rider Effekt
      2. ' Prinzip-Ansatz mit LED'Strips
      3. ' Modul: KnightRider.bas
      4. ' Autor: Mitch64
      5. ' Erstellt: 09.10.2021
      6. $Regfile = "m328pdef.dat"
      7. $HWStack = 30
      8. $SWStack = 40
      9. $FrameSize = 40
      10. $Crystal = 8000000
      11. Config Pinb.0 = Output
      12. ' ----------------------------------------------
      13. ' Konfiguration des Effekts
      14. ' Hier kann eingestellt werden, wie schnell der
      15. ' Lauflicht-Effekt ablaufen soll, und wie
      16. ' schnell abgedimmt werden soll.
      17. ' Da der Timer2 mit 1kHz läuft und die
      18. ' Counter-Werte runter-gezählt werden,
      19. ' entsprechen die Werte ms.
      20. ' ----------------------------------------------
      21. Const INTERVAL_EFFEKT = 500 ' Geschwindigkeit des Lauf-Effekts
      22. Const INTERVAL_DIMMEN = 20 ' Geschwindigkeit des Abdimmens
      23. ' ----------------------------------------------
      24. ' interne Variablen, werden von
      25. ' ISR_Timer2 verwendet
      26. ' ----------------------------------------------
      27. Dim Count_Effekt as Word
      28. Dim Count_Dimmen as Word
      29. ' ----------------------------------------------
      30. ' Variable
      31. ' ----------------------------------------------
      32. Dim Effekt_Step as Byte ' Variable beinhalten den Schritt des Effekts
      33. ' ----------------------------------------------
      34. ' Flags, die anzeigen, ob das Lauflicht bewegt
      35. ' oder gedimmt werden soll.
      36. ' ----------------------------------------------
      37. Dim Flag_Effekt as Bit ' Lauf-Effekt
      38. Dim Flag_Dimmen as Bit ' Dimmen
      39. ' ----------------------------------------------
      40. ' Timer2 wird als Zeitbasis verwendet und
      41. ' generiert einen Interrupt alle 1ms (1kHz)
      42. ' und ruft damit die Routine ISR_Timer2 auf.
      43. ' ----------------------------------------------
      44. Dim Compare2 As Byte
      45. Dim OC2 As Long
      46. Config Timer2 = Timer , Prescale = 32 , CLEAR_TIMER = 1
      47. Compare2 = 250 - 1
      48. On OC2 ISR_Timer2
      49. Enable OC2
      50. Enable Interrupts
      51. ' ----------------------------------------------------------------------------
      52. ' Hauptschleife
      53. ' ----------------------------------------------------------------------------
      54. Do
      55. ' ----------------------------------------
      56. ' Hier wird der Lauflicht-Effekt gesteuert
      57. ' (Prozess 1)
      58. ' ----------------------------------------
      59. If Flag_Effekt = 1 then ' Lauflicht nächste LED anschalten
      60. Reset Flag_Effekt ' Flag löschen nicht vergessen!
      61. ' Hier muss noch unterschieden werden,
      62. ' welche LED nun anzusteuern ist. Diese
      63. ' wird dann voll ausgesteuert (max. Helligkeit)
      64. ' Das Abdimmen wird von der nachfolgenden
      65. ' Dimm-Routine (If Flag_Dimmen...) erledigt.
      66. ' Beispiel mit 7 LED's (LED1 ganz links, LED 7 ganz rechts)
      67. Select Case Effekt_Step
      68. Case 0 ' Effekt-Schritt 0
      69. ' LED1 und 7 aussteuern
      70. Incr Effekt_Step ' nächster Step
      71. Case 1 ' Effekt-Schritt 1
      72. ' LED2 und 6 aussteuern
      73. Incr Effekt_Step ' nächster Step
      74. Case 2 ' Effektschritt 2
      75. ' LED3 und 5 aussteuern
      76. Incr Effekt_Step ' nächster Step
      77. Case 3 ' Effekt-Schritt 3
      78. ' LED4 (mittige LED) aussteuern
      79. Incr Effekt_Step ' nächster Step
      80. Case 4 ' Effekt-Schritt 4
      81. ' LED3 und 5 aussteuern
      82. Incr Effekt_Step ' nächster Step
      83. Case 5 ' Effekt-Schritt 5
      84. ' LED2 und 6 aussteuern
      85. Incr Effekt_Step ' nächster Step
      86. Effekt_Step = 0 ' dann wieder von vorne
      87. End Select
      88. End If
      89. ' --------------------------------
      90. ' Hier wird das Abdimmen gesteuert
      91. ' (Prozess 2)
      92. ' --------------------------------
      93. If Flag_Dimmen = 1 then
      94. Reset Flag_Dimmen ' Flag löschen nicht vergessen
      95. ' Hier werden alle LED's in der Helligkeit reduziert.
      96. ' Werte die bereits auf 0 sind bleiben unberührt.
      97. ' Dadurch entsteht der Nachleucht-Effekt
      98. End If
      99. Loop
      100. ' ----------------------------------------------
      101. ' Die ISR_Timer2 wird regelmäßig (alle 1ms)
      102. ' aufgerufen. Sie bestimmt die Zeitpunkte, wann
      103. ' das Lauflich bewegt oder gedimmt werden soll.
      104. ' Dafür werden die Flags
      105. ' Flags_Effect und Flag_Dimm gesetzt.
      106. ' ----------------------------------------------
      107. ISR_Timer2:
      108. ' Intervall für Laufeffekt erzeugen
      109. If Count_Effekt = 0 then
      110. Set Flag_Effekt ' Flag setzen, Lauflicht soll bewegt werden
      111. Count_Effekt = INTERVAL_EFFEKT ' Effekt-Zähler rücksetzen
      112. Else
      113. Decr Count_Effekt
      114. End If
      115. ' Intervall für Abdimmen erzeugen
      116. If Count_Dimmen = 0 then
      117. Set Flag_Dimmen ' Flag setzen, es soll gedimmt werden
      118. Count_Dimmen = INTERVAL_DIMMEN ' Dimm-Zähler rücksetzen
      119. Else
      120. Decr Count_Dimmen
      121. End If
      122. Return
      Alles anzeigen

      Du hast ja folgendes geschrieben:

      Quellcode

      1. Im Code musst du noch die Ansteuerung der Strips ergänzen, Variablen dafür anlegen und natürlich die Lib einbinden.
      Leider geht es mir bei deinem Code wie in Post 33 von businski seinem Code, als Anfänger Stürmt da ganz schön viel ein mit viel und sehr viel ?(