nach dem tausch des MEGA bin ich jetzt auf dem entwicklungsstand vor dem umbau auf die version mit der RAMPS-platine, das fahren mit IR-fernbedienung wie auch mit dem smartphone funktioniert soweit...
Mit der verdrahtung bin ich (fast) zufrieden, die motorzuleitungen muss ich noch ein bischen ordentlicher verlegen, da warte ich aber noch auf die crimpzange aus china...
Klicke auf die Grafik für eine größere Ansicht

Name:	20200214_113152.jpg
Hits:	14
Größe:	58,4 KB
ID:	34812

was mir nicht gefält, ist das anfahren der schrittmotoren, ist mir zu rucklig, habe dazu ein kurzes video gedreht. Im ersten part startet der motor rückwärts, direkt, ohne irgendwelchen zusatcode. Da ruckelts wie immer. Nach dem stop starte ich den motor vorwärts, mit einer zusatzbeschleunigung funktion. Da wird ein array eingelesen an der stelle der statischen delays in der ansteurungsroutine für die stepper. Hab vieles über die S-funktion" gelesen, habe die arraytabelle in zwei teile zerlegt, eine für die anfahrt, eine fürs abbremsen. Ob ich die für's abbremsen brauche, weiss ich noch nicht...
Was mir nun noch kopfzerbrechen bereitet ist der ruckler zwischen den anfahrbeschleunigungsroutine (die wäre an sich ok) und dem übergang zur normalen vorwärtsbewegung.
Nun der code, der hauptteil, da sind gleich am anfang auch die arrays fürs anfahren und abbremsen:
Code:
//LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int sinus_rauf [] =
{   0,  0,  0,  0,  1,  1,  1,  2,  2,  3,  4,  5,  5,  6,  7,  9,
   10, 11, 12, 14, 15, 16, 18, 20, 21, 23, 25, 27, 29 ,31, 33, 35,
   37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76,
   78, 81, 84, 87, 90, 93, 96, 99,102,105,108,111,115,118,121,124,

  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,
  176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,
  217,219,221,223,225,227,229,231,233,234,236,238,239,240,242,243,
  244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,
}; //128

int sinus_runter [] = 
{
  254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,
  244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,
  217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,
  176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,

  127,124,121,118,115,111,108,105,102, 99, 96, 93, 90, 87, 84, 81,
   78, 76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39,
   37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 16, 15, 14, 12, 11,
   10,  9,  7,  6,  5,  5,  4,  3,  2,  2,  1,  1,  1,  0,  0,  0
}; //128


//resett pin definieren
#define PIN2RESET 10

// DIR und STEP pins definieren
#define dirPin_VL 28
#define stepPin_VL 26
#define dirPin_HL 55
#define stepPin_HL 54
#define dirPin_VR 34
#define stepPin_VR 36
#define dirPin_HR 61
#define stepPin_HR 60

//definiere enable pins:
#define enbl_VL 24
#define enbl_HL 38
#define enbl_VR 30
#define enbl_HR 56


//steps pro umdrehung definieren:
#define stepsPerRevolution 200 //1600



uint8_t taste = 0;

uint8_t s_vor = 0;
uint8_t s_rueck = 0;
uint8_t s_links = 0;
uint8_t s_rechts = 0;
uint8_t s_stop = 0;
uint8_t s_parken = 0;

uint16_t step_delay = 2000;


void setup()
{

  //LCD
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.setBacklight(HIGH);
  lcd.print("outdoor FB switch");
  lcd.setCursor(0, 1);
  lcd.print("smartphone 1");
  delay(2000);
  lcd.clear();

  //pins als output:
  pinMode(dirPin_VL, OUTPUT);
  pinMode(stepPin_VL, OUTPUT);
  pinMode(enbl_VL, OUTPUT);
  pinMode(dirPin_HL, OUTPUT);
  pinMode(stepPin_HL, OUTPUT);
  pinMode(enbl_HL, OUTPUT);
  pinMode(dirPin_VR, OUTPUT);
  pinMode(stepPin_VR, OUTPUT);
  pinMode(enbl_VR, OUTPUT);
  pinMode(dirPin_HR, OUTPUT);
  pinMode(stepPin_HR, OUTPUT);
  pinMode(enbl_HR, OUTPUT);

  // deaktiviere enable pins:
  digitalWrite(enbl_VL, HIGH);
  digitalWrite(enbl_HL, HIGH);
  digitalWrite(enbl_VR, HIGH);
  digitalWrite(enbl_HR, HIGH);


  Serial1.begin(115200);
  Serial.begin(115200);


  //resett pin zustand definieren
  pinMode(PIN2RESET, INPUT);


  //resett pin aktivieren
  digitalWrite(PIN2RESET, HIGH);

}


