Go Down

Topic: Air ride auto pilot (Read 502 times) previous topic - next topic

Turnach

Dec 31, 2017, 01:35 pm Last Edit: Dec 31, 2017, 04:08 pm by surbyte
Buenos días a tod@s,

He visto este proyecto inconcluso y yo estoy empezando uno similar.

En mi caso tengo 4 balonas y 1 calderin de los que quiero visualizar sus presiones.

8 electrovalvulas (Vaciado y llenado) x 4 balonas

1 pulsador que llamo "selector", para pasar de visualización a: control balona 1, otra pulsación: control balona 2,.. y así hasta la cuarta y vuelta a visualización. En definitiva 5 "menús" secuenciales a golpe de pulsador.

2 pulsadores que utilizare en cada menú control para vaciar o llenar manualmente cada Balona.

Quiero incluir un check de presiones inicial que me verifique que cada una esta en un rango definido, un mensaje de error en caso de perdida repentina de presión por alguna de las balonas o calderin.

La visualización funciona de forma permanente y los menus de control, únicamente con el freno de mano puesto.

La verdad es que estoy muy verde. La parte de lectura de presiones ya la tengo hecha y la parte de activar las electroválvulas con los pulsadores mas o menos también.

Lo que no se como meterle mano, es al tema de pasar de un menú a otro.

Saludos.

Turnach

Hola,

lo primero FELIZ AÑO a tod@s.

estoy enredando con las funciones y no consigo hacerme con ellas.

tengo este codigo y no consigo ver porque no me lleva a la función "AJUSTE_BALONA_DI();" desde loop, cuando pulso "selector"

No se si el problema lo tengo en la llamada a la funcion o en la definición de la misma.

La compilacion no me muestra error.


Code: [Select]


