wieder mal Led/Serial problem

Ich hab folgendes Problem, unzwar wie in den anderen Threas schon fast gelöst, geht es darum die WS2812 über den Teensy zu Steuern, die 4 Ringe haben alle einen eigenen Attiny85 auf dennen einige Animationen gespeichert sind, über i2c funktioniert das ganz gut, auch unterschiedlich zusammengestellte animationen werden Super aufgerufen, nun möcht ich auch einen Motor per PWM ansteuern, die eingabe erfolgt über einen Nextion, es sind 10 Tasten bei dem ich die id der Tasten ans Teensy schick um es auszuwerten, aber irgendwas steht da im Konflikt, Motor funktioniert top, aber jetzt werden die Ringe nicht korrekt gesteuert, man muß öfters auf die Taste Drücken bis alle die befehle empfangen haben

#include <Wire.h>
const byte bufferSize = 64;
#include <FrequencyTimer2.h>
int Motor = 6;

void setup() {
  Serial2.begin(57600);
  Wire.begin();
  pinMode(Motor, OUTPUT);
  analogWriteResolution(8);
  analogWriteFrequency(Motor, 100);
  analogWrite(Motor, 229);
  Serial2.print("bt0.val=0");
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);
}

void loop() {

  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool complett = false;
  if (Serial2.available()) {
    uint8_t inChar = Serial2.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) &&
        buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      complett = true;
    } else {
      complett = (bIndex == bufferSize);
    }
  }
  if (complett) {
    switch (buffer[1]) {
      case 0  :
        analogWrite(Motor, 229);
        Serial2.print("t0.txt=");
        Serial2.write(0x22);
        Serial2.print("Aus");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;
      case 1  :
        analogWrite(Motor, 26);
        Serial2.print("t0.txt=");
        Serial2.write(0x22);
        Serial2.print("Ein");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;
      case 4  : //Fade Red
        Wire.beginTransmission(1);
        Wire.write('g');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('g');
        Wire.endTransmission();
        break;
      case 5  :  //Comet
        Wire.beginTransmission(1);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('a');
        Wire.endTransmission();
        break;
      case 8  :  //Police
        Wire.beginTransmission(1);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('b');
        Wire.endTransmission();
        break;
      case 7  :  //Knight
        Wire.beginTransmission(1);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('c');
        Wire.endTransmission();
        break;
      case 9  :  //Start
        Wire.beginTransmission(1);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('a');
        Wire.endTransmission();
      case 11  :  //Fire
        Wire.beginTransmission(1);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('b');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('b');
        Wire.endTransmission();
        break;
        break;
    }
    bIndex = 0;
  }
}
     Wire.endTransmission();
      case 11  :  //Fire

break; fehlt

        break;
        break;
    }

Ach da isses ja.

Aber was passiert, wenn Du auf 2 oder 3 drückst?

das wars fast, die Befehle dringen immer noch nicht an alle Teilnemher, also 2 und 3 sind im Nextion noch nicht eingepflegt, was aber komisch ist, sobald ich umschalte auf einer anderen Animation, dimmt er um gut 70% die LED´s runter, und dabei bleibt es auch bis ich Spannung wegnehm und wieder anleg, vielleicht liegt es aber auch in der beschaltung ??

Ich sehe keine Freilaufdiode an deinem Motor. Die solltest du einsetzen, damit dir nix wegstirbt.
Und es können durchaus Störungen des Motors auf deinen Controller einwirken, die deinen Sketch durcheinander bringen.

Medolino73:
das wars fast, die Befehle dringen immer noch nicht an alle Teilnemher, also 2 und 3 sind im Nextion noch nicht eingepflegt, was aber komisch ist, sobald ich umschalte auf einer anderen Animation, dimmt er um gut 70% die LED´s runter, und dabei bleibt es auch bis ich Spannung wegnehm und wieder anleg, vielleicht liegt es aber auch in der beschaltung ??

Das möglicherweise auch.

Wenn Du 2 oder 3 oder sonst irgendeine Taste drückst die die Bedingung NICHT erfüllt, kommst Du aus dem case nicht mehr sauber raus.

my_xy_projekt:
Das möglicherweise auch.

Wenn Du 2 oder 3 oder sonst irgendeine Taste drückst die die Bedingung NICHT erfüllt, kommst Du aus dem case nicht mehr sauber raus.

achso, das muß ich gleich mal testen, es ist auch im moment kein Motor angeschlossen, es ist auch so das 2 Stellig zahlen garnicht erkannt werden

