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
  Servo-Ansteuerung über einen Push-Button Aubergine83 1 108 16.02.2017 19:49
Letzter Beitrag: georg01
  Mehrere HX711 mit einem Arduino Uno be14b029 5 162 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 379 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Mit Ultraschallsignal Relais schalten Reimers 5 159 26.01.2017 11:27
Letzter Beitrag: hotsystems
  aufeinander Aufbauende Lichtaktion mit einem Taster Colby 9 429 17.12.2016 13:30
Letzter Beitrag: Colby
  Bridge und TemperaturWebPanel in einem Skript j_ard 4 313 17.12.2016 11:06
Letzter Beitrag: j_ard
  A4988 Driver mit einem Nema 17 Hangloose 3 283 04.09.2016 21:49
Letzter Beitrag: Hangloose
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 372 09.04.2016 17:56
Letzter Beitrag: Voreifel
  Kann ich mit einem Arduino ein Gyro für Adroid Simulieren? Demitos 0 476 16.03.2016 18:33
Letzter Beitrag: Demitos
  Wieso schaltet das SS-Relais nicht ab? mat21his 5 733 28.01.2016 18:24
Letzter Beitrag: Bitklopfer

Gehe zu:


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