INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp
26.08.2013, 10:29
Beitrag #1
Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp
Hallo zusammen,

dies ist mein erster Thread. Ich schreibe eigentlich nur, wenn ich wirklich nicht mehr weiter komme - leider ist das jetzt der Fall Sad

Mein Aufbau (hier reduziert auf den Problemfall, da es sonst zu unübersichtlich wird):

Insgesamt 3 Stepper, 1 LCD, Midi In

Was soll passieren: Ein externer Midi Controller (Faderbox) steuert via Midi CC jeweils 1 Stepper Motor, der gemappt die Werte (Midi) 0-120 von 0 bis 270 Grad durchläuft. Der Sinn dahinter ist, drei Potts damit zu drehen.
Bitte keine Diskussion darüber warum ich nicht irgendeine fertige Lösung benutze (DigiPot, Motorpoti, OP)- Glaubt mir, ich brauch diese mechanische Lösung Smile Danke für Euer Verständnis.

Nachfolgend der Code, der leider nicht so funktioniert wie er soll.
Die Midi CC Daten werden empfangen und korrekt auf dem LCD ausgegeben (wenn ich die Stepper Funktion weglasse). Sobald ich aber den empfangen Midi CC Wert (zB. Wert 45) an das LCD und den Stepper übergebe, beginnt der Stepper mit mittlerem Tempo an zu drehen und das Display gibt den richtigen Kontrollwert aus (zB. von 0 bis 20 läuft die Sache einigermaßen zügig aber nicht schnell). Dann bremst die ganze Sache komplett aus und die Werte im Display werden nur noch sporadisch aktualisiert. Der Stepper tuckert langsam zu der vermeintlichen Endposition von (relativ) 45. Hinweis: Der Midi Controller wird währenddessen nicht mehr betätigt.

Einzeln funktioniert der Code und die Komponenten. Wenn ich ein Poti direkt an den analogen Input von Arduino anlege und die Werte an den Stepper übergebe, fährt der Stepper die zugeordneten Positionen an.

Wenn ich nur Midi Daten empfange und direkt an das LCD ausgebe, geschieht das auch ohne merklicher Verzögerung.

Vielleicht kann mir jemand das Brett, welches scheinbar vorm Kopf sitzt, abziehen. Vielen Dank!

Code:
#include "LCD4884.h"
#include <MIDI.h>

#include <AccelStepper.h>

#define FULLSTEP 4
#define HALFSTEP 8


#define MENU_X    10        // 0-83
#define MENU_Y    0        // 0-5

int counter = 0;
char string[10];
char string_ccnum[10];
char stringLED[10];


int led = 13;

//declare variables for the motor pins
int motorPin1 = 22;    // Blue   - 28BYJ48 pin 1
int motorPin2 = 23;    // Pink   - 28BYJ48 pin 2
int motorPin3 = 24;    // Yellow - 28BYJ48 pin 3
int motorPin4 = 25;    // Orange - 28BYJ48 pin 4
                    // Red    - 28BYJ48 pin 5 (VCC)