void loop()
{
  if (Serial1.available())
  {
    taste = Serial1.read();
    Serial.println(taste);
    //    taste_neu = taste;
    delay(50);
    tasten_abfrage();
  }


  richtung_abfrage();
}

/***********************************************************/
void richtung_abfrage(void)
{
  if (s_rechts == 1) rechts_drehen();
  if (s_links == 1) links_drehen();
  if (s_vor == 1) vorwaerts();
  if (s_rueck == 1) rueckwaerts();
  if (s_stop == 1) alle_stepper_stop();
  if (s_parken == 1) parken();
}

/***********************************************************/
void tasten_abfrage(void)
{
  switch (taste)
  {

    case 116:// fahre vor - FB smartphone "t"
      {
//        beschleunigen();
        vorwaerts();
        break;
      }

    case 115:// fahre rückwärts - FB smartphone "s"
      {

        rueckwaerts();
        break;
      }

    case 100:// rotate rechts - FB smartphone "d"
      {
        rechts_drehen();
        break;
      }

    case 97:// rotate links - FB smartphone "a"
      {

        links_drehen();
        break;
      }

    case 49: //alle Stepper stop - FB smartphone "1"
      {

        alle_stepper_stop();
        break;
      }

    case 51: //parken - FB smartphone "3"
      {

        parken();
        break;
      }

  }

}
/***********************************************************/
void reboot()
{
  pinMode(PIN2RESET, OUTPUT);
  digitalWrite(PIN2RESET, LOW);
  delay(100);
}
/************************************************************/
hier ist die funktion für vorwärtsfahren:
Code:
void vorwaerts(void)
{
  if (s_vor == 0)
  {
    // enable pins aktivieren:
    digitalWrite(enbl_VL, LOW);
    digitalWrite(enbl_HL, LOW);
    digitalWrite(enbl_VR, LOW);
    digitalWrite(enbl_HR, LOW);

    //richtung bestimmen
    digitalWrite(dirPin_VL, LOW);
    digitalWrite(dirPin_HL, LOW);
    digitalWrite(dirPin_VR, HIGH);
    digitalWrite(dirPin_HR, HIGH);

    for (int i = 0; i < 127; i++)
    {
      digitalWrite(stepPin_VL, HIGH);
      digitalWrite(stepPin_HL, HIGH);
      digitalWrite(stepPin_VR, HIGH);
      digitalWrite(stepPin_HR, HIGH);
      delayMicroseconds(1750 + sinus_rauf[i]);
      digitalWrite(stepPin_VL, LOW);
      digitalWrite(stepPin_HL, LOW);
      digitalWrite(stepPin_VR, LOW);
      digitalWrite(stepPin_HR, LOW);
      delayMicroseconds(1750 + sinus_rauf[i]);
    }
    digitalWrite(stepPin_VL, HIGH);
    digitalWrite(stepPin_HL, HIGH);
    digitalWrite(stepPin_VR, HIGH);
    digitalWrite(stepPin_HR, HIGH);
    delayMicroseconds(step_delay);
    digitalWrite(stepPin_VL, LOW);
    digitalWrite(stepPin_HL, LOW);
    digitalWrite(stepPin_VR, LOW);
    digitalWrite(stepPin_HR, LOW);
    delayMicroseconds(step_delay);

    s_vor = 1;
    s_rueck = 0;
    s_links = 0;
    s_rechts = 0;
    s_stop = 0;
    s_parken = 0;
  }
  else
  {
    digitalWrite(stepPin_VL, HIGH);
    digitalWrite(stepPin_HL, HIGH);
    digitalWrite(stepPin_VR, HIGH);
    digitalWrite(stepPin_HR, HIGH);
    delayMicroseconds(step_delay);
    digitalWrite(stepPin_VL, LOW);
    digitalWrite(stepPin_HL, LOW);
    digitalWrite(stepPin_VR, LOW);
    digitalWrite(stepPin_HR, LOW);
    delayMicroseconds(step_delay);
  }
}
wie bekomme ich den ruckler beim vorwärtsfahren weg? Hab schon alles mögliche versucht, bisher leider ohne erfolg