Puerto Serial

Bueno explico mi problema, tengo un circuito de semaforo peatonal, el cual funciona en lo fisico, oprimo el boton y funciona, detiene los autos y da paso al peaton, si esta en verde el peaton y lo vuelve a oprimir da mas tiempo, ahora siendo proyecto escolar nos piden vincularlo con Visual Studio, ya tenia todo listo, cada LED imprime su color y asi, el detalle es que en el toque inicial para pedir el paso cuando mando el valor por serial con el caracter o numero definido no lo toma y lo desecha, parte contraria cuando lo mando para aumentar el tiempo del crucero si lo hace, adjunto circuito en TinkerCAD y el codigo aqui, si me ayudan se los agradecería infinitamente

int AutosVerde = 6;
int AutosAmarillo = 5;
int AutosRojo = 4;
int PeatonVerde = 3;
int PeatonRojo = 2;
int boton = 7;
int botonState;
int estadoBoton;
int con = 0;
int lectura;
String tiempo;
void setup() {
  Serial.begin(9600);
  pinMode(AutosVerde , OUTPUT);
  pinMode(AutosAmarillo, OUTPUT);
  pinMode(AutosRojo, OUTPUT);
  pinMode(PeatonVerde, OUTPUT);
  pinMode(PeatonRojo, OUTPUT);
}
void loop() {
  botonState = digitalRead(boton);
  if (con == 30 || botonState == HIGH || Serial.available() > 0) {
    lectura = Serial.read();
    if (lectura == 1 || con == 30 || botonState == HIGH) {
      delay(2000);
      for (int i = 0; i < 4; i++) {
        digitalWrite(AutosVerde, LOW);
        Serial.println("z");
        delay(500);
        digitalWrite(AutosVerde, HIGH);
        Serial.println("x");
        delay(500);
      }
      digitalWrite(AutosVerde, LOW);
      Serial.println("z");
      digitalWrite(AutosAmarillo, HIGH);
      Serial.println("c");
      delay(4000);
      digitalWrite(AutosAmarillo, LOW);
      Serial.println("v");
      digitalWrite(AutosRojo, HIGH);
      Serial.println("b");
      digitalWrite(PeatonVerde, HIGH);
      Serial.println("a");
      digitalWrite(PeatonRojo, LOW);
      Serial.println("f");
      botonState = 0;
      for (int i = 0; i < 50; i++) {
        estadoBoton = digitalRead(boton);
        if (estadoBoton == HIGH || Serial.available() > 0 ) {
          tiempo = Serial.readString();
          if (tiempo == "1") {
            i = 0;
            Serial.println("++");
          }
          else {
            i = 0;
            Serial.println("++");
          }
        } else {
          delay(100);
        }
        }
        for (int i = 0; i < 4; i++) {
          digitalWrite(PeatonVerde, LOW);
          Serial.println("s");
          delay(500);
          digitalWrite(PeatonVerde, HIGH);
          Serial.println("a");
          delay(500);
        }
        digitalWrite(AutosRojo, LOW);
        Serial.println("n");
        digitalWrite(PeatonVerde, LOW);
        Serial.println("s");
        Serial.println("x");
        Serial.println("d");
        con = 0;
      }
    } else {
      digitalWrite(AutosVerde, HIGH);
      digitalWrite(PeatonRojo, HIGH);
      con++;
      delay(500);
    }

  }

semaforo.ino.ino (2.22 KB)

Me gustaría ayudarte, pero es necesario que comenten lo que está haciendo tu código, de esa manera los demás pueden entender el funcionamiento, y tú mismo lo entiendes mejor.

También es mejor que insertes el código directamente en el post, no lo adjuntes amenos que sea muy largo, de esa manera más personas van a revisar tu código y más posibilidades de que te ayuden tienes.

Ten en cuenta que cuando envías un valor numérico por el puerto serie los que en realidad hace el microcontrolador es enviar una cadena de caracteres ascii. Por ejemplo, si el se ejecuta "Serial.print(variable)" y variable es igual a 42, entonces se van a enviar dos bytes, un 4 y un 2, por lo que el receptor debe convertir la cadena de caracteres a un valor decimal.

Hola gaboleon2071:

Antes que nada, si envías datos al puerto serie, en vez de usar Serial.print(variable) uses este otro.

Serial.write(variable);

Aquí hay algunos tutoriales sobre puerto serie, Arduino y Visual Studio.

Serial.

Saludos.