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
  PS3 Controller LED coctoroge 6 316 23.10.2017 20:45
Letzter Beitrag: Tommy56
  Servo Ansteuerung SOFTHARD 23 1.209 17.10.2017 10:56
Letzter Beitrag: SOFTHARD
Question Mehrere HX711 an einem Arduino Nano Lambacher 59 2.059 17.10.2017 09:34
Letzter Beitrag: Tommy56
  Servo mit einem Taster und 433mhz steuern Thor Wallhall 63 3.238 29.07.2017 11:02
Letzter Beitrag: Thor Wallhall
Question Relais und Knopf/Schalter le16on 8 542 20.03.2017 22:33
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 551 13.03.2017 12:12
Letzter Beitrag: Tommy56
  Servo-Ansteuerung über einen Push-Button Aubergine83 1 484 16.02.2017 19:49
Letzter Beitrag: georg01
  Mehrere HX711 mit einem Arduino Uno be14b029 5 814 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 929 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Mit Ultraschallsignal Relais schalten Reimers 5 504 26.01.2017 11:27
Letzter Beitrag: hotsystems

Gehe zu:


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