Forum: Mikrocontroller und Digitale Elektronik Suche hilfe bei einem CAN BUS Projekt mit 22x Arduinos


von D. Z. (zoundgalaxy)


Lesenswert?

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

von Helmut -. (dc3yc)


Lesenswert?

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
von Jens M. (schuchkleisser)


Lesenswert?

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.

von D. Z. (zoundgalaxy)


Lesenswert?

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

von D. Z. (zoundgalaxy)


Lesenswert?

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

von Jens M. (schuchkleisser)


Lesenswert?

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.

von D. Z. (zoundgalaxy)


Lesenswert?

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.

von Jens M. (schuchkleisser)


Lesenswert?

- 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
- ...

von D. Z. (zoundgalaxy)


Lesenswert?

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
}

von D. Z. (zoundgalaxy)


Lesenswert?

Und bevor ich es vergesse, das ist der vorläufige und nicht der 
Cleancode!

von Jens M. (schuchkleisser)


Lesenswert?

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.

von D. Z. (zoundgalaxy)


Lesenswert?

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

von Flip B. (frickelfreak)


Lesenswert?

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.

von D. Z. (zoundgalaxy)


Lesenswert?

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
von keine Freunde haber (Gast)


Lesenswert?

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 ...

von Laber N. (labernicht)


Lesenswert?

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

von D. Z. (zoundgalaxy)


Lesenswert?

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.

von Dietmar (Gast)


Lesenswert?

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ß

von D. Z. (zoundgalaxy)


Lesenswert?

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
Noch kein Account? Hier anmelden.