Arduino Mega con Motor drive VNH2SP30 y Nextion

Hola a todos! Un gusto!

Escribo porque ocupo su ayuda ya que lo he intentado de todos modos y no lo logro.

Tengo un arduino mega, con una motor drive modelo VNH2SP30, en cual quiero controlar con una pantalla Nextion 4.3", pero no lo logro, no se que esta mal en mi codigo.

#define BRAKE 0
#define CW    1
#define CCW   2
#define CS_THRESHOLD 15   // Definition of safety current (Check: "1.3 Monster Shield Example").

//MOTOR 1
#define MOTOR_A1_PIN 7
#define MOTOR_B1_PIN 8
#define PWM_MOTOR_1 5
#define CURRENT_SEN_1 A2
#define EN_PIN_1 A0
#define MOTOR_1 0

short usSpeed = 150;  //default motor speed
unsigned short usMotor_Status = BRAKE;

// =====================================================================================================================================================================================================================

#include <NexButton.h>
#include <NexCheckbox.h>
#include <NexConfig.h>
#include <NexCrop.h>
#include <NexDualStateButton.h>
#include <NexGauge.h>
#include <NexGpio.h>
#include <NexHardware.h>
#include <NexHotspot.h>
#include <NexNumber.h>
#include <NexObject.h>
#include <NexPage.h>
#include <NexPicture.h>
#include <NexProgressBar.h>
#include <NexRadio.h>
#include <NexRtc.h>
#include <NexScrolltext.h>
#include <NexSlider.h>
#include <NexText.h>
#include <NexTimer.h>
#include <NexTouch.h>
#include <NexUpload.h>
#include <NexVariable.h>
#include <NexWaveform.h>
#include <Nextion.h>
#include <doxygen.h>

NexButton b1GO = NexButton (2, 2, "b1GO");
NexButton b2STOP = NexButton (2, 3, "b2STOP");
NexButton b3REVERSE = NexButton (2, 4, "b3REVERSE");
NexButton b4PLUS = NexButton (2, 5, "b4PLUS");
NexButton b5REST = NexButton (2, 6, "b5REST");

NexTouch *nex_listen_list[] =
{
& b1GO,
& b2STOP,
& b3REVERSE, 
& b4PLUS,
& b5REST,
NULL  
};

void b1GOPopCallBack(void *ptr)
{
 
}

void b2STOPPopCallBack(void *ptr) 
{

}

void b3REVERSEPopCallBack(void *ptr) 
{

}

void b4PLUSPopCallBack(void *ptr) 
{

}

void b5RESTPopCallBack(void *ptr) 
{

}


// =====================================================================================================================================================================================================================

void setup() {         

// =====================================================================================================================================================================================================================

{
  pinMode(MOTOR_A1_PIN, OUTPUT);
  pinMode(MOTOR_B1_PIN, OUTPUT);
  pinMode(PWM_MOTOR_1, OUTPUT);
  pinMode(CURRENT_SEN_1, OUTPUT); 
  pinMode(EN_PIN_1, OUTPUT);
}
{
  nexInit();
  Serial.begin(9600);              // Initiates the serial to do the monitoring 
  Serial.println("Begin motor control");
  Serial.println(); //Print function list for user selection
  Serial.println("Enter number for control option:");
  Serial.println("1. STOP");
  Serial.println("2. FORWARD");
  Serial.println("3. REVERSE");
  Serial.println("+. INCREASE SPEED");
  Serial.println("-. DECREASE SPEED");
  Serial.println();

}

// =====================================================================================================================================================================================================================

{

b1GO.attachPop(b1GOPopCallBack, &b1GO);
b2STOP.attachPop(b2STOPPopCallBack, &b2STOP);
b3REVERSE.attachPop(b3REVERSEPopCallBack, &b3REVERSE);
b4PLUS.attachPop(b4PLUSPopCallBack, &b4PLUS);
b5REST.attachPop(b5RESTPopCallBack, &b5REST);

}
}

// =====================================================================================================================================================================================================================

