Go Down

Topic: Arduino uno 8x8 LED max7219 (Read 4948 times) previous topic - next topic

agmue

Wenn man das Gesamtproblem nicht lösen kann, hilft das Zerlegen in Teilprobleme. Darum mein Vorschlag: Simtool stoppen. Ich kann mir nicht vorstellen, daß IDE und Somtool sich vertragen, benutzen ja dieselbe USB-Schnittstelle. Mir geht es darum, Deinen und meinen Aufbau synchron zu bekommen. Also IDE alleine:
ja den text sehe ich.
Dann gib 000000G50000 ein. Dann sollte der Text aus #11 erscheinen. Tut er das?
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

Ich werde es gleich morgen früh testen. Dir noch nen schönen abend.
Ich dank dir.

Kunde

ich habe alle zusatz usb kabel abgeklemmt die ganze sim sachen ausgeschaltet.
nun gebe ich im monitor 000000G50000
ein es kommt auch ein signal im arduino an. aber es ändert nichts.

im monitor wird nach der eingabe folgendes gezeigt:

Bitte Wert 012345678901 eingeben!
           000000G50000
00 01 02 03 04 05 06 07 08 09 10 11
42 69 74 74 65 20 57 65 72 74 20 30
00 01 02 03 04 05 06 07 08 09 10 11
31 32 33 34 35 36 37 38 39 30 31 20

aber keine änderung.


Kunde

so habe nun am seriellen monitor

000000G50000
eingegeben und der gang geht auf gang 5

000000G40000
eingegeben und der gang geht aufgang 4
 
danach möchte ich noch einen gang eingeben dann geht aber nichts mehr.
arduino reset dann geht es wieder 2 mal.
das ist komisch das es immer nur 2 mal geht

Bitte Wert 012345678901 eingeben!
           000000G50000
00 01 02 03 04 05 06 07 08 09 10 11
30 30 30 30 30 30 47 35 30 30 30 30
You have set the Gear to a Value of: 5
00 01 02 03 04 05 06 07 08 09 10 11
30 30 30 30 30 30 47 34 30 30 30 30
You have set the Gear to a Value of: 4
00 01 02 03 04 05 06 07 08 09 10 11
20 30 30 30 30 30 30 47 33 30 30 30


Kunde

habe die leerzeichen im code entfernt und dann gehen auch mehr als 2 einträge.

Serial.println("000000G50000");

aber wenn ich das spiel starte verändert sich nichts .es bleibt bei 0 stehen. aber das arduino bekommt befehle rein. das grüne lämpchen ist dauerhaft an.

agmue

Guten Morgen!

Jetzt haben wir denselben Stand, das ist gut. Bleibt die Frage, was der Arduino für Daten empfängt.

Als Debugmöglichkeit gibt es die Matrix, daher eine kleine Programmvariante:
Code: [Select]

