RGB faden mit IR Fernbedienung

    RGB faden mit IR Fernbedienung

    Da ich so gut wie kein Plan vom Programmieren habe und in meinem Vorhaben nicht weiterkomme muss ich mich jetzt mal an euch wenden und hoffe auf Tipps und Anregungen ;)

    mein Vorhaben:
    Ich will mit einer IR Fernbedienung die Farben eines RGB Strips faden.

    was schon funktioniert:
    Bisher bekomme ich schon die entsprechenden Farben an und aus geschalten genauso ich per Tastendruck die einzelnen Farben schrittweise ändern kann. Dies ganze läuft über MOSFETS.

    Hier erstmal mein Sketch:

    Quellcode

    1. #include <IRremote.h>
    2. int RECV_PIN = 11;
    3. IRrecv irrecv(RECV_PIN);
    4. decode_results results;
    5. const int redPin1 = 3;
    6. const int greenPin1 = 2;
    7. const int bluePin1 = 4;
    8. byte r1 = 0;
    9. byte g1 = 0;
    10. byte b1 = 0;
    11. void setup() {
    12. Serial.begin(9600);
    13. irrecv.enableIRIn();
    14. pinMode(redPin1, OUTPUT);
    15. pinMode(greenPin1, OUTPUT);
    16. pinMode(bluePin1, OUTPUT);
    17. }
    18. void loop() {
    19. if (irrecv.decode(&results)) {
    20. Serial.println(results.value);
    21. unsigned int value = results.value;
    22. switch (results.value) {
    23. case 16753245:
    24. allout();
    25. break;
    26. case 16724175:
    27. redUp1();
    28. break;
    29. case 16718055:
    30. redDown1();
    31. break;
    32. case 16716015:
    33. greenUp1();
    34. break;
    35. case 16726215:
    36. greenDown1();
    37. break;
    38. case 16728765:
    39. blueUp1();
    40. break;
    41. case 16730805:
    42. blueDown1();
    43. break;
    44. case 16743045:
    45. red();
    46. break;
    47. case 16734885:
    48. green();
    49. break;
    50. case 16732845:
    51. blue();
    52. break;
    53. case 16738455:
    54. white();
    55. break;
    56. }
    57. irrecv.resume();
    58. }
    59. }
    60. void redUp1() {
    61. if (irrecv.decode(&results)) {
    62. if (results.value == 16724175) {
    63. if (r1 < 125 || r1 == 125) {
    64. r1 = r1 + 5;
    65. } else {
    66. if (r1 > 250 || r1 == 255) {
    67. r1 = 255;
    68. } else {
    69. if (r1 > 125) {
    70. r1 = r1 + 25;
    71. }
    72. }
    73. }
    74. analogWrite(redPin1, r1);
    75. Serial.print("RED UP left ");
    76. Serial.println(r1);
    77. }
    78. irrecv.resume();
    79. }
    80. }
    81. void redDown1() {
    82. if (irrecv.decode(&results)) {
    83. if (results.value == 16718055) {
    84. if (r1 == -0 || r1 == -5) {
    85. r1 = 0;
    86. } else {
    87. if (r1 < 125 || r1 == 125) {
    88. r1 = r1 - 5;
    89. } else {
    90. if (r1 > 126 || r1 == 255) {
    91. r1 = r1 - 25;
    92. }
    93. }
    94. }
    95. analogWrite(redPin1, r1);
    96. Serial.print("RED DOWN left ");
    97. Serial.println(r1);
    98. }
    99. irrecv.resume();
    100. }
    101. }
    102. void red() {
    103. if (irrecv.decode(&results)) {
    104. if (results.value == 16743045 ) {
    105. r1 = 255;
    106. g1 = 0;
    107. b1 = 0;
    108. }
    109. analogWrite(redPin1, r1);
    110. analogWrite(greenPin1, g1);
    111. analogWrite(bluePin1, b1);
    112. Serial.print("RED 100% left ");
    113. Serial.println(r1);
    114. }
    115. irrecv.resume();
    116. }



    Hab mal die anderen case`s rausgelassen da es ja die gleichen sind.

    Jetzt nochma zu meinem Ziel:

    1. Wenn ich eine Farbe drücke, z.B. Blau, möchte ich das auf diese Farbe gefadet wird. Egal ob der Strip aus ist oder in einer anderen beliebigen Farbe leuchtet.
    2. Dies ist eigntlich erstmal sekundär aber wenn ich schon dabei bin zu Fragen dann würde ich auch gern dies wissen:

    und zwar sieht man in meinem Sketch das ich die einzelnen Farben schrittweise leuchten oder dimmen lassen kann. Dazu muss ich aber immer wieder auf die Taste drücken da das selbe Signal von der Fernbedienung nicht wiederholt kommt.
    z.B. ich bekomme in der seriellen Ausgabe diesen IR code angezeigt: 16743045 und wenn ich auf der Taste drauf bleibe kommt dieser längere IR Code: 4294967295 immer wieder.

    Wie kann ich dies in meinen Sketch mit einbauen das trotzdem manuell weiter gefadet wird solange ich auf der Taste bleibe?

    Für Hilfestellungen und paar Codezeilen wäre ich sehr dankbar, is auch selbstverständlich das ich mich genauso in die Materie mit reinlese und erwarte kein komplett geschriebenen Sketch ;)

    Gruß RmK