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
Question Relais und Knopf/Schalter le16on 8 361 20.03.2017 22:33
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 362 13.03.2017 12:12
Letzter Beitrag: Tommy56
  Servo-Ansteuerung über einen Push-Button Aubergine83 1 305 16.02.2017 19:49
Letzter Beitrag: georg01
  Mehrere HX711 mit einem Arduino Uno be14b029 5 448 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 701 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Mit Ultraschallsignal Relais schalten Reimers 5 304 26.01.2017 11:27
Letzter Beitrag: hotsystems
  aufeinander Aufbauende Lichtaktion mit einem Taster Colby 9 637 17.12.2016 13:30
Letzter Beitrag: Colby
  Bridge und TemperaturWebPanel in einem Skript j_ard 4 542 17.12.2016 11:06
Letzter Beitrag: j_ard
  A4988 Driver mit einem Nema 17 Hangloose 3 668 04.09.2016 21:49
Letzter Beitrag: Hangloose
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 523 09.04.2016 17:56
Letzter Beitrag: Voreifel

Gehe zu:


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