Meine Homepage

Arduino 4

---12,02,2017 und schon wieder etwas zum in den Kopf zu schieben.
Eine Steuerung die es mir angetan hat, mit einer Fernbedienung eine Steuerung betreiben und das funktioniert Netz sei Dank!
Das soll einmal so funktionieren das ich einzelne Positionen immer wieder anfahren kann zum Beispiel das Ansteueren einer Drehscheibe, jede Zahl steht für einen eigenen Gleisstrahl der von der Drehscheibenbrücke angefahren wird.
Wie ich das wieder hinbekommen soll weiss ich leider auch noch nicht, bestimmt muss ich da noch etwas mehr im Netz stöbern...

---23,02,2017 und nun ist es geschafft nichts geht mehr...qautsch dank der Hilfe von Außen konnte nun auch dieser Teil ferti abgeschlossen werden. Der Schrittmotor soll einmal einen sehr kurzen Werg zurück legen.
Es sind auch noch zwei Endlagenschalter dazu gekommen die sollen verhindern das man nach dem erreichen einer Endlage nicht noch weiter in die selbe Richtung fahren kann, das geht dann nur noch in die andere Richtung bis zum zweiten Endlagenschalter.
Ja uftz erstmal!
hier erst einmal der gut richende KOTTT/CODE:


#include "Stepper.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/

#define STEPS  32   // Number of steps per revolution of Internal shaft
#define step_pin 9  // Pin 9 connected to Steps pin on EasyDriver
#define dir_pin 8   // Pin 8 connected to Direction pin
#define MS1 10       // Pin 10 connected to MS1 pin
#define MS2 11       // Pin 11 connected to MS2 pin

#define endschalter01 2  // Pin 2 connected to Limit switch out
#define endschalter02 3  // Pin 3 connected to Limit switch out
int step_speed = 10;  // Speed of Stepper motor (higher = slower)
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4

Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

void setup()
{  pinMode(MS1, OUTPUT);
   pinMode(MS2, OUTPUT);
   pinMode(dir_pin, OUTPUT);
   pinMode(step_pin, OUTPUT);
   pinMode(endschalter01, INPUT);
   pinMode(endschalter02, INPUT);
   digitalWrite(endschalter01, true);  // pullup Wiederstand einschalten
   digitalWrite(endschalter02, true);

   pciSetup(endschalter01);
   pciSetup(endschalter02);
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch(results.value)
    {                

    case 0xFF30CF: // IR Taste 1
                  if(digitalRead(endschalter01)) // Aufruf nur wenn Pin high
                    // damit der Motor nicht läuft wenn der Endschalter Low ist und die FB-Taste gedrückt wird
                  {
                      small_stepper.setSpeed(700); //Max seems to be 700
                      Steps2Take  =  -2048;  // Rotate CW
                      small_stepper.step(Steps2Take);
                  }
                      break;


      case 0xFF18E7: // IR Taste 2
                  if(digitalRead(endschalter02)) // Aufruf nur wenn Pin high
                  {     
                      small_stepper.setSpeed(700);
                      Steps2Take  =  2048;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                  }
                      break;
    }
   
      irrecv.resume(); // receive the next value
  } 
}

void pciSetup(byte pin)  //ohne diesen Interrupt macht der Stepper nur den Befehl der IR-Steuerung und nicht die Endlagenüberwachung
{
    *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));  // enable pin
    PCIFR  |= bit (digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
    PCICR  |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group
}


ISR (PCINT2_vect) // handle pin change interrupt for D0 to D7 here
 {
    if( !digitalRead(endschalter01))
     Steps2Take = 0;   // die Null steht dafür das der Stepper stehen bleiben muss!

    if( !digitalRead(endschalter02))
      Steps2Take = 0;
 }

----------------------------------------------------------------------------------------
Das war eine Baustelle bis mir einer mit sehr viel Erfahrung mit dem Programmieren von den Arduinos geholfen hat
DANKE noch einmal für die super HILFE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Wie es weiter geht...

Zurück zur Startseite

Diese Webseite wurde kostenlos mit Homepage-Baukasten.de erstellt. Willst du auch eine eigene Webseite?
Gratis anmelden