Autor Tema: Ayuda con optimización  (Leído 255 veces)

Majestad278

  • Moderador Global
  • Aprendiz
  • *****
  • Mensajes: 324
  • Karma: +6/-0
  • contacto rápido en el LINE ID: majestad278
    • Ver Perfil
  • Ubicación: Tavernes de la Valldigna (Valencia)
Ayuda con optimización
« en: Mayo 28, 2016, 07:52:42 pm »
Hola todos, llevo un tiempo con una cosa que comunica dos arduinos uno con el GRBL y otro con un sketch propio para controlar vía botones ciertas funciones del GRBL.

La cuestión es que mi sabiduría de código C++ y codigo C++ de arduino es muy básica, y mis programas suelen ser algo burdos para el sistema arduino, aunque es pequeño, simple y yo creo que se ve lo que hace el arduino. Vale pues mis dudas son las siguientes:

  • Como podría optimizar mi código para que sea mas eficiente?
  • Se podría simplificar este código para que ocupe menos?
  • La comunicación serie que he creado seria compatible con el GRBL?

El código aqui:
Código: [Seleccionar]
/*
Programa para botonera externa GRBL.
Consta de los 2 botones principales de control, E-Stop, home, spindle enable...

Pido disculpas por esta aberracion de codigo, todavia no estoy muy familiarizado con el C++ de Arduino.
Se puede modificar actualizar o crear un codigo mas decente.
*/

#define Start 2
#define hold 3
#define Stop 4
#define ME A0
#define Home 5
#define unlock 6
#define out1 8
#define out2 9

void setup()
{
    Serial.begin(115200);
    pinMode(Start, INPUT_PULLUP);
    pinMode(hold, INPUT_PULLUP);
    pinMode(Stop, INPUT_PULLUP);
    pinMode(Home, INPUT_PULLUP);
    pinMode(unlock, INPUT_PULLUP);
    pinMode(ME, INPUT);
    pinMode(out1, OUTPUT);
    pinMode(out2, OUTPUT);
}

//Nota: Los delay estan para mantener un equilibrio entre pulsacion del boton y ejecucion de la instruccion que pertoque.
/*
   EJEMPLO de la salida del primer bloque:
   
      Sin delay | Con delay
     -----------|-----------
     1 pulsacion|1 pulsacion
     -----------|-----------
     ~~~~~~~~...|     ~
 */
void loop()
{
  //PRIMER BLOQUE: COMIENZO DEL CICLO.
    if(digitalRead(Start) == LOW)
    {
      Serial.println("~");
      delay(500);
      goto A;
    }
    A:
  //SEGUNDO BLOQUE: PAUSA DEL CICLO.
    if(digitalRead(hold) == LOW)
    {
      Serial.println("!");
      delay(500);
      goto B;
    }
    B:
  //TERCER BLOQUE: HOME PARA LOS EJES X,Y = 0 Y Z = +10.
    if(digitalRead(Home) == LOW)
    {
      Serial.println("G0 X0 Y0 Z10");
      delay(500);
      goto C;
    }
    C:
  //QUARTO BLOQUE: DESBLOQUEO DE LA MAQUINA FRENTE ERRORES.
    if(digitalRead(unlock) == LOW)
    {
      Serial.println("^X");
      delay(500);
      goto D;
    }
    D:
  //QUINTO BLOQUE: CONTROL DEL DRIVER SPINDLE.
    //Descomente estas dos lineas para el test analogo del selector 0=Driver apagado, numero >0=encendido.
    //Serial.println(analogRead(ME));
    //delay(1000);
    switch(analogRead(ME))
    {
       case 0: //Apagado.
          digitalWrite(out2, LOW);
          goto E;
       case 930: //Encendido
          digitalWrite(out2, HIGH);
          goto E;
     }
    E:
  //SEXTO BLOQUE: E-STOP envia un reset al arduino GRBL.
    if(digitalRead(Stop) == LOW)
    {
      digitalWrite(out1, HIGH);
      delay(500);
      digitalWrite(out1, LOW);
      delay(500);
    }
}
Proyecto RPi CNC aqui:
(https://sourceforge.net/p/rpi-cnc/)

Foshland

  • Moderador Global
  • Usuario de CNCs
  • *****
  • Mensajes: 1399
  • Karma: +23/-4
    • Ver Perfil
  • Ubicación: Ceuta
Re:Ayuda con optimización
« Respuesta #1 en: Mayo 29, 2016, 10:51:07 pm »
ASi por encima y antes de cenar... luego lo mirare mas detenidamente...

Primero, no me parece muy mal el codigo, asi k vas por buen camino

a la pregunta 1 y 3 luego intentare responderte con algo

al punto 2... para que quieres que ocupe menos? por aprender? o por limitacion alguna??
Me sigue fascinando el ingenio humano

Majestad278

  • Moderador Global
  • Aprendiz
  • *****
  • Mensajes: 324
  • Karma: +6/-0
  • contacto rápido en el LINE ID: majestad278
    • Ver Perfil
  • Ubicación: Tavernes de la Valldigna (Valencia)
Re:Ayuda con optimización
« Respuesta #2 en: Mayo 30, 2016, 12:05:46 am »
Aprender o si hay alguna forma mas rapida escribir todo eso con menos... como hace poco que saque una dspcie de certificado por SoloLearn en C++, de momento solo hago cosas sencillas leo codigo para entenderlo y demas. Pero haun me falta practica casi todo :))
Proyecto RPi CNC aqui:
(https://sourceforge.net/p/rpi-cnc/)