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
Ansteuerung von einem Relais mit einem PS2 Controller
11.03.2016, 14:07 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2016 14:48 von minigarage.)
Beitrag #1
Ansteuerung von einem Relais mit einem PS2 Controller
Hallo ich bin gerade dabei eine Steuerung für einen mit Elektromotoren angetriebenen Bollerwagen zu entwerfen. Die Steuerung des Antriebes funktioniert soweit ganz gut, ich habe nur noch ein Problem mit der Ansteuerung der Peripherie.

Die Ansteuerung wird über http://www.cytron.com.my/p-shield-ps2 realisiert.

Mein aktuelles Problem ist die RKL Funktion. Bei dieser soll der Dreieckbutton als Schalter für ein Relais dienen. Die Schaltung klappt soweit, allerdings ist es eher Glücksache ob der Code gerade an der richtigen Stelle ist.

Meine Frage daher, wie schaffe ich es, dass die RKL_on_off Funktion jederzeit schaltbar ist?

Grüße Moritz

Code:
#include <SoftwareSerial.h>
#include <Cytron_PS2Shield.h> //PS2 shield library
Cytron_PS2Shield ps2(2, 3);   // SoftwareSerial: Rx and Tx pin
#include<math.h>

int X_CENTER=132;   // set center position x xais
int Y_CENTER=123;   // set center Position y axis

int dig1=7;         //pin signal for motor left
int dig2=4;         //pin signal for motor right
int an1=6;          //pin pwm for motor left
int an2=5;          //pin pwm for motor right
int handbrakePin=10;//pin signal for handbrake
int magbrake=8;     //pin signal for magnetic brake
int rkl=12;         //pin signal for RKL  

int ly=0;
int lx=0;

int xaxis=0;
int yaxis=0;
int acc1=0;
int acc2=0;

int rklfunction=0;
int rklState;
int rkllastState;
int rklpowerState;
int handbrakeState;

void setup()
{
  ps2.begin(9600);                    //set baudrate
  ps2.reset(1);                       //call to reset Shield-PS2
  delay(100);
  ps2.reset(0);
  pinMode(dig1,OUTPUT);               //initialize for all the input and output
  pinMode(dig2,OUTPUT);
  pinMode(an1,OUTPUT);
  pinMode(an2,OUTPUT);
  pinMode(magbrake,OUTPUT);
  pinMode(handbrakePin,INPUT_PULLUP); //activate internal pull up resistor
  pinMode(rkl,OUTPUT);      
  Serial.begin(9600);
  analogWrite(an1,0);                 //MDDS60 analog pin should get 0 input upon start
  analogWrite(an2,0);                 //send 0 value at the beginning
  delay(1000);                        
  
}

void loop()
{
    //joystick value
    ly=ps2.readButton(PS2_JOYSTICK_LEFT_Y_AXIS);
    lx=ps2.readButton(PS2_JOYSTICK_LEFT_X_AXIS);
    acc1=(ps2.readButton(PS2_LEFT_2) == 0);   // L2 and R2 need to be pressed for full speed
    acc2=(ps2.readButton(PS2_RIGHT_2) == 0);  // L2 and R2 need to be pressed for full speed
    
    handbrakeState=digitalRead(handbrakePin); //status of the brake handle
    
    if(handbrakeState==HIGH) //switch is open -> brake is open
    {      
         if(acc1==HIGH & acc2==HIGH)
         {
         Acceleration();}   //function call for higher speed
         else{
         Normal();}         //function call for normal speed
         Movement();
         }
     else{                  //switch is closed -> brake is closed
         Stop(0);
         //Serial.println("attention, handbrake is activated!");
    }

    //button values        
    rklfunction=(ps2.readButton(PS2_TRIANGLE) == 0);  // read RKL state  
    
    if(rklfunction==HIGH)     //function call the RKL switch
    {
     RKL_on_off();
    }

}
//function for the movement

void forward(int pwm){
  digitalWrite(magbrake,HIGH);
  delay(50);
  digitalWrite(dig1,HIGH);      
  digitalWrite(dig2,HIGH);
  analogWrite(an1,pwm);
  analogWrite(an2,pwm);
  Serial.println(pwm);
}
void reverse(int pwm){
  digitalWrite(magbrake,HIGH);
  delay(50);
  digitalWrite(dig1,LOW);      
  digitalWrite(dig2,LOW);
  analogWrite(an1,pwm);
  analogWrite(an2,pwm);
  Serial.println(pwm);
}
void left(int pwm){
  digitalWrite(magbrake,HIGH);
  delay(50);
  digitalWrite(dig1,HIGH);      
  digitalWrite(dig2,LOW);
  analogWrite(an1,pwm);
  analogWrite(an2,pwm);
  Serial.println(pwm);
}
void right(int pwm){
  digitalWrite(magbrake,HIGH);
  delay(50);
  digitalWrite(dig1,LOW);      
  digitalWrite(dig2,HIGH);
  analogWrite(an1,pwm);
  analogWrite(an2,pwm);
  Serial.println(pwm);
}
void Stop(int pwm){
  digitalWrite(magbrake,LOW);
  delay(50);
  digitalWrite(dig1,LOW);      
  digitalWrite(dig2,LOW);
  analogWrite(an1,pwm);
  analogWrite(an2,pwm);
  Serial.println(pwm);
}