Medolino73:
achso, das muß ich gleich mal testen, es ist auch im moment kein Motor angeschlossen, es ist auch so das 2 Stellig zahlen garnicht erkannt werden

Ich schrub heute morgen schon in #1

Aber was passiert, wenn Du auf 2 oder 3 drückst?

Hm.

Bis Du zweistellig Tasten fehlerfrei auswertest, wollte ich wenigstens einstellig funktonsfähig haben.

Na dann...

ja also wenn man sich den code mal anschaut, ich drücke auf der taste mit id 8, ruft er auch die 8 auf, wenn ich aber die id 14 aufruf, dann ruft er wiederrum die 8, aber warum weis ich leider nicht

hier auch ein leicht aktualisierter code

#include <Wire.h>
const byte bufferSize = 64;
#include <FrequencyTimer2.h>
int Motor = 6;

void setup() {
  Serial2.begin(57600);
  Wire.begin();
  pinMode(Motor, OUTPUT);
  analogWriteResolution(8);
  analogWriteFrequency(Motor, 100);
  analogWrite(Motor, 229);
  Serial2.print("bt0.val=0");
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);
}

void loop() {

  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool complett = false;
  if (Serial2.available()) {
    uint8_t inChar = Serial2.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) &&
        buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      complett = true;
    } else {
      complett = (bIndex == bufferSize);
    }
  }
  if (complett) {
    switch (buffer[1]) {
      case 0  :
        analogWrite(Motor, 229);
        Serial2.print("t0.txt=");
        Serial2.write(0x22);
        Serial2.print("Aus");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 1  :
        analogWrite(Motor, 26);
        Serial2.print("t0.txt=");
        Serial2.write(0x22);
        Serial2.print("Ein");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 4  : //Fade Red
        Wire.beginTransmission(1);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('a');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('a');
        Wire.endTransmission();
        Serial2.print("t1.txt=");
        Serial2.write(0x22);
        Serial2.print("FadeRed");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 8  :  // Stop
        Wire.beginTransmission(1);
        Wire.write('i');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('i');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('i');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('i');
        Wire.endTransmission();
        Serial2.print("t1.txt=");
        Serial2.write(0x22);
        Serial2.print("Stop");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 14  :  //Start
        Wire.beginTransmission(1);
        Wire.write('f');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('f');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('f');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('f');
        Wire.endTransmission();
        Serial2.print("t1.txt=");
        Serial2.write(0x22);
        Serial2.print("Start");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 7  :  //Police
        Wire.beginTransmission(1);
        Wire.write('e');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('e');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('e');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('e');
        Wire.endTransmission();
        Serial2.print("t1.txt=");
        Serial2.write(0x22);
        Serial2.print("Police");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;

      case 9  :  //Sparkle
        Wire.beginTransmission(1);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(2);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(3);
        Wire.write('c');
        Wire.endTransmission();
        Wire.beginTransmission(4);
        Wire.write('c');
        Wire.endTransmission();
        Serial2.print("t1.txt=");
        Serial2.write(0x22);
        Serial2.print("Sparkle");
        Serial2.write(0x22);
        Serial2.write(0xff);
        Serial2.write(0xff);
        Serial2.write(0xff);
        break;
    }
    bIndex = 0;
  }
}

Hi

Lasse Du Dir 'buffer[1]' anzeigen - denke, Du rechnest irgendwo falsch oder kommst (eh dann dort hin).
Überall, wo buffer[1] geändert werden kann, eine Ausgabe - dann siehst Du, woher der Arduino rennt und wo Er den Wert, mit Dem Du daraufhin verzweigst, manipuliert.

MfG

tut mir echt leid, ich hab so ein leichtsinnsfehler gemacht, ich hab ja die buttons untereinnannder kopiert, und habs übersehen auch den richtigen button und die id abzufragen, jetzt funktioniert es,
mit den 2 stelligen Zahlen, aber das problem mit der synchronen übertragung hängt noch, oder man drück öffters drauf bis alle ihre befehle erhalten haben, noch komischer ist es, wenn ich den reset knopf auf dem teensy drücke, dann funktioniert es garnichtmehr, erst spannung komplett abschalten und wieder ein, dann läuft alles wieder, ich vermute mal das mit der schaltung was nicht stimmt, den motor hab ich vorerstmal weggelassen und stattessen zu testzwecken eine led drangehängt

kleine Rückmeldung, hab mal die frequenz auf 400khz gesetzt, und siehe da, auf einmal funktioniert alles genauso wie ich mir das vorstell, keine aussetzer mehr und alle werden wunderbar angesteuert, was es aber damit aufsich hat, ist mir erlichgesagt ein Rätsel