static const int nrPositions = 2;
static int positions[] = {1800};
// The sequence 1-3-2-4 required for proper sequencing of 28BYJ48
AccelStepper stepper1(FULLSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup(){
    lcd.LCD_init();
    lcd.LCD_clear();

    // Initiate MIDI communications, listen to all channels
    MIDI.begin(MIDI_CHANNEL_OMNI);    
  
    // Connect the HandleNoteOn function to the library, so it is called upon reception of a NoteOn.
    MIDI.setHandleControlChange(HandleNoteOn);  // Put only the name of the function
  
    //Stepper Stuff
    stepper1.setMaxSpeed(1200.0);
    stepper1.setAcceleration(400.0);
    stepper1.setSpeed(1200);
    stepper1.moveTo(0);
    stepper1.setCurrentPosition(0);     
}

void loop()
{
   MIDI.read();
}


//Move Stepper 1
int move_pot1(int valPot1){
  if (valPot1 <= 83){
      stepper1.moveTo(-valPot1*20);
      while (stepper1.distanceToGo() != 0) {
      stepper1.run();
    }
  }
}

void HandleNoteOn(byte channel, byte pitch, byte velocity) {
    int ccnum = (int) pitch;
    int velo = (int) velocity;

    UpdateDisplay(velo);
    move_pot1(velo);
  
  if (velocity == 0) {
    // This acts like a NoteOff.
  }

}

void UpdateDisplay(int ccVal){
itoa(ccVal,string,10);
lcd.LCD_write_string(MENU_X, MENU_Y+1, "Wert: ", MENU_NORMAL );
lcd.LCD_write_string(MENU_X+40, MENU_Y+1, "     ", MENU_NORMAL);
lcd.LCD_write_string(MENU_X+40, MENU_Y+1, string, MENU_NORMAL);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.08.2013, 16:51
Beitrag #2
RE: Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp
ohne, dass ich jetzt dein Programm tatsächlich analysiert hätte: Zur Laufzeit geschieht endlos das, was in der void loop-Schleife steht, und das ist herzlich wenig. Etwas mehr Kontrolle des Ablaufs wäre schon sinnvoll. Wieso hast du die Funktionsaufrufe außerhalb platziert? Dass du die Midi.lib angeschaut hast und die nicht verwendeten Funktionen deaktiviert, davon gehen ich einmal aus.

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.08.2013, 08:32
Beitrag #3
RE: Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp
(27.08.2013 16:51)Stefan schrieb:  ohne, dass ich jetzt dein Programm tatsächlich analysiert hätte: Zur Laufzeit geschieht endlos das, was in der void loop-Schleife steht, und das ist herzlich wenig. Etwas mehr Kontrolle des Ablaufs wäre schon sinnvoll. Wieso hast du die Funktionsaufrufe außerhalb platziert? Dass du die Midi.lib angeschaut hast und die nicht verwendeten Funktionen deaktiviert, davon gehen ich einmal aus.

Hallo Stefan,

danke für deine Antwort. Deine Aussage, dass in dem void loop nicht viel steht und demnach nichts passiert ist leider nicht korrekt. Ich rufe, ganz einfach gesprochen, die Midi CC receive Funktion auf. Das funktioniert mit der Ausgabe des Wertes auf dem angeschlossenen LCD wunderbar. In meinem gesamten Projetkt steht natürlich wesentlich mehr im void loop. Der Übersichtlichkeit halber habe ich alles was nicht zum Problem gehört weggelassen.

Ich habe zum Test mal die nicht benötigten Funktionen in der Midi Lib auskommentiert, löst aber das eigenliche Problem nicht - Der Stepper fährt nicht (bzw. sau langsam) den via Midi empfangen int Wert an.

VG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.08.2013, 11:07 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2013 11:08 von Stefan.)
Beitrag #4
RE: Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp
aha! Hatte mich schon gewundert, dass da überhaupt was geht. Dennoch: Das Problem liegt sicherlich in deiner Ablaufstrukturierung, die du uns vorenthalten hast. Diese solltest du so anlegen, dass du immer wieder einmal den Empfangspuffer ausliest und bei neuen gültigen Daten dann den Servos die CPU-Power überlässt, sonst bremsen die Midifunktionen die Stepper aus, das ist zu erwarten. Ist das ganze zeitkritisch? Dann gibt es eine Konfigurationsmöglichkeit in der lib, mit der du nicht benötigte Funktionen deaktivieren kannst. Hast du das gesehen?

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ATtiny und Servo Bibliothek malsehen 9 305 15.10.2016 18:09
Letzter Beitrag: malsehen
Sad Ich brauche Hilfe Prosac 4 232 09.10.2016 18:39
Letzter Beitrag: Prosac
  Altes Digitales Display mit Text/Bits durch Genuino Micro versorgen - SPI-Bibliothek? RollingStone 0 202 25.06.2016 17:46
Letzter Beitrag: RollingStone
  Bremst ein int ? Mathias 3 267 03.06.2016 19:41
Letzter Beitrag: Bitklopfer
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 527 23.04.2016 10:26
Letzter Beitrag: rkuehle
  Brauche Hilfe HC-SR501 als Bewegungsmelder für Heimautomatisierung renmet 6 538 25.02.2016 10:22
Letzter Beitrag: hotsystems
  Brauche Hilfe bei der Infrarot Fernbedienung Levi 11 1.219 24.02.2016 06:55
Letzter Beitrag: Levi
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 479 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  I ch brauche mehrere SDA und SCL am MEGA2560 arduinofan 5 752 10.01.2016 21:15
Letzter Beitrag: arduinofan
  fehlt mir eine Bibliothek? Baumschüler 5 506 15.12.2015 08:53
Letzter Beitrag: Baumschüler

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste