Estudiante Universitario en apuros

Muy buenas a todos, estoy elaborando un prototipo de un instrumento llamado anomaloscopio que en teoría es capaz de distinguir si una persona es daltónica o no, utilizando Arduino. El funcionamiento del sistmea es sencillo, 3 led RGB se mueven con un potenciometro entre unos valores predefinidos y otros 3 led se mueven en intervalos pulsando dos pulsadores para subir o bajar gradualmente el valor R y V para tratar de conseguir igualar el colo que emiten los otros tres led RGB. mi problema viene cuando quiero que en el intervalo de subir y bajar el rojo y verde, por cada 4 numeros de R V varía 0,25 y que R solo pueda variar entre 45 y 255 ya que he conseguido que V se mueva entre 0 y 18.
Por otro lado quiero que cuando el sujeto vea en su cabeza los colores iguales pulse otro pulsador y en pantalla aparezca segun el valor de R y V si es daltonico de tipo protanope (+ rojo- verde), tipo deuteranope (- rojo + verde) o normal, pero solo consigo que se quede en el primer tipo sea cual sea el valor o que parpadee la pantalla. Se que es un poco complejo de entendimiendo pero os agraceria que me ayudarais con estas dos dudas.

Un saludo M.Huerga

El código es el siguiente:

//Librerías necesarias
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
//Configuración de lcd
LiquidCrystal_I2C lcd (0x3F, 16, 2);
//Potenciómetro anomaloscopio
#define pot A0
//LED Variables
int R = 6;
int V = 5;
int A = 3;
//LED de referencia
int Rf = 11;
int Vf = 10;
int Af = 9;
//Pulsadores de modo
int P1 = 13;
int P2 = 12;
//Pulsadores de variación de color
int PUP = 8;
int PDOWN = 7;
//variables para boton 1
int modo = 0;
const int N = 3;
//variables para boton 2
int val = 0;
int state = 0;
int old_val = 0;
const int H = 2;
//Variables de variacion de color
int colorR = 255;
int colorV = 0;
//Variables para boton 3
int P3 = 2;
int lect = 0;
int vers = 0;
int old_lect = 0;
const int K = 2;
//Valores para resultados
int resultado;
int norm;
int prot;
int deut;

void setup() {
  //Funciones de cada PIN
  Wire.begin();
  pinMode(R, OUTPUT);
  pinMode(V, OUTPUT);
  pinMode(A, OUTPUT);
  pinMode(Rf, OUTPUT);
  pinMode(Vf, OUTPUT);
  pinMode(Af, OUTPUT);
  pinMode(pot, INPUT);
  pinMode(P1, INPUT);
  pinMode(P2, INPUT);
  pinMode(P3, INPUT);
  pinMode(PUP, INPUT);
  pinMode(PDOWN, INPUT);
  //Mensaje inicial en pantalla
  lcd.clear();
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.setCursor(2, 0);
  lcd.print("Prototipo de");
  lcd.setCursor(1, 1);
  lcd.print("Anomaloscopio");
}

void reinicioleds() {// Función de apagado de LED
  if (digitalRead(Rf) == HIGH) {
    digitalWrite(Rf, LOW);
  }
  if (digitalRead(Vf) == HIGH) {
    digitalWrite(Vf, LOW);
  }
  if (digitalRead(Af) == HIGH) {
    digitalWrite(Af, LOW);
  }
  if (digitalRead(R) == HIGH) {
    digitalWrite(R, LOW);
  }
  if (digitalRead(V) == HIGH) {
    digitalWrite(V, LOW);
  }
  if (digitalRead(A) == HIGH) {
    digitalWrite(A, LOW);
  }
}

void INCR() { //datos para subir valor rojo
  colorR ++;
  colorR = (colorR + 2) % 255;
}

void DECR() { //datos para disminuir valor rojo
  colorR --;
  colorR = (colorR - 2) % 255;
}

void INCV() { //datos para subir valor verde
  colorV ++;
  colorV = colorV % 255;
}

void DECV() { //datos para disminuir valor verde
  colorV --;
  colorV = colorV % 255;
}

void fijarCursorModo() { //modos de boton 1
  switch (modo) {
    case 0:
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("PARA EMPEZAR");
      lcd.setCursor(2, 1);
      lcd.print("Pulse B1");
      reinicioleds();
      break;
    case 1:
      vers = 0;
      state = 0;
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("EMPEZAR:B2");
      lcd.setCursor(2, 1);
      lcd.print("TERMINAR:B3");
      if (vers = 1) {
        if (resultado == norm) {
          lcd.clear();
          lcd.setCursor(2, 0);
          lcd.print("RESULTADO");
          lcd.setCursor(0, 1);
          lcd.print("OBS. NORMAL");
        }
        if (resultado == deut) {
          lcd.clear();
          lcd.setCursor(2, 0);
          lcd.print("RESULTADO");
          lcd.setCursor(0, 1);
          lcd.print("OBS. DEUTERANOPE");
        }
        if (resultado == prot) {
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("RESULTADO");
          lcd.setCursor(4, 1);
          lcd.print("OBS. PROTANOPE");
        }
      }
      break;
    case 2:
      state = 0;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("TFGOODO-1718_A36");
      lcd.setCursor(2, 1);
      lcd.print("2017-2018");
      reinicioleds();
      break;
  }
}

void loop () {
  val = digitalRead(P2); //P2 a B2
  if ((val == HIGH) && (old_val == LOW)) {
    state++;
    state = state % H;
    while (digitalRead(P2) == HIGH);
  }

  if (digitalRead(P1) == HIGH) { //P1 a B1
    modo++;
    modo = modo % N;
    fijarCursorModo();
    while (digitalRead(P1) == HIGH);
  }

  lect = digitalRead(P3); //P3 a B3
  if ((lect == HIGH) && (old_lect == LOW)) {
    vers++;
    vers = vers % K;
    while (digitalRead(P3) == HIGH);
  }

  switch (modo) {
    case 0: break;
    case 1:
      if (state == 1) {
        //intensidad colores de referencia
        analogWrite(Af, 0);
        analogWrite(A, 0);
        analogRead(A0);
        map (analogRead(A0), 0, 1023, 175, 225);
        analogWrite(Rf, map (analogRead(A2), 0, 1023, 35, 132));
        map (analogRead(A0), 0, 1023, 60, 90);
        analogWrite(Vf, map (analogRead(A0), 0, 1023, 4, 14));
        //variación de los colores R y V
        if (digitalRead(PUP) == HIGH) { //funcion de B3
          DECR();
          INCV();
          analogWrite(R, colorR);
          analogWrite(V, colorV);
          while (digitalRead(PUP) == HIGH);
        }
        if (digitalRead(PDOWN) == HIGH) { //funcion de B4
          INCR();
          DECV();
          analogWrite(R, colorR);
          analogWrite(V, colorV);
          while (digitalRead(PDOWN) == HIGH);
        }
        if (vers == 1) {
          if ((((colorR >= 124) && (colorR <= 140)) ((colorV >= 10) && (colorV <= 12)))) {
            resultado = norm;
          }
          if ((((colorR > 45) && (colorR < 124)) && ((colorV > 12) && (colorV <= 18)))) {
            resultado = deut;
          }
          if ((((colorR > 140) && (colorR <= 255)) && ((colorV >= 0) && (colorV < 10)))) {
            resultado = prot;
          }
        }
      }
      else {
        reinicioleds();
      }
      break;
    case 2: break;
  }
}

Moderador:
Edita ese título, no es indicativo de ningún tema relacionado con tu exposición.
Como mínimo ponel anomaloscopio o detector de daltonía si te gusta.

Intento leer tu código y veo que no has usado sangría o indentación, por favor, editalo porque es ilegible.

Ya lo edité.