byte sprite[] = {0, 0, 0, 0, 0, 0, 0};
byte helligkeit = 0;    // Helligkeit der Matrix 0 - 15, dunkel - hell
byte anzeigePuffer[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

int Speed;
int Gear;
int Rpm;
int RpmLeds;
int RpmMax = 8000;
int ShiftPoint = 4000;
int LimitRange = 0;
int UnderShiftPoint;
int OverShiftPoint;
int OverShift;
int UnderShift;
int buttonCheck = 1;
int bufferArray[12];

void setup() {
  Serial.begin(9600);
  m.init();
  m.setIntensity(helligkeit);
  m.clear();
  displayChar('0', 2);
  Serial.println("Bitte Text eingeben!");
//  Serial.println("Bitte Wert 012345678901 eingeben!");
//  Serial.println("           000000G50000");
}

void loop() {
  if (Serial.available() > 0)  {
    displayChar(Serial.read(), 2);
    delay(100);
  }
  if (Serial.available() == 12)  {
    int i;
    Serial.println("00 01 02 03 04 05 06 07 08 09 10 11");
    for (i = 0; i < 12; i = i + 1) { // read and label each byte.
      bufferArray[i] = Serial.read();
      Serial.print(bufferArray[i], HEX);
      Serial.print(" ");
    }
    Serial.println("");
    if (bufferArray[6] == 'G') {
      unsigned int gearSmTools = ((bufferArray[7] - 48) * 1);
      Gear = gearSmTools;
      Serial.print("You have set the Gear to a Value of: ");
      Serial.println(gearSmTools);
      if ((Gear > 0) && (Gear < 10)) {
        displayChar(anzeigePuffer[Gear], 2);
      }
    }
  }
}

void displayChar(byte zeichen, byte x) {
  memcpy_P(sprite + 1, CH + (zeichen - 32) * 6, 6);
  sprite[0] = sprite[1];
  sprite[1] = 8;
  m.clear();
  m.writeSprite(x, 0, sprite);
}

Wenn Du am seriellen Monitor einen Text eingibst, sollte er Buchstaben für Buchstaben auf der Matrix angezeigt werden. Geht das?

Wenn ja, seriellen Monitor schließen und Simtool starten, schauen, ob da was kommt. Inhalt ist erstmal egal.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

hi und guten morgen

genau so gemacht im monitor hallo jup eingegeben . der text läuft durch.
dann simm tools gestartet. da kommen dan kurz hintereinander R,0,2
ohne irgendwas zu machen wechseln diese 3 ziffern.

agmue

#22
Nov 15, 2015, 10:34 am Last Edit: Nov 15, 2015, 10:35 am by agmue
"R02" sollte 2000 U/Min bedeuten.

Mal sehen, ob auch der serielle Monitor was anzeigt. Also Simtool mit seriellem Monitor und dieser Variante:
Code: [Select]
byte sprite[] = {0, 0, 0, 0, 0, 0, 0};
byte helligkeit = 0;    // Helligkeit der Matrix 0 - 15, dunkel - hell
byte anzeigePuffer[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

int Speed;
int Gear;
int Rpm;
int RpmLeds;
int RpmMax = 8000;
int ShiftPoint = 4000;
int LimitRange = 0;
int UnderShiftPoint;
int OverShiftPoint;
int OverShift;
int UnderShift;
int buttonCheck = 1;
int bufferArray[12];

void setup() {
  Serial.begin(9600);
  m.init();
  m.setIntensity(helligkeit);
  m.clear();
  displayChar('0', 2);
  Serial.println("Testausgabe in Hex:");
  //  Serial.println("Bitte Wert 012345678901 eingeben!");
  //  Serial.println("           000000G50000");
}

void loop() {
  if (Serial.available() > 0)  {
    char test = Serial.read();
    displayChar(test, 2);
    Serial.print(test);  Serial.print(" ");
    delay(100);
  }
  if (Serial.available() == 12)  {
    int i;
    Serial.println("00 01 02 03 04 05 06 07 08 09 10 11");
    for (i = 0; i < 12; i = i + 1) { // read and label each byte.
      bufferArray[i] = Serial.read();
      Serial.print(bufferArray[i], HEX);
      Serial.print(" ");
    }
    Serial.println("");
    if (bufferArray[6] == 'G') {
      unsigned int gearSmTools = ((bufferArray[7] - 48) * 1);
      Gear = gearSmTools;
      Serial.print("You have set the Gear to a Value of: ");
      Serial.println(gearSmTools);
      if ((Gear > 0) && (Gear < 10)) {
        displayChar(anzeigePuffer[Gear], 2);
      }
    }
  }
}

void displayChar(byte zeichen, byte x) {
  memcpy_P(sprite + 1, CH + (zeichen - 32) * 6, 6);
  sprite[0] = sprite[1];
  sprite[1] = 8;
  m.clear();
  m.writeSprite(x, 0, sprite);
}

Könnte dann so aussehen:
Testausgabe in Hex:
R 0 2 R 0 2 R 0 2
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

beides zusammen macht nichts

aber bei dem code den du vorher geschrieben hast  ( hatte nochmal alles neu gestartet)
hat dann den richtigen gang angezeigt aber es waren um den gang mehrere leds am blinken.

agmue

#24
Nov 15, 2015, 10:49 am Last Edit: Nov 15, 2015, 10:55 am by agmue
beides zusammen macht nichts
Das habe ich befürchtet, zwei Programme an einem Port geht nicht.
aber bei dem code den du vorher geschrieben hast  ( hatte nochmal alles neu gestartet)
hat dann den richtigen gang angezeigt aber es waren um den gang mehrere leds am blinken.
Dann hast Du nicht alles kopiert, was ich hier reingestellt habe, vermute ich mal. Es fehlt m.clear(); in displayChar().
Code: [Select]

void displayChar(byte zeichen, byte x) {
  memcpy_P(sprite + 1, CH + (zeichen - 32) * 6, 6);
  sprite[0] = sprite[1];
  sprite[1] = 8;
  m.clear();
  m.writeSprite(x, 0, sprite);
}
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

kann man hier kleines filmchen zeigen?
dann würde ich dir mal ein kleines video des problems schicken!
oder whatsapp

agmue

kann man hier kleines filmchen zeigen?
dann würde ich dir mal ein kleines video des problems schicken!
oder whatsapp
Video geht hier im Forum m. W. nicht und whatsapp habe ich nicht.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

au mannn bin ich ein depp.
habe im sim programm ein kleinen fehler gehabt der mir die ganze zeit vor augen lag.
dank dir funktioniert die anzeige jetzt richtig.
es ist nur um 4-5 sekunden verzögert.
bekommt man eine bessere geschwindigkeit mit einer höreren BitsPerSek?

agmue

Bitte pack Deinen aktuellen Sketch hier hin, damit ich nach Optimierungen suchen kann.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

habe versucht die bitsPerSek zu verstellen. jetzt werden auch nach dem zurückstellen auf 9600 nur noch verschiedene leds angesteuert.

Go Up