Módulo RF 433Mhz

Então gente, estou tentando criar um controle remoto utilizando esses módulos de baixo custo. Até consegui mandar mensagem, fazer leitura do que chega, mas queria que ao apertar o botão fosse enviado determinada mensagem (para ativar o relé) e ao soltar, outra (para desativar o relé). Consigo fazer isso, mas apenas com um botão e gostaria de saber se teria como fazer em todos quatro.
Segue abaixo o código do Rx e Tx:

Tx:
#include <RFTransmitter.h>

#define NODE_ID 1
#define OUTPUT_PIN 12
RFTransmitter transmitter(OUTPUT_PIN, NODE_ID);

const int frentePin = 2;
int frenteState = 0;

const int trasPin = 3;
int trasState = 0;

const int direitaPin = 4;
int direitaState = 0;

const int esquerdaPin = 5;
int esquerdaState = 0;

void setup()
{

pinMode(frentePin, INPUT_PULLUP);
pinMode(trasPin, INPUT_PULLUP);
pinMode(direitaPin, INPUT_PULLUP);
pinMode(esquerdaPin, INPUT_PULLUP);

}

void loop()
{
frenteState = digitalRead(frentePin);
trasState = digitalRead(trasPin);
direitaState = digitalRead(direitaPin);
esquerdaState = digitalRead(esquerdaPin);

if (frenteState == HIGH && trasState == HIGH && direitaState == HIGH && esquerdaState == HIGH)
{
char *msg = "P";
transmitter.send((byte *)msg, strlen(msg) + 1);
}

if (frenteState == LOW)
{
char *msg = "F";
transmitter.send((byte *)msg, strlen(msg) + 1);
frenteState = digitalRead(frentePin);
}

if (trasState == LOW)
{
char *msg = "T";
transmitter.send((byte *)msg, strlen(msg) + 1);
trasState = digitalRead(trasPin);
}

if (direitaState == LOW)
{
char *msg = "D";
transmitter.send((byte *)msg, strlen(msg) + 1);
direitaState = digitalRead(direitaPin);
}

if (esquerdaState == LOW)
{
char *msg = "E";
transmitter.send((byte *)msg, strlen(msg) + 1);
esquerdaState = digitalRead(esquerdaPin);
}
}

rx:

#include <PinChangeInterruptHandler.h>
#include <RFReceiver.h>

#define M1 2
#define M2 3
#define M3 4
#define M4 5

RFReceiver receiver(12);

void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);

Serial.begin(9600);
receiver.begin();
}

void loop()
{
char msg[MAX_PACKAGE_SIZE];
byte len = receiver.recvPackage((byte *)msg);

Serial.println("");
Serial.print("");
Serial.println(msg);

while (msg[0] == 'P')
{
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
digitalWrite(M3, HIGH);
digitalWrite(M4, HIGH);
break;
}

while (msg[0] == 'F')
{
digitalWrite(M2, LOW);
digitalWrite(M4, LOW);
break;
}

while (msg[0] == 'T')
{
digitalWrite(M1, LOW);
digitalWrite(M3, LOW);
break;
}

while (msg[0] == 'D')
{
digitalWrite(M2, LOW);
digitalWrite(M3, LOW);
break;
}

while (msg[0] == 'E')
{
digitalWrite(M1, LOW);
digitalWrite(M4, LOW);
break;
}
}

O que é que não está a funcionar?