void loop() {

  /*SE LEEN LAS ENTRADAS ANALOGICAS SENSORES PRESION*/
 
  AN0=analogRead(A0);   //sera un valor comprendido entre 0 y 1023.
  V=AN0*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
  AN1=analogRead(A1);   //sera un valor comprendido entre 0 y 1023.
  V=AN1*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
  AN2=analogRead(A2);   //sera un valor comprendido entre 0 y 1023.
  V=AN2*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
  AN3=analogRead(A3);   //sera un valor comprendido entre 0 y 1023.
  V=AN3*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
  AN4=analogRead(A4);   //sera un valor comprendido entre 0 y 1023.
  V=AN4*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.

  //valor 128 (0,50V) analogico sera 0 BAR es para calibrar.
 
  BARDI=map(AN0,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DI
  BARDD=map(AN1,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DD
  BARTI=map(AN2,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA TI
  BARTD=map(AN3,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALODA TD
  BARCALD=map(AN4,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.CALDERIN



    /**ESTA SERIA LA ACCION "MUESTRA PRESIONES", QUE PERMANECERIA HASTA QUE SE PULSE "SELECTOR" (ROJO). SI SE PULSA "SELECTOR", PASARA A LA ACCIÓN "AJUSTE BALONA DI"**/
 

   lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("PRESIONES SUSPENSION");
  lcd.setCursor(0,1);
  lcd.print(BARDI,1);  //Medida de presión Bar balona delantera izquierda.
  lcd.print("  DELANTERAS  ");
  lcd.print(BARDD,1);  //Medida de presión Bar balona delantera derecha.
  lcd.setCursor(0,2);
  lcd.print(BARTI,1);  //Medida de presión Bar balona tasera izquierda.
  lcd.print("   TRASERAS   ");
  lcd.print(BARTD,1);  //Medida de presión Bar balona tasera derecha.
  lcd.setCursor(0,3);
  lcd.print("PULSE ROJO SIGUIENTE");
  delay(1000);
   digitalRead(SELECTOR);  //lectura digital de PULSADOR SELECTOR

   if(SELECTOR==LOW)
    {
    AJUSTE_BALONA_DI();
    }
 
}
 

void AJUSTE_BALONA_DI()

{
     /***********************PULSACION LLENAR*************************/
 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" +   AJUSTE PRESION ");
  lcd.setCursor(0,1);
  lcd.print("PULSE      BALONA DI");
  lcd.setCursor(0,2);
  lcd.print("SIGUIENTE");
  lcd.setCursor(12,2);
  AN0=analogRead(A0);   //sera un valor comprendido entre 0 y 1023.
  V=AN0*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
  BARDI=map(AN0,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DI
  lcd.print(BARDI,1);  //Medida de presión Bar balona delantera izquierda.
  lcd.setCursor(16,2);
  lcd.print("BAR");
  lcd.setCursor(0,3);
  lcd.print(" - ");
   
  LLENADO= digitalRead(LLENAR);  //lectura digital de PULSADOR LLENAR
 
  if(LLENADO==LOW)
  {
    digitalWrite(EVDILLENADO,HIGH);  //Estado alto salida pin 52 arduino.(ELECTROVALVULA DELANTERA IZQUIERDA LLENADO)
    }
    else
    {
      digitalWrite(EVDILLENADO,LOW); //Estado bajo salida pin 52 arduino. (LLENADO OFF)
      }





surbyte

Que feo se lee tu código con todo en mayúsculas.
Además cuando postees algo, agrega también el setup para conocer como declaras las variables
Tu error esta acá

Code: [Select]
digitalRead(SELECTOR);  //lectura digital de PULSADOR SELECTOR

    if (SELECTOR ==LOW) {
        AJUSTE_BALONA_DI();
    }


debería ser asi

Code: [Select]

   bool dato = digitalRead(SELECTOR);  // supongo que SELECTOR es un pin del Arduino.
                                       // Como no lo indicas no lo se
   if (dato == LOW) {
      AJUSTE_BALONA_DI();
   }

    

Turnach

Gracias por contestar.

pego el resto de código.

Es mi primer codigo y es evidente que tendré que pulir unos cuantos detalles.


Code: [Select]


 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //Crear el objeto lcd  dirección  0x27 y 20 columnas x 4 filas



int SELECTOR = 24;  //entrada digital Pull Down Boton SELECTOR
int LLENAR = 26;  //entrada digital Pull Down Boton LLENAR
int VACIAR = 28;  //entrada digital Pull Down Boton VACIAR
float  AN0;  //entrada analógica, conversion, precision de 0 a 1023.Balona DI
float  AN1;  //entrada analógica, conversion, precision de 0 a 1023.Balona DD
float  AN2;  //entrada analógica, conversion, precision de 0 a 1023.Balona TI
float  AN3;  //entrada analógica, conversion, precision de 0 a 1023.Balona TD
float  AN4;  //entrada analógica, conversion, precision de 0 a 1023.CALDERIN
float  V;  //equivalencia conversion, AN0 a Voltaje. De 0,5 a 4,5V.
float TiemMili=1000; //Tiempo de refreco de pantalla en milisegundos.

/*Maxima y mínima entrada analogica conversion*/
float AnConverMax=1023;  //Entrada analogica conversion maxima.
float AnCaliMin=128; //Calibración entada analógica sensor empieza en 0 BAR con 0,5V.
/*Máxima y mínima medición del sensor en BAR*/
float BARSensorMax=12; //Medida máxima de BAR del sensor.
float BARSensorMin=0;  //Medida mínima de BAR del sensor.

float BARDI;  //Bares presión Balona Delantera Izquierda.
float BARDD;  //Bares presión Balona Delantera Dereca.
float BARTI;  //Bares presión Balona Trasera Izquierda.
float BARTD;  //Bares presión Balona Trasera Derechaa.
float BARCALD;  //Bares presión CALDERIN.

float AlarmaBAR=1;  //Alarma de baja presión BALONAS. Si la presion baja de estos BAR MUESTRA MENSAJE EN PANTALLA.
float AlarmaBARCALD=4;  //Alarma de baja presión CALDERIN. Si la presion baja de estos BAR MUESTRA MENSAJE EN PANTALLA.

int EVDILLENADO=52; //Salida digital pin 52 de activacion/desactivacion ELECTROVALVULA DELANTERA IZQUIERDA LLENADO.
int EVDIVACIADO=50; //Salida digital pin 50 de activacion/desactivacion ELECTROVALVULA DELANTERA IZQUIERDA VACIADO.
int EVDDLLENADO=48; //Salida digital pin 48 de activacion/desactivacion ELECTROVALVULA DELANTERA DERECHAA LLENADO.
int EVDDVACIADO=46; //Salida digital pin 46 de activacion/desactivacion ELECTROVALVULA DELANTERA DERECHA VACIADO.
int EVTILLENADO=53; //Salida digital pin 53 de activacion/desactivacion ELECTROVALVULA TRASERA IZQUIERDA LLENADO.
int EVTIVACIADO=51; //Salida digital pin 51 de activacion/desactivacion ELECTROVALVULA TRASERA IZQUIERDA VACIADO.
int EVTDLLENADO=49; //Salida digital pin 49 de activacion/desactivacion ELECTROVALVULA TRASERA DERECHA LLENADO.
int EVTDVACIADO=47; //Salida digital pin 47 de activacion/desactivacion ELECTROVALVULA TRASERA DERECHA VACIADO.

int LLENADO=0;
int VACIADO=0;




void setup() {
 
/*DEFINO ENTRADAS Y SALIDAS*/
 

  pinMode(EVDILLENADO,OUTPUT);
  pinMode(EVDIVACIADO,OUTPUT);
  pinMode(EVDDLLENADO,OUTPUT);
  pinMode(EVDDVACIADO,OUTPUT);
  pinMode(EVTILLENADO,OUTPUT);
  pinMode(EVTIVACIADO,OUTPUT);
  pinMode(EVTDLLENADO,OUTPUT);
  pinMode(EVTDVACIADO,OUTPUT);
  pinMode(LLENAR,INPUT);
  pinMode(VACIAR,INPUT);
  pinMode(SELECTOR,INPUT);

  /* DEFINO INICIALMENTE RELES APAGADOS*/

  digitalWrite(EVDILLENADO,HIGH);
  digitalWrite(EVDDLLENADO,HIGH);
  digitalWrite(EVTILLENADO,HIGH);
  digitalWrite(EVTDLLENADO,HIGH);
  digitalWrite(EVDIVACIADO,HIGH);
  digitalWrite(EVDDVACIADO,HIGH);
  digitalWrite(EVTIVACIADO,HIGH);
  digitalWrite(EVTDVACIADO,HIGH);

  Serial.begin(9600); 
 
  lcd.begin(20,4); //indico  LCD 4 filas de 20 caracteres.
 
  lcd.backlight();  //Encender la luz de fondo.

 
  }

void loop() {

surbyte

Aca lo tienes, pero te sigo diciendo que en mayúscula todo resuelta muy muy chocante.
Las mayúsculas son como gritar. Por eso no se permite escribir en mayúsculas.


Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //Crear el objeto lcd  dirección  0x27 y 20 columnas x 4 filas

int SELECTOR    = 24;  //entrada digital Pull Down Boton SELECTOR
int LLENAR      = 26;  //entrada digital Pull Down Boton LLENAR
int VACIAR      = 28;  //entrada digital Pull Down Boton VACIAR
float  AN0;  //entrada analógica, conversion, precision de 0 a 1023.Balona DI
float  AN1;  //entrada analógica, conversion, precision de 0 a 1023.Balona DD
float  AN2;  //entrada analógica, conversion, precision de 0 a 1023.Balona TI
float  AN3;  //entrada analógica, conversion, precision de 0 a 1023.Balona TD
float  AN4;  //entrada analógica, conversion, precision de 0 a 1023.CALDERIN
float  V;  //equivalencia conversion, AN0 a Voltaje. De 0,5 a 4,5V.
float TiemMili     = 1000; //Tiempo de refreco de pantalla en milisegundos.

/*Maxima y mínima entrada analogica conversion*/
float AnConverMax  = 1023;  //Entrada analogica conversion maxima.
float AnCaliMin    = 128; //Calibración entada analógica sensor empieza en 0 BAR con 0,5V.
/*Máxima y mínima medición del sensor en BAR*/
float BARSensorMax = 12; //Medida máxima de BAR del sensor.
float BARSensorMin = 0;  //Medida mínima de BAR del sensor.

float BARDI;  //Bares presión Balona Delantera Izquierda.
float BARDD;  //Bares presión Balona Delantera Dereca.
float BARTI;  //Bares presión Balona Trasera Izquierda.
float BARTD;  //Bares presión Balona Trasera Derechaa.
float BARCALD;  //Bares presión CALDERIN.

float AlarmaBAR     = 1;  //Alarma de baja presión BALONAS. Si la presion baja de estos BAR MUESTRA MENSAJE EN PANTALLA.
float AlarmaBARCALD = 4;  //Alarma de baja presión CALDERIN. Si la presion baja de estos BAR MUESTRA MENSAJE EN PANTALLA.

int EVDILLENADO = 52; //Salida digital pin 52 de activacion/desactivacion ELECTROVALVULA DELANTERA IZQUIERDA LLENADO.
int EVDIVACIADO = 50; //Salida digital pin 50 de activacion/desactivacion ELECTROVALVULA DELANTERA IZQUIERDA VACIADO.
int EVDDLLENADO = 48; //Salida digital pin 48 de activacion/desactivacion ELECTROVALVULA DELANTERA DERECHAA LLENADO.
int EVDDVACIADO = 46; //Salida digital pin 46 de activacion/desactivacion ELECTROVALVULA DELANTERA DERECHA VACIADO.
int EVTILLENADO = 53; //Salida digital pin 53 de activacion/desactivacion ELECTROVALVULA TRASERA IZQUIERDA LLENADO.
int EVTIVACIADO = 51; //Salida digital pin 51 de activacion/desactivacion ELECTROVALVULA TRASERA IZQUIERDA VACIADO.
int EVTDLLENADO = 49; //Salida digital pin 49 de activacion/desactivacion ELECTROVALVULA TRASERA DERECHA LLENADO.
int EVTDVACIADO = 47; //Salida digital pin 47 de activacion/desactivacion ELECTROVALVULA TRASERA DERECHA VACIADO.

int LLENADO     = 0;
int VACIADO     = 0;


void setup() {
 
  /*DEFINO ENTRADAS Y SALIDAS*/
  pinMode(EVDILLENADO,OUTPUT);
  pinMode(EVDIVACIADO,OUTPUT);
  pinMode(EVDDLLENADO,OUTPUT);
  pinMode(EVDDVACIADO,OUTPUT);
  pinMode(EVTILLENADO,OUTPUT);
  pinMode(EVTIVACIADO,OUTPUT);
  pinMode(EVTDLLENADO,OUTPUT);
  pinMode(EVTDVACIADO,OUTPUT);
  pinMode(LLENAR,INPUT);
  pinMode(VACIAR,INPUT);
  pinMode(SELECTOR,INPUT);

  /* DEFINO INICIALMENTE RELES APAGADOS*/

  digitalWrite(EVDILLENADO,HIGH);
  digitalWrite(EVDDLLENADO,HIGH);
  digitalWrite(EVTILLENADO,HIGH);
  digitalWrite(EVTDLLENADO,HIGH);
  digitalWrite(EVDIVACIADO,HIGH);
  digitalWrite(EVDDVACIADO,HIGH);
  digitalWrite(EVTIVACIADO,HIGH);
  digitalWrite(EVTDVACIADO,HIGH);

  Serial.begin(9600); 
 
  lcd.begin(20,4); //indico  LCD 4 filas de 20 caracteres.
 
  lcd.backlight();  //Encender la luz de fondo.
}

void loop() {

  /*SE LEEN LAS ENTRADAS ANALOGICAS SENSORES PRESION*/
 
  AN0   = analogRead(A0);   // sera un valor comprendido entre 0 y 1023.
  V     = AN0*0.00391;      // variacion de voltaje de 0,5 a 4,5 V.
  AN1   = analogRead(A1);   // sera un valor comprendido entre 0 y 1023.
  V     = AN1*0.00391;      // variacion de voltaje de 0,5 a 4,5 V.
  AN2   = analogRead(A2);   // sera un valor comprendido entre 0 y 1023.
  V     = AN2*0.00391;      // variacion de voltaje de 0,5 a 4,5 V.
  AN3   = analogRead(A3);   // sera un valor comprendido entre 0 y 1023.
  V     = AN3*0.00391;      // variacion de voltaje de 0,5 a 4,5 V.
  AN4   = analogRead(A4);   // sera un valor comprendido entre 0 y 1023.
  V     = AN4*0.00391;      // variacion de voltaje de 0,5 a 4,5 V.

  //valor 128 (0,50V) analogico sera 0 BAR es para calibrar.
 
  BARDI     = map(AN0,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DI
  BARDD     = map(AN1,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DD
  BARTI     = map(AN2,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA TI
  BARTD     = map(AN3,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALODA TD
  BARCALD   = map(AN4,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.CALDERIN

  /**ESTA SERIA LA ACCION "MUESTRA PRESIONES", QUE PERMANECERIA HASTA QUE SE PULSE "SELECTOR" (ROJO). SI SE PULSA "SELECTOR", PASARA A LA ACCIÓN "AJUSTE BALONA DI"**/
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("PRESIONES SUSPENSION");
  lcd.setCursor(0,1);
  lcd.print(BARDI,1);  //Medida de presión Bar balona delantera izquierda.
  lcd.print("  DELANTERAS  ");
  lcd.print(BARDD,1);  //Medida de presión Bar balona delantera derecha.
  lcd.setCursor(0,2);
  lcd.print(BARTI,1);  //Medida de presión Bar balona tasera izquierda.
  lcd.print("   TRASERAS   ");
  lcd.print(BARTD,1);  //Medida de presión Bar balona tasera derecha.
  lcd.setCursor(0,3);
  lcd.print("PULSE ROJO SIGUIENTE");
  delay(1000);
  bool dato = digitalRead(SELECTOR);  //lectura digital de PULSADOR SELECTOR

    if (dato ==LOW) {
        AJUSTE_BALONA_DI();
    }
}
 
void AJUSTE_BALONA_DI() {

    /***********************PULSACION LLENAR*************************/
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(" +   AJUSTE PRESION ");
    lcd.setCursor(0,1);
    lcd.print("PULSE      BALONA DI");
    lcd.setCursor(0,2);
    lcd.print("SIGUIENTE");
    lcd.setCursor(12,2);
    AN0 = analogRead(A0);   //sera un valor comprendido entre 0 y 1023.
    V = AN0*0.00391;        //variacion de voltaje de 0,5 a 4,5 V.
    BARDI = map(AN0,AnCaliMin,AnConverMax,BARSensorMin,BARSensorMax); //mapeamos valor entrada analógica (0.50-4,50V) a 0-12 BAR.BALONA DI
    lcd.print(BARDI,1);  //Medida de presión Bar balona delantera izquierda.
    lcd.setCursor(16,2);
    lcd.print("BAR");
    lcd.setCursor(0,3);
    lcd.print(" - ");

    LLENADO = digitalRead(LLENAR);  //lectura digital de PULSADOR LLENAR

    if (LLENADO==LOW)   {
       digitalWrite(EVDILLENADO,HIGH);  //Estado alto salida pin 52 arduino.(ELECTROVALVULA DELANTERA IZQUIERDA LLENADO)
    }
    else {
       digitalWrite(EVDILLENADO,LOW); //Estado bajo salida pin 52 arduino. (LLENADO OFF)
    }
}



Go Up