Hallo zusammen, ich habe mehrere Arduinos (ca. 21 Micro 1x DUE) an verschiendenen Positionen und möchte diese miteinander verbinden. Da die Strecken nicht unbedingt so nah beieinander liegen (ges. < 12m) und 22 USB Ports doch etwas viel sind, würde ich diese gerne per Can Bus verbinden. Leider finde ich keine gute oder zumindest für mich verständliche Erklärung (absoluter Anfänger) oder Leitfaden/Beispiele. Kennt sich jemand damit aus bzw kann mir das erklären, oder dabei helfen, das Problem zu lösen. Setup: 21x Arduino Micro sollen mit 1x Due komunizieren. Beispiel: Modul 1: 6x Taster inkl. je eine RGB LED für Rückmeldung, sowie 4 RGB LED für Dekobeleuchtung Taster 1 bis 6 geben die Buchstaben A,B,C,D,E und F aus. Je nachdem, wie der Zustand ist, wechselt die LED von rot auf grün oder umgekehrt. Die erste Taste gibt somit zb nach Betätigung von Taster T1 ein (A) aus und die LED wechselt von Rot auf grün. Tastet man erneut, wird wieder ein (A) ausgegeben und die LED wechselt auf rot zurück. (Schaltung ist korrekt auf einem Board aufgebaut, entprellt und funktioniert) Die Signalkette bei einem Tastendruck wäre dann beispielsweise: Taster T1 wird gedrückt vom Arduino Micro (AM1) wird ein Signal zur LED gesendet, dass diese von der aktuellen, zur wechselnden Farbe wechseln soll gleichzeitig vom Micro (AM1) soll ein Signal über Can Bus zum Due (AD1) gesendet werden vom Due (AD1) geht dann das Signal über das USB Kabel zum PC auf dem PC wird dann ein A (Keyboardsimulation) ausgegeben Die Signalkette bei einem Farbwechsel der Deko RGB LEDs wäre dann beispielsweise: von einer Software wird ein Wert X ausgegeben dieser wird per USB zum Due (AD1) gesendet vom Due (AD1) soll ein Signal über Can Bus zu den Micro´s (AM1 bis AM20) gesendet werden die Micro´s (AM1 bis AM20) geben dann den Wert an die RGB LEDS aus, welche dann ihre Farbe ändern Ziel: Das gesamte System soll, wie oben beschrieben, die Signale und Abfragen von (Micro und Due) über Can Bus ausgeben, beziehungsweise Senden und Empfangen. Lg Dee
Hallo, ich glaube nicht, dass dafür der CAN-Bus das richtige Übertragungsmedium ist, denn du brauchst für jeden Arduino noch einen CAN-Controller. Das Protokoll ist für diesen Micro zu aufwändig. Schau doch mal, ob es nicht auch mit RS422/RS485 zu lösen wäre und auf der Kommandoebene reine ASCII-Texte ausreichen? Servus, Helmut.
:
Bearbeitet durch User
Ein CAN ist für diese Aufgabe genau richtig, nur: der AVR kann direkt kein CAN. Dafür gibt's aber Shields, bzw. ziemlich sicher auch Boards, und der dort enthaltene Chip (z.B. MCP2515) kümmert sich ganz allein um das Protokoll. Damit ist Quittierung, Codierung, Fehlerkontrolle, Kollisionserkennung und Vorfilterung in Hardware erledigt, der AVR muss nur noch Nachrichten erzeugen und auswerten. Da CAN ja Events mit bis zu 8 Byte Nutzlast verschickt, wird die Geschichte soar relativ einfach.
Hallo, Das Problem ist, dass in einer vorangegangenen Diskussion immer wieder der Arduino Mirco, der Due und die MCP 2515 als am sinnvollsten gesehen wurden. Nach einer etwas längeren Pause habe ich aktuell wieder damit angefangen und zum Preis von 4,50 für ein Arduino Micro + MCP2515 ist es im verhältnis recht Preiswert. Aber danke für dein versuch. lg
Hallo Jens, dein ....soar relativ einfach.... ist hoffentlich das Zeichen, dass du dich damit auskennst und mir genau verklickern kannst, wie die Sch.... aussehen muss bzw ich das hin bekomme. lg
Den MCP hab ich noch nicht benutzt, sondern PICs mit eingebautem CAN. Aber es gibt Shields und Libraries für Arduino, da sollte es auch nicht so schwer sein. Im Prinzip musst du nur eine Nachricht "komponieren" und dem Chip geben, der kümmert sich um den Versand. Dazu gibt es einen Status, den du abfragen musst, der sagt dir Fehler und Erfolg, außerdem ob Post für dich da ist. Normalerweise hat der CAN-controller auch Filter, damit kannst du bestimmte Events ignorieren oder freigeben, und der Controller gibt einen Interrupt ab wenn eine Nachricht angekommen ist auf die der Filter passt. Der AVR kann sich also voll und ganz darauf konzentrieren, Nachrichten zu entziffern bzw. zu schreiben, der CC macht die Post. Was du in die Payload schreibst und welche IDs welche Farbe oder Taste sind ist völlig deiner Fantasie überlassen. Das ist das eigentliche Problem. CAN wird mit so einem Controller vom Umfang eher wie ein Display oder eine RTC. Das hat mit einer Schnittstelle nicht viel zu tun, da Fehlerbehandlung und einiges Mehr in der Hardware des Controllers laufen. Also: 2 Shields kaufen, verstrippen und spielen. Dann kommst du schnell dahinter.
Die Module sollten in den nächsten Wochen kommen. Die Arudino Skatche habe ich ja soweit zusammen, aber ich habe kein Plan wie ich das mit dem Can hin bekommen soll. Bin, wenn man es so will, absoluter Neuling auf der Micro Controller Bereich und habe mir die ersten 19 der benötigten 22 Skatche zusammen basteln können (funktioniert auch alles im "solo" Betrieb per USB). Aktuell hängt es noch bei 3 Punkten under anderem halt dem Can BUS. Ich verstehe es einfach nicht. Was ein Bus ist, ist mir klar und so aber der Skatch, wie ich jettzt was schreiben muss auf Controller 1 2 3 usw - kein Plan.
- Setze Filter auf Nachricht mt ID 1, 2 & 3, das sind R, G und B - Warte bis Filter IRQ auslöst - Lies Nachricht -- ID=1? Dann R = Payload -- ID=2? Dann G = Payload -- ID=3? Dann B = Payload Das Sendeende funzt ähnlich: - Bekomme RGB - Erzeuge Nachricht mit ID 1 Payload = R - Warte bis abgeschickt - Erzeuge Nachricht mit ID 2 Payload = G - ...
Könntest du mir anhand von dem nachfolgendem Skatch (für den Arduino Mirco 1 bis 8)das mal zeigen. Der andere Skatch vom DUE ist noch nicht angefangen. Eine Besonderheit wäre noch, dass es durch eine IF/ELSE Abfrage einmal Solo und einmal über CAN BUS betrieben werden soll. Sprich, wenn der Schalter offen ist, wird es "Solo" betrieben. Wenn der Schalter geschlossen ist, wird es im "CAN-Modus" betrieben.
1 | #include <Keyboard.h> |
2 | #include <FastLED.h> |
3 | #define LED_PIN 9
|
4 | #define NUM_LEDS 10
|
5 | #define BUTTON_KEY1 97
|
6 | #define BUTTON_KEY2 98
|
7 | #define BUTTON_KEY3 99
|
8 | #define BUTTON_KEY4 100
|
9 | #define BUTTON_KEY5 101
|
10 | #define BUTTON_KEY6 102
|
11 | CRGB leds[NUM_LEDS]; |
12 | |
13 | const int buttonPin1 = 2; |
14 | const int buttonPin2 = 4; |
15 | const int buttonPin3 = 5; |
16 | const int buttonPin4 = 6; |
17 | const int buttonPin5 = 7; |
18 | const int buttonPin6 = 8; |
19 | |
20 | int merker1 = 0; |
21 | int merker2 = 0; |
22 | int merker3 = 0; |
23 | int merker4 = 0; |
24 | int merker5 = 0; |
25 | int merker6 = 0; |
26 | |
27 | int buttonState1; |
28 | int buttonState2; |
29 | int buttonState3; |
30 | int buttonState4; |
31 | int buttonState5; |
32 | int buttonState6; |
33 | |
34 | int lastButtonState1 = LOW; |
35 | int lastButtonState2 = LOW; |
36 | int lastButtonState3 = LOW; |
37 | int lastButtonState4 = LOW; |
38 | int lastButtonState5 = LOW; |
39 | int lastButtonState6 = LOW; |
40 | |
41 | unsigned long lastDebounceTime1 = 0; |
42 | unsigned long lastDebounceTime2 = 0; |
43 | unsigned long lastDebounceTime3 = 0; |
44 | unsigned long lastDebounceTime4 = 0; |
45 | unsigned long lastDebounceTime5 = 0; |
46 | unsigned long lastDebounceTime6 = 0; |
47 | |
48 | unsigned long debounceDelay = 50; |
49 | |
50 | void setup() { |
51 | |
52 | Serial.begin(9600); |
53 | pinMode(buttonPin1, INPUT); |
54 | pinMode(buttonPin2, INPUT); |
55 | pinMode(buttonPin3, INPUT); |
56 | pinMode(buttonPin4, INPUT); |
57 | pinMode(buttonPin5, INPUT); |
58 | pinMode(buttonPin6, INPUT); |
59 | |
60 | FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); |
61 | Keyboard.begin(); |
62 | }
|
63 | |
64 | void loop() { |
65 | |
66 | //*********************Taster 1******************************
|
67 | |
68 | int reading1 = digitalRead(buttonPin1); |
69 | if (reading1 != lastButtonState1) { |
70 | lastDebounceTime1 = millis(); |
71 | }
|
72 | if ((millis() - lastDebounceTime1) > debounceDelay) { |
73 | if (reading1 != buttonState1) { |
74 | buttonState1 = reading1; |
75 | int reading = digitalRead(buttonPin1); |
76 | if ((buttonState1 == HIGH) && (merker1 == 2)) { |
77 | lastDebounceTime1 = millis(); |
78 | leds[0] = 0x00FF00; |
79 | FastLED.show(); |
80 | Keyboard.press(BUTTON_KEY1); |
81 | Keyboard.releaseAll(); |
82 | merker1 = 1; |
83 | }
|
84 | else if ((buttonState1 == HIGH) && (merker1 == 1)) |
85 | {
|
86 | leds[0] = 0xFF0000; |
87 | FastLED.show(); |
88 | Keyboard.press(BUTTON_KEY1); |
89 | Keyboard.releaseAll(); |
90 | merker1 = 0; |
91 | }
|
92 | }
|
93 | }
|
94 | else if ((buttonState1 == LOW) && (merker1 == 0)) |
95 | {
|
96 | leds[0] = 0xFF0000; |
97 | FastLED.show(); |
98 | merker1 = 2; |
99 | }
|
100 | lastButtonState1 = reading1; |
101 | |
102 | //*********************Taster 2******************************
|
103 | |
104 | int reading2 = digitalRead(buttonPin2); |
105 | if (reading2 != lastButtonState2) { |
106 | lastDebounceTime2 = millis(); |
107 | }
|
108 | if ((millis() - lastDebounceTime2) > debounceDelay) { |
109 | if (reading2 != buttonState2) { |
110 | buttonState2 = reading2; |
111 | int reading2 = digitalRead(buttonPin2); |
112 | if ((buttonState2 == HIGH) && (merker2 == 2)) { |
113 | lastDebounceTime2 = millis(); |
114 | leds[1] = 0x00FF00; |
115 | FastLED.show(); |
116 | Keyboard.press(BUTTON_KEY2); |
117 | Keyboard.releaseAll(); |
118 | merker2 = 1; |
119 | }
|
120 | else if ((buttonState2 == HIGH) && (merker2 == 1)) |
121 | {
|
122 | leds[1] = 0xFF0000; |
123 | FastLED.show(); |
124 | Keyboard.press(BUTTON_KEY2); |
125 | Keyboard.releaseAll(); |
126 | merker2 = 0; |
127 | }
|
128 | }
|
129 | }
|
130 | else if ((buttonState2 == LOW) && (merker2 == 0)) |
131 | {
|
132 | leds[1] = 0xFF0000; |
133 | FastLED.show(); |
134 | merker2 = 2; |
135 | }
|
136 | lastButtonState2 = reading2; |
137 | |
138 | //*********************Taster 3******************************
|
139 | |
140 | int reading3 = digitalRead(buttonPin3); |
141 | if (reading3 != lastButtonState3) { |
142 | lastDebounceTime3 = millis(); |
143 | }
|
144 | if ((millis() - lastDebounceTime3) > debounceDelay) { |
145 | if (reading3 != buttonState3) { |
146 | buttonState3 = reading3; |
147 | int reading3 = digitalRead(buttonPin3); |
148 | if ((buttonState3 == HIGH) && (merker3 == 2)) { |
149 | lastDebounceTime3 = millis(); |
150 | leds[2] = 0x00FF00; |
151 | FastLED.show(); |
152 | Keyboard.press(BUTTON_KEY3); |
153 | Keyboard.releaseAll(); |
154 | merker3 = 1; |
155 | }
|
156 | else if ((buttonState3 == HIGH) && (merker3 == 1)) |
157 | {
|
158 | leds[2] = 0xFF0000; |
159 | FastLED.show(); |
160 | Keyboard.press(BUTTON_KEY3); |
161 | Keyboard.releaseAll(); |
162 | merker3 = 0; |
163 | }
|
164 | }
|
165 | }
|
166 | else if ((buttonState3 == LOW) && (merker3 == 0)) |
167 | {
|
168 | leds[2] = 0xFF0000; |
169 | FastLED.show(); |
170 | merker3 = 2; |
171 | }
|
172 | lastButtonState3 = reading3; |
173 | |
174 | //*********************Taster 4******************************
|
175 | |
176 | int reading4 = digitalRead(buttonPin4); |
177 | if (reading4 != lastButtonState4) { |
178 | lastDebounceTime4 = millis(); |
179 | }
|
180 | if ((millis() - lastDebounceTime4) > debounceDelay) { |
181 | if (reading4 != buttonState4) { |
182 | buttonState4 = reading4; |
183 | int reading4 = digitalRead(buttonPin4); |
184 | if ((buttonState4 == HIGH) && (merker4 == 2)) { |
185 | lastDebounceTime4 = millis(); |
186 | leds[3] = 0x00FF00; |
187 | FastLED.show(); |
188 | Keyboard.press(BUTTON_KEY4); |
189 | Keyboard.releaseAll(); |
190 | merker4 = 1; |
191 | }
|
192 | else if ((buttonState4 == HIGH) && (merker4 == 1)) |
193 | {
|
194 | leds[3] = 0xFF0000; |
195 | FastLED.show(); |
196 | Keyboard.press(BUTTON_KEY4); |
197 | Keyboard.releaseAll(); |
198 | merker4 = 0; |
199 | }
|
200 | }
|
201 | }
|
202 | else if ((buttonState4 == LOW) && (merker4 == 0)) |
203 | {
|
204 | leds[3] = 0xFF0000; |
205 | FastLED.show(); |
206 | merker4 = 2; |
207 | }
|
208 | lastButtonState4 = reading4; |
209 | |
210 | //*********************Taster 5******************************
|
211 | |
212 | int reading5 = digitalRead(buttonPin5); |
213 | if (reading5 != lastButtonState5) { |
214 | lastDebounceTime5 = millis(); |
215 | }
|
216 | if ((millis() - lastDebounceTime5) > debounceDelay) { |
217 | if (reading5 != buttonState5) { |
218 | buttonState5 = reading5; |
219 | int reading5 = digitalRead(buttonPin5); |
220 | if ((buttonState5 == HIGH) && (merker5 == 2)) { |
221 | lastDebounceTime5 = millis(); |
222 | leds[4] = 0x00FF00; |
223 | FastLED.show(); |
224 | Keyboard.press(BUTTON_KEY5); |
225 | Keyboard.releaseAll(); |
226 | merker5 = 1; |
227 | }
|
228 | else if ((buttonState5 == HIGH) && (merker5 == 1)) |
229 | {
|
230 | leds[4] = 0xFF0000; |
231 | FastLED.show(); |
232 | Keyboard.press(BUTTON_KEY5); |
233 | Keyboard.releaseAll(); |
234 | merker5 = 0; |
235 | }
|
236 | }
|
237 | }
|
238 | else if ((buttonState5 == LOW) && (merker5 == 0)) |
239 | {
|
240 | leds[4] = 0xFF0000; |
241 | FastLED.show(); |
242 | merker5 = 2; |
243 | }
|
244 | lastButtonState5 = reading5; |
245 | |
246 | //*********************Taster 6******************************
|
247 | |
248 | int reading6 = digitalRead(buttonPin6); |
249 | if (reading6 != lastButtonState6) { |
250 | lastDebounceTime6 = millis(); |
251 | }
|
252 | if ((millis() - lastDebounceTime6) > debounceDelay) { |
253 | if (reading6 != buttonState6) { |
254 | buttonState6 = reading6; |
255 | int reading6 = digitalRead(buttonPin6); |
256 | if ((buttonState6 == HIGH) && (merker6 == 2)) { |
257 | lastDebounceTime6 = millis(); |
258 | leds[5] = 0x00FF00; |
259 | FastLED.show(); |
260 | Keyboard.press(BUTTON_KEY6); |
261 | Keyboard.releaseAll(); |
262 | merker6 = 1; |
263 | }
|
264 | else if ((buttonState6 == HIGH) && (merker6 == 1)) |
265 | {
|
266 | leds[5] = 0xFF0000; |
267 | FastLED.show(); |
268 | Keyboard.press(BUTTON_KEY6); |
269 | Keyboard.releaseAll(); |
270 | merker6 = 0; |
271 | }
|
272 | }
|
273 | }
|
274 | else if ((buttonState6 == LOW) && (merker6 == 0)) |
275 | {
|
276 | leds[5] = 0xFF0000; |
277 | FastLED.show(); |
278 | merker6 = 2; |
279 | }
|
280 | lastButtonState6 = reading6; |
281 | |
282 | leds[6] = 0x0000FF; |
283 | FastLED.show(); |
284 | leds[7] = 0x0000FF; |
285 | FastLED.show(); |
286 | leds[8] = 0x0000FF; |
287 | FastLED.show(); |
288 | leds[9] = 0x0000FF; |
289 | FastLED.show(); |
290 | }
|
Und bevor ich es vergesse, das ist der vorläufige und nicht der Cleancode!
Das musst du ja gar nicht unterscheiden. Wenn eine CAN-Nachricht kommt, kann die ja "Taste gedrückt" bedeuten und in den gleichen IFs abgefragt werden. Wenn du dann einen CAN-Node hast, bestückst du die Taster nicht, an einem Taster-node ist eben kein CAN-Controller, das Programm merkt das im setup() und ignoriert den niemals kommenden INT. Wenn du magst kann eine Node gleichzeitig den Zustand ja auch wieder absenden, so das die Tasten aller Nodes wie parallel geschaltet wirken. Dazu müsstest du nur den Teil der Tastenerkennung und der eigentlichen Aktion teilen, die Aktionsfunktion kannst du dann aus der Tastenerkennung und aus der CAN-Erkennung aufrufen, schon funzt beides parallel. Die letzte CAN-Nachricht merken und wenn schonmal bekommen ignorieren. Ablauf dann - Taste gedrückt? Dann Farbe setzen und CAN verschicken, Nachricht merken - CAN bekommen? Dann Nachricht prüfen. Anders wie eben: Farbe setzen, sonst nix machen Nur mal schnell gegoogelt: https://github.com/autowp/arduino-mcp2515 Einfach mal einlesen und mit 2 Nodes spielen, dann kommst du drauf.
Nein... ich glaube du hast mich falsch verstanden, bzw. ich habe es etwas zu ungenau geschrieben. Einen Schalter, der per Mechanismus mit einer Klappe verbunden ist deckt entweder dem CAN BUS PORT (in Position 1) oder den USB Port (in Position 2)ab. 2x Betriebsmodis: Modi 1 - der Schalter steht auf offen (Position 1) - die Klappe verdeckt den CAN BUS Port - das USB Kabel kann angesteckt werden - der Arduino wird über USB betrieben Modi 2 - der Schalter steht auf geschlossen (Position 2) - die Klappe verdeckt den USB Port - das CAN BUS Kabel kann angesteckt werden - der Arduino wird über CAN BUS betrieben Heisst zb: If Klemme X Low ..... Modi 1 /ELSE..... Modi 2
Du kommst aus der SPS- Richtung? hier findet man eine anleitung zu can mit dem MCP2515 https://github.com/autowp/arduino-mcp2515 Schau dir auch mal C-grundlagen wie arrays, funktionen und for-schleifen an. Damit kannst du deinen code auf ca. 40 zeilen kürzen und somit übersichtlicher und verständlicher machen.
Ja hatte mal was mit SPS zu tun aber das liegt schon jahre zurück. Ja den Link kenne ich, aber ich komm da einfach nicht rein. Und wie schon gesagt, es ist der vorläufige nicht der Clearcode. Der nachfolgende ist der Clearcode, aber ich weis noch nicht ob er richtig ist bzw. funktioniert, da ich den gerade nicht testen kann.
1 | #include <Keyboard.h> |
2 | #include "FastLED.h" |
3 | #define NUM_LEDS 16
|
4 | #define DATA_PIN 9
|
5 | |
6 | CRGB leds[NUM_LEDS]; |
7 | const unsigned long debounceDelay = 50; |
8 | unsigned long jetzt; |
9 | |
10 | struct Taster { |
11 | Taster(const byte pin, const char zeichen, const byte ledindex): pin(pin), zeichen(zeichen), ledindex(ledindex), ledZustand(0), aktZustand(0), altZustand(0), vorhin(0) {} |
12 | |
13 | void init() |
14 | {
|
15 | pinMode(pin, INPUT_PULLUP); |
16 | aktZustand = digitalRead(pin); |
17 | altZustand = aktZustand; |
18 | leds[ledindex] = CRGB(CRGB::Green); |
19 | FastLED.show(); |
20 | }
|
21 | void run() |
22 | {
|
23 | aktualisieren(); |
24 | if (steigend()) |
25 | {
|
26 | Serial.print(zeichen); |
27 | Keyboard.press(zeichen); |
28 | Keyboard.releaseAll(); |
29 | ledZustand = !ledZustand; |
30 | if (ledZustand) { |
31 | leds[ledindex] = CRGB(CRGB::Red); |
32 | } else { |
33 | leds[ledindex] = CRGB(CRGB::Green); |
34 | }
|
35 | FastLED.show(); |
36 | }
|
37 | }
|
38 | |
39 | void aktualisieren() |
40 | {
|
41 | altZustand = aktZustand; |
42 | if (jetzt - vorhin >= debounceDelay) |
43 | {
|
44 | aktZustand = digitalRead(pin); |
45 | if (altZustand != aktZustand) |
46 | {
|
47 | vorhin = jetzt; |
48 | }
|
49 | }
|
50 | }
|
51 | |
52 | bool steigend() |
53 | {
|
54 | if (!altZustand && aktZustand) |
55 | {
|
56 | return true; |
57 | }
|
58 | return false; |
59 | }
|
60 | /* nicht benutzt
|
61 | bool zustand()
|
62 | {
|
63 | return aktZustand;
|
64 | }
|
65 | |
66 | bool fallend()
|
67 | {
|
68 | if (altZustand && !aktZustand)
|
69 | {
|
70 | return true;
|
71 | }
|
72 | return false;
|
73 | }
|
74 | */
|
75 | const byte pin; |
76 | const char zeichen; |
77 | const byte ledindex; |
78 | bool ledZustand; |
79 | bool aktZustand; |
80 | bool altZustand; |
81 | unsigned long vorhin; |
82 | };
|
83 | |
84 | Taster taster[] { |
85 | // Tasterpin, Buchstabe, LED-Index
|
86 | {3, 'a', 0}, |
87 | {4, 'b', 1}, |
88 | {5, 'c', 2}, |
89 | {6, 'd', 3}, |
90 | {7, 'e', 4}, |
91 | {8, 'f', 5}, |
92 | };
|
93 | |
94 | void setup() { |
95 | pinMode(2, OUTPUT); |
96 | pinMode(3, OUTPUT); |
97 | pinMode(4, OUTPUT); |
98 | Serial.begin(9600); |
99 | Serial.println("Anfang"); |
100 | FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS); |
101 | FastLED.show(); |
102 | for (Taster &t : taster) t.init(); |
103 | }
|
104 | |
105 | void loop() { |
106 | jetzt = millis(); |
107 | for (Taster &t : taster) t.run(); |
108 | |
109 | |
110 | |
111 | FastLED.show(); |
112 | leds[10] = 0x0000FF; |
113 | FastLED.show(); |
114 | leds[11] = 0x0000FF; |
115 | FastLED.show(); |
116 | leds[12] = 0x0000FF; |
117 | FastLED.show(); |
118 | leds[13] = 0x0000FF; |
119 | FastLED.show(); |
120 | leds[14] = 0x0000FF; |
121 | FastLED.show(); |
122 | leds[15] = 0x0000FF; |
123 | FastLED.show(); |
124 | }
|
:
Bearbeitet durch User
Hi Nur, damit's hier keine Unstimmigkeiten gibt - Cross-Postings auf - http://forum.arduino.cc/index.php?topic=595441.msg4044647 - arduino-forum.de, dort ist der Link auf arduino.cc aber ungültig ;) @mc-big-d Viel Spaß weiterhin, die Leute an sämtlichen Fronten zu verarschen ...
Geh den Leuten nicht auf den Sack und heul wo anders rum. Wenigstens kümmert er sich um eine Lösung und teilt seine Infos. Aber wegen so vollpfosten wie dir Forenrambo werden es immer weniger die ihr Wissen teilen. Wenn du nichts sinnvolles dazu beitragen willst, verschone uns doch Bitte mit deinen Posts. @D. Z. Fang erstmal an mit den ersten Schritten. Besorg dir die MCP2515 und lade dir den Beispiel Scatch. Dann wird es nach und nach auch Sinn ergeben. PS Nicht mein Original Account da mir diese Kinder sonst auf den nerv gehen
Danke dir ja kp was der hat naja egal.... Ja, ich bekomme die Tage erst die MCP´s, dann werde ich es mal mit den Beispielcodes versuchen. Hab gehofft, dass ich es vorher verstehe und die Skatche vorher schon schreiben kann, aber es klappt nicht so.
RS485 -> SP485 <- Bauteil gibts auch als THT für einen Apfel und ein Ei ;) Mach die Baudrate nicht so hoch, sonst hast du eine hohe Bitfehlerrate mit den bei Arduino üblichen Quarzen. Gruß
Die Bauteile an sich habe ich alle schon bzw sind schon bestellt. Den Scatch schreiben ist eher das Problem. Aber trotzdem danke für die Info.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.