Hallo.
Bin mir nicht sicher, ob ich deine Frage richtig verstanden habe.
"Gleichzeitig" gibt es nicht. Ich kenne zwar deinen Code nicht, aber ich denke, du hast generell Probleme mit dem Timing.
Da hilft eine so genannte Time-Machine Abhilfe.
Sieh dir mal das Thema Timer Interrupt an: Arduino Playground - HomePage
Statt wie in dem Beispiel Code:
#include "TimerOne.h"
void setup()
{
pinMode(10, OUTPUT);
Timer1.initialize(500000); // initialize timer1, and set a 1/2 second period
Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
}
void callback()
{
digitalWrite(10, digitalRead(10) ^ 1);
}
void loop()
{
// your program here...
}
Könnte so eine Time-Machine in etwa so aussehen.
(NUR BEISPIELHAFT! NICHT GETESTET!)
1. #include "TimerOne.h"
2. volatile int sd_lesen = 0;
3. volatile int rgb_refresh = 0;
4. volatile int v_warte = 0; // statt delay()
5.
6. // und noch weitere Variablen, die du für dein Timing brauchst...
7. int daten_gelesen =0;
8. void setup()
9. {
10.
11. Timer1.initialize(1000); // 1 millisekunde
12. Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
13. }
14.
15. void callback()
16. {
17. sd_lesen++;
18. rgb_refresh++;
19. v_warte++;
20. }
21.
22. void loop()
23. {
24. // your program here...
25. // nur als Beispiel!!!
26.
27. // alle 20 Millisekunden von sd lesen…
28. if(sd_lesen == 20 && daten_gelesen == 0){
29. sd_karte_lesen();
30. daten_gelesen = 1;
31. rgb_refresh = 0;
32. }
33. // damit werden alle 40 Millisekunden die LEDs updated
34. // = 25 Bilder pro sekunde
35. if(daten_gelesen == 1 && rgb_refresh == 20)
36. {
37. daten_gelesen = 0;
38. rgb_refresh();
39. }
40. // und es bleibt genug Zeit für alles mögliche...
41.
42. // hier noch ein Ersatz für die delay() Routine;
43. // aufruf:
44. // v_warte =0; // muss vorher auf null gesetzt werden
45. // warte(100); // warte 100 milisekunden
46. void warte(int wielange) {
47. while (v_warte != wielange) {}
48. }
49.
50. void sd_karte_lesen() {
51. sd_lesen = 0;
52. // dein Code zum lesen von der SD Karte...
53. }
54. void rgb_update()={
55. rgb_refresh = 0;
56. // dein Code für den demultiplexer...
57. }
Was das Demultiplexing angeht, so lassen sich mehrer Demultiplexer in reihe Schalten. Tutorials gibt es dazu einige im Netz.
Falls ich deine Frage falsch verstanden habe, tut es mir leid. Dann vergiss was ich geschrieben habe. ![]()