Interruptor Magnético + alarma con Servo motor

Buenos días. Tengo que hacer un porton que al levantarse haga contacto con el interruptor magnético, pero la alarma solo deberia encenderse cuando fuerzo la puerta, no cuando levanto el porton con la app. Quisiera saber como hacer esto y que me estoy confundiendo en el codigo, ya que el servo se queda clavado en una posición.
#include <Servo.h>
Servo myservo;
int pos = 0;
char a = 0;
int sensor=A5;
int alarma = 2;
void setup() {
myservo.attach(7);
pinMode(alarma,OUTPUT);
pinMode(sensor, OUTPUT);
digitalWrite(sensor, LOW);
digitalWrite(alarma, LOW);

}

void loop() {

if(digitalRead(sensor)== HIGH){
digitalWrite(alarma,HIGH);
}
else {digitalWrite(alarma,LOW);
}

a =Serial.read();
if (a == 'A'){
abrirpuerta();
}

a =Serial.read();
if (a == 'C') {
cerrarpuerta();

}

}

void abrirpuerta() {
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(50);
}
}

void cerrarpuerta() {
for (pos = 0; pos <= 80; pos += 1) {
myservo.write(pos);
delay(50);
}
}

Hello
You shall use Serial.read(); once per looping.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


No revisé a fondo pero esto no está bien

a =Serial.read();
if (a == 'A'){
abrirpuerta();
}

a =Serial.read();
if (a == 'C') {
cerrarpuerta();

}

Primer problema, lees un caracter sin saber si se ha recibido algo que haya que leer.
Segundo problema, lees un caracter y verificas si es 'A', luego lees otro caracter para ver si es 'C'.
¿Y si 'C' era el primero?

Algo más apropiado sería

if(Serial.available()){
  a = Serial.read();
  if(a == 'A'){
    abrirpuerta();
  }
  else if(a == 'C'){
    cerrarpuerta();
  }
}

Ahora si hay datos que leer, lee un caracter, verifica si es 'A', si es abre, sino (else) verifica si es 'C' y si lo es cierra.

Agregué else aunque no seria estrictamente necesario, podria ser

if(Serial.available()){
  a = Serial.read();
  if(a == 'A'){
    abrirpuerta();
  }
  if(a == 'C'){
    cerrarpuerta();
  }
}

pero así verificaría si el caracter es 'C' aunque ya se haya determinado que es 'A', y no tiene sentido.

Saludos

PD: pon el código como te indica el moderador.