void Acceleration()
{
  if(lx < X_CENTER) {
    xaxis = map(lx, 0, X_CENTER, -255, 0);
  }
  else {
    xaxis = map(lx, X_CENTER, 255, 0, 255);
  }

  if(ly < Y_CENTER) {
    yaxis = map(ly, 0, Y_CENTER, 255, 0);
  }
  else {
    yaxis = map(ly, Y_CENTER, 255, 0, -255);
  }
}

void Normal()
{
  if(lx < X_CENTER) {
    xaxis = map(lx, 0, X_CENTER, -150, 0);
  }
  else {
    xaxis = map(lx, X_CENTER, 255, 0, 150);
  }

  if(ly < Y_CENTER) {
    yaxis = map(ly, 0, Y_CENTER, 150, 0);
  }
  else {
    yaxis = map(ly, Y_CENTER, 255, 0, -150);
  }
}

void Movement(){
  
   if( yaxis>0 && yaxis>xaxis){
           forward(yaxis);
           //Serial.print("forward");
     }      
   else if( yaxis<0 && yaxis< abs(xaxis)){
           reverse(abs(yaxis));
           //Serial.print("reverse");
     }  
   else if( xaxis>0 && xaxis>yaxis){
           right(xaxis);
           //Serial.print("right");
     }  
   else if( xaxis<0 && xaxis<abs(yaxis)){
           left(abs(xaxis));
           //Serial.print("left");
     }
   else {
    Stop(0);
    //Serial.print("Stop");
     }  
}

//function for the RKL

void RKL_on_off(){

   rklState = digitalRead(rklfunction);

   if (rklState != rkllastState)
   {
    if (rklState == LOW)
    {
     if (rklpowerState == LOW)
     {
      rklpowerState = HIGH;
     }
      else
     {
      rklpowerState = LOW;
     }
    }
    rkllastState = rklState;
   }
   digitalWrite(rkl, rklpowerState);
   delay(20);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2016, 15:02
Beitrag #2
RE: Ansteuerung von einem Relais mit einem PS2 Controller
Ist ps2.readButton(PS2_TRIANGLE) nur solange high wie man den button drückt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2016, 15:31 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2016 19:23 von minigarage.)
Beitrag #3
RE: Ansteuerung von einem Relais mit einem PS2 Controller
Ja genau, nur solange Dreieck gedrückt wird geht er auf HIGH. Daher mein Versuch eine "Schalter" Schaltung zu erstellen und keinen Tasterbetrieb.

ich habe den Fehler gefunden Smile, kann also geschlossen werden. Hier noch der neue Code
Code:
//RKL
    rklfunction=(ps2.readButton(PS2_TRIANGLE));  //read RKL state  
    Serial.println(rklfunction);
    rklState = digitalRead(rklfunction);
    if (rklState != rkllastState)
    {
      if (rklState == HIGH)
      {
        if (rklPowerState == HIGH)
        {
        rklPowerState = LOW;
        }
        else{
        rklPowerState = HIGH;
        }
      }
      rkllastState = rklState;
      }
     digitalWrite(rkl, rklPowerState);[php][/php]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  A4988 Driver mit einem Nema 17 Hangloose 3 140 04.09.2016 21:49
Letzter Beitrag: Hangloose
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 310 09.04.2016 17:56
Letzter Beitrag: Voreifel
  Kann ich mit einem Arduino ein Gyro für Adroid Simulieren? Demitos 0 406 16.03.2016 18:33
Letzter Beitrag: Demitos
  Wieso schaltet das SS-Relais nicht ab? mat21his 5 565 28.01.2016 18:24
Letzter Beitrag: Bitklopfer
  LCD 1602 mit PCF 8574T Ansteuerung (I2C) RCudino 25 1.541 20.01.2016 19:49
Letzter Beitrag: RCudino
  Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick? Vittelboy 12 5.577 29.12.2015 09:51
Letzter Beitrag: max123
  Webserver abfragen mit einem Programm arduinofan 2 729 28.11.2015 15:54
Letzter Beitrag: arduinofan
  Brauche Hilfe bei einem Arduino - "Spiel" jalu4601 6 861 10.11.2015 15:09
Letzter Beitrag: jalu4601
  2 Servos mit einem Kippschalter steuern Moba55 9 1.090 01.11.2015 22:47
Letzter Beitrag: hotsystems
Lightbulb Brauche Hilfe bei einem kleinem Arduino-Spiel jalu4601 5 898 23.10.2015 08:35
Letzter Beitrag: hotsystems

Gehe zu:


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