Errores no le veo; o al menos porque desconozco el funcionamiento de los componentes.
Juzgando por los 6 MOSFETs... ¿estás creando un ESC para motores "brushless"? O podría ser un controlador de un paso a paso, pero para eso se requieren dos puentes H.
Optimizado pero conservando la "portabilidad", se me ocurre así:
#define analogPin1 A0
#define analogPin2 A1
bool hall1;
bool hall2;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
hall1 = analogRead(analogPin1) >= 880;
hall2 = (analogRead(analogPin2)+600) >= 860;
if(hall1 && !hall2)
{
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
digitalWrite(2, LOW);
return;
}
if (!hall1 && hall2)
{
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);
return;
}
if(hall1 && hall2)
{
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
return;
} else {
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
}
}
El código no es muy grande, optimizarlo fue rápido.
Si quieres ir más allá, reemplazaría los digitalWrite por "manipular el puerto" (al menos sé hacerlo en AVR).