void loop() 
{
  char user_input;   

 // =====================================================================================================================================================================================================================
    
  {
    nexLoop(nex_listen_list);
  }

// =====================================================================================================================================================================================================================

  while(Serial.available())
  {
    user_input = Serial.read(); //Read user input and trigger appropriate function
    digitalWrite(EN_PIN_1, HIGH);

    if (user_input =='1')
    {
       Stop();
    }
    else if(user_input =='2')
    {
      Forward();
    }
    else if(user_input =='3')
    {
      Reverse();
    }
    else if(user_input =='+')
    {
      IncreaseSpeed();
    }
    else if(user_input =='-')
    {
      DecreaseSpeed();
    }
    else
    {
      Serial.println("Command Received.");
    }
      
  }
}

// =====================================================================================================================================================================================================================

void Stop()
{
  Serial.println("Stop");
  usMotor_Status = BRAKE;
  motorGo(MOTOR_1, usMotor_Status, 0);
}

void Forward()
{
  Serial.println("Forward");
  usMotor_Status = CW;
  motorGo(MOTOR_1, usMotor_Status, usSpeed);
}

void Reverse()
{
  Serial.println("Reverse");
  usMotor_Status = CCW;
  motorGo(MOTOR_1, usMotor_Status, usSpeed);
}

void IncreaseSpeed()
{
  usSpeed = usSpeed + 10;
  if(usSpeed > 255)
  {
    usSpeed = 255;  
  }
  
  Serial.print("Speed +: ");
  Serial.println(usSpeed);

  motorGo(MOTOR_1, usMotor_Status, usSpeed);
}

void DecreaseSpeed()
{
  usSpeed = usSpeed - 10;
  if(usSpeed < 0)
  {
    usSpeed = 0;  
  }
  
  Serial.print("Speed -: ");
  Serial.println(usSpeed);

  motorGo(MOTOR_1, usMotor_Status, usSpeed);
}

// =====================================================================================================================================================================================================================

void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)         //Function that controls the variables: motor(0 ou 1), direction (cw ou ccw) e pwm (entra 0 e 255);
{
  if(motor == MOTOR_1)
  {
    if(direct == CW)
    {
      digitalWrite(MOTOR_A1_PIN, LOW); 
      digitalWrite(MOTOR_B1_PIN, HIGH);
    }
    else if(direct == CCW)
    {
      digitalWrite(MOTOR_A1_PIN, HIGH);
      digitalWrite(MOTOR_B1_PIN, LOW);      
    }
    else
    {
      digitalWrite(MOTOR_A1_PIN, LOW);
      digitalWrite(MOTOR_B1_PIN, LOW);            
    }
    
    analogWrite(PWM_MOTOR_1, pwm); 
  }
}

// =====================================================================================================================================================================================================================

El codigo del motor funciona bien, pero como hago para que al estripar un boton de la pantalla me coloque los valores

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 </>



Yo no respondo hasta que el posteo sea de acuerdo a las normas.

Si adjuntas el proyecto de Nextion Editor te podria ayudar mejor.

En la siguiente linea defines el nombre que va a tener el boton en tu sketch y entre parentesis numero de pagina, id del elemento, y nombre del elemento en Nextion Editor. Los datos del parentesis deben coincidir con los de Nextion Editor.

NexButton b1GO = NexButton (2, 2, "b1GO");

En la siguiente función debes añadir lo que debe hacer tu Arduino cuando el boton b1GO lo sueltas, comprueba en Nextion Editor que has marcado "Send Component ID" en el touch release event.

void b1GOPopCallBack(void *ptr)
{

Hola amigo!

Gracias por tu respuesta, si los comandos NexButton estan en base a el Nextion Editor.
(# de pagina, # de ID, #nombre del boton)

En el "void b1GOPopCallBack(void *ptr)" es donde ocuparia ayuda ya que no logro poner lo datos correctos para accionarlo

La libreria está hecha para usarla en un MEGA conectando la pantalla al Serial2, lo tienes así?
Has conectado el GND de la pantalla con el GND de Arduino?

Si tengo conectado el GND al Arduino Mega.

Igualmente conexicon TX2 y RX2

Intercambialos que no los tengas al reves, si no activa modo DEBUG de la librería a ver cual es el problema.
Podría ser tambien que tengas la pantalla a velocidad diferente. Lo puedes solucionar añadiendo bauds=9600 en el evento de preinicialización de la página 0

Perdón no te he contestado a lo de la función del botón, quizá solo te faltaba eso.

Creo que sería así.

void b1GOPopCallBack(void *ptr) {
 Forward();
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.