Ja, ich meine ein Byte in ein Int packen. Hier mal kurz die derzeiten Sketche. Es kommt mir ein bisschen so vor, als ob ich viel zu viel geschrieben habe und es deutlich kürzer und einfacher geht.
Ich habe zwischenzeitig irgendwo gelesen, könnte im Playground gewesen sein, dass diese Bitzuweisung nur bei Bytes geht. Im Buch, "C von A bis Z" sowie O'Reilays "Kochbuch" habe ich leider noch nicht die passenden Textpassagen gefunden.
Pro Mini 328 16MHz (Sender)
#include <AltSoftSerial.h> // http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html <-- Nur Testzwecke
#include <PS2X_lib.h> // http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
#include <Streaming.h> // http://arduiniana.org/libraries/streaming/
AltSoftSerial Serial2;
PS2X ps2x;
#define PSB_ANALOG A0
const byte PSB_ANALOG_LED = A1;
void setup(){
Serial.begin(57600);
Serial2.begin(57600);
// Initialisiere Controller (Clock, Command, Attention, Data, Druck, Rumble)
ps2x.config_gamepad(13, 11, 10, 12, true, false);
pinMode(PSB_ANALOG, INPUT_PULLUP);
pinMode(PSB_ANALOG_LED, OUTPUT);
}
byte readSB() {
byte sendByte;
//Codierung 1
bitSet(sendByte, 0); // 1
bitClear(sendByte, 1); // 0
bitClear(sendByte, 2); // 0
bitClear(sendByte, 3); // 0
bitWrite(sendByte, 4, ps2x.Button(PSB_START));
bitWrite(sendByte, 5, ps2x.Button(PSB_SELECT));
bitWrite(sendByte, 6, digitalRead(PSB_ANALOG));
return sendByte;
}
byte readLPB() {
byte sendByte;
//Codierung 2
bitClear(sendByte, 0); // 0
bitSet(sendByte, 1); // 1
bitClear(sendByte, 2); // 0
bitClear(sendByte, 3); // 0
bitWrite(sendByte, 4, ps2x.Button(PSB_PAD_UP));
bitWrite(sendByte, 5, ps2x.Button(PSB_PAD_RIGHT));
bitWrite(sendByte, 6, ps2x.Button(PSB_PAD_DOWN));
bitWrite(sendByte, 7, ps2x.Button(PSB_PAD_LEFT));
return sendByte;
}
byte readRPB() {
byte sendByte;
//Codierung 3
bitSet(sendByte, 0); // 1
bitSet(sendByte, 1); // 1
bitClear(sendByte, 2); // 0
bitClear(sendByte, 3); // 0
bitWrite(sendByte, 4, ps2x.Button(PSB_TRIANGLE));
bitWrite(sendByte, 5, ps2x.Button(PSB_CIRCLE));
bitWrite(sendByte, 6, ps2x.Button(PSB_CROSS));
bitWrite(sendByte, 7, ps2x.Button(PSB_SQUARE));
return sendByte;
}
byte readLJB() {
byte sendByte;
//Codierung 4
bitClear(sendByte, 0); // 0
bitClear(sendByte, 1); // 0
bitSet(sendByte, 2); // 1
bitClear(sendByte, 3); // 0
bitWrite(sendByte, 4, ps2x.Button(PSB_L1));
bitWrite(sendByte, 5, ps2x.Button(PSB_L2));
bitWrite(sendByte, 6, ps2x.Button(PSB_L3));
return sendByte;
}
byte readRJB() {
byte sendByte;
//Codierung 5
bitSet(sendByte, 0); // 1
bitClear(sendByte, 1); // 0
bitSet(sendByte, 2); // 1
bitClear(sendByte, 3); // 0
bitWrite(sendByte, 4, ps2x.Button(PSB_R1));
bitWrite(sendByte, 5, ps2x.Button(PSB_R2));
bitWrite(sendByte, 6, ps2x.Button(PSB_R3));
return sendByte;
}
int readLXJA() {
int sendInt;
// Codierung 6
bitClear(sendInt, 0); // 0
bitSet(sendInt, 1); // 1
bitSet(sendInt, 2); // 1
bitClear(sendInt, 3); // 0
bitWrite(sendInt, 4, bitRead(ps2x.Button(PSS_LX), 0));
bitWrite(sendInt, 5, bitRead(ps2x.Button(PSS_LX), 1));
bitWrite(sendInt, 6, bitRead(ps2x.Button(PSS_LX), 2));
bitWrite(sendInt, 7, bitRead(ps2x.Button(PSS_LX), 3));
bitWrite(sendInt, 8, bitRead(ps2x.Button(PSS_LX), 4));
bitWrite(sendInt, 9, bitRead(ps2x.Button(PSS_LX), 5));
bitWrite(sendInt, 10, bitRead(ps2x.Button(PSS_LX), 6));
bitWrite(sendInt, 11, bitRead(ps2x.Button(PSS_LX), 7));
return sendInt;
}
int readLYJA() {
int sendInt;
// Codierung 7
bitSet(sendInt, 0); // 1
bitSet(sendInt, 1); // 1
bitSet(sendInt, 2); // 1
bitClear(sendInt, 3); // 0
bitWrite(sendInt, 4, bitRead(ps2x.Button(PSS_LY), 0));
bitWrite(sendInt, 5, bitRead(ps2x.Button(PSS_LY), 1));
bitWrite(sendInt, 6, bitRead(ps2x.Button(PSS_LY), 2));
bitWrite(sendInt, 7, bitRead(ps2x.Button(PSS_LY), 3));
bitWrite(sendInt, 8, bitRead(ps2x.Button(PSS_LY), 4));
bitWrite(sendInt, 9, bitRead(ps2x.Button(PSS_LY), 5));
bitWrite(sendInt, 10, bitRead(ps2x.Button(PSS_LY), 6));
bitWrite(sendInt, 11, bitRead(ps2x.Button(PSS_LY), 7));
return sendInt;
}
int readRXJA() {
int sendInt;
// Codierung 8
bitClear(sendInt, 0); // 0
bitClear(sendInt, 1); // 0
bitClear(sendInt, 2); // 0
bitSet(sendInt, 3); // 1
bitWrite(sendInt, 4, bitRead(ps2x.Button(PSS_RX), 0));
bitWrite(sendInt, 5, bitRead(ps2x.Button(PSS_RX), 1));
bitWrite(sendInt, 6, bitRead(ps2x.Button(PSS_RX), 2));
bitWrite(sendInt, 7, bitRead(ps2x.Button(PSS_RX), 3));
bitWrite(sendInt, 8, bitRead(ps2x.Button(PSS_RX), 4));
bitWrite(sendInt, 9, bitRead(ps2x.Button(PSS_RX), 5));
bitWrite(sendInt, 10, bitRead(ps2x.Button(PSS_RX), 6));
bitWrite(sendInt, 11, bitRead(ps2x.Button(PSS_RX), 7));
return sendInt;
}
int readRYJA() {
int sendInt;
// Codierung 9
bitSet(sendInt, 0); // 1
bitClear(sendInt, 1); // 0
bitClear(sendInt, 2); // 0
bitSet(sendInt, 3); // 1
bitWrite(sendInt, 4, bitRead(ps2x.Button(PSS_RY), 0));
bitWrite(sendInt, 5, bitRead(ps2x.Button(PSS_RY), 1));
bitWrite(sendInt, 6, bitRead(ps2x.Button(PSS_RY), 2));
bitWrite(sendInt, 7, bitRead(ps2x.Button(PSS_RY), 3));
bitWrite(sendInt, 8, bitRead(ps2x.Button(PSS_RY), 4));
bitWrite(sendInt, 9, bitRead(ps2x.Button(PSS_RY), 5));
bitWrite(sendInt, 10, bitRead(ps2x.Button(PSS_RY), 6));
bitWrite(sendInt, 11, bitRead(ps2x.Button(PSS_RY), 7));
return sendInt;
}
void loop() {
ps2x.read_gamepad();
static byte oldReadSB, oldReadLPB, oldReadRPB, oldReadLJB, oldReadRJB;
static int oldReadLXJA, oldReadLYJA, oldReadRXJA, oldReadRYJA;
static byte TxLed;
// System Buttons
byte setSB = readSB();
if (oldReadSB != setSB){
oldReadSB = setSB;
Serial2 << setSB << endl;
Serial << setSB << endl;
}
// Linke Pad Buttons
byte setLPB = readLPB();
if (oldReadLPB != setLPB){
oldReadLPB = setLPB;
Serial2 << setLPB << endl;
Serial << setLPB << endl;
}
// Rechte Pad Buttons
byte setRPB = readRPB();
if (oldReadRPB != setRPB){
oldReadRPB = setRPB;
Serial2 << setRPB << endl;
Serial << setRPB << endl;
}
// Linker Joystick Buttons
byte setLJB = readLJB();
if (oldReadLJB != setLJB){
oldReadLJB = setLJB;
Serial2 << setLJB << endl;
Serial << setLJB << endl;
}
// Rechter Joystick Buttons
byte setRJB = readRJB();
if (oldReadRJB != setRJB){
oldReadRJB = setRJB;
Serial2 << setRJB << endl;
Serial << setRJB << endl;
}
// Linker Joystick Analog X-Achse
int setLXJA = readLXJA();
if (oldReadLXJA != setLXJA){
oldReadLXJA = setLXJA;
Serial2 << setLXJA << endl;
Serial << setLXJA << endl;
}
// Linker Joystick Analog Y-Achse
int setLYJA = readLYJA();
if (oldReadLYJA != setLYJA){
oldReadLYJA = setLYJA;
Serial2 << setLYJA << endl;
Serial << setLYJA << endl;
}
// Rechter Joystick Analog X-Achse
int setRXJA = readRXJA();
if (oldReadRXJA != setRXJA){
oldReadRXJA = setRXJA;
Serial2 << setRXJA << endl;
Serial << setRXJA << endl;
}
// Rechter Joystick Analog Y-Achse
int setRYJA = readRYJA();
if (oldReadRYJA != setRYJA){
oldReadRYJA = setRYJA;
Serial2 << setRYJA << endl;
Serial << setRYJA << endl;
}
digitalWrite(PSB_ANALOG_LED, bitRead(setSB, 6));
}