Pages: [1]   Go Down
Author Topic: Ayuda: no encuentro el fallo. Peqeño código  (Read 515 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenos dias.

Estoy cacharreando con el Arduino Uno y hay una una parte de mi programa que no funciona.

Lo simplifiqué al máximo en un nuevo sketch, pero sigue sin funcionar.

Será un error tonto, pero no doy con el y estoy clavao. O me he vuelto tonto de repente o no se que pasa...

Por favor, tengase en cuenta que falta mucho código que eliminé simplemente por hacer desde el principio la disposición de mensajes que aparecerán en el display en función de los pulsadores.

Code:


#include <LiquidCrystal.h>
//Para el control de fecha y hora
#include <Wire.h>
LiquidCrystal lcd(12,11,5,4,3,2);
//Para el control de fecha y hora
#define DS1307_I2C_ADDRESS 0x68

//Para versión definitiva crear variables globales que unicamente necesiten ser globales

const int TAM=4;                      //En realidad será 300, pero para probarlo mejor así

int encoder,sensorValue,referencia,switch1State,switch2State,stage=1,posIni,error,control,modo=0;
const int piezo=8, selectorRef=7, LEDRef=13, controlPin=6;
float peralte[TAM];
static int encoderDone=0,pos,cm,k=0,peticionDato=0;

void setup(){
  Serial.begin(9600);
  //Configuración de entradas y salidas:
  pinMode(selectorRef,INPUT);        //SelectorRef
  pinMode(9,INPUT);                  //Encoder
  pinMode(piezo,OUTPUT);             //Piezo
  pinMode(LEDRef,OUTPUT);            //LED indicativo de por onde se toma la referencia
 
  //Inicialización peralte:
  for(int i=0;i<TAM;i++){
    peralte[i]=0;
  }
  //Inicialización LCD:
  lcd.begin(16,2);
  while (millis()<1500){
    lcd.setCursor(0,0);
    lcd.print("Peralte: (mm)");
    lcd.setCursor(0,1);
    lcd.print("Posicion: (mm)");
  }
   
  //Inicialización envio de datos por el puerto serie:
  Serial.print("Peralte(mm);");
  Serial.print("Referencia(mm);");
  Serial.print("Posicion;");
  Serial.print("Error;");
  Serial.println("Control;");
 
}

//Desplaza Vector:
void desplazaVector(float *vector,int tam){
  for(int i=tam-1;i>0;i--){
    vector[i]=vector[i-1];
  }
}

//Selecciona el modo de funcionamiento. Este puede ser registro o control. En el primero
//el sistema únicamente registra los datos y envia a PC. En el segundo modo de funcionamiento
//establece la acción de control. Para realizar el control, se selecciona si la referencia
//el peralte teórico será enviado desde PC o se toma de potenciómetro.
 

void loop(){
  long previousMillis=0,interval=1000;
  unsigned long currentMillis=millis();
  static int previousRef;
  char cadena[24];
  byte contador=0;
 
  static int sel;

  int OK=0;
 
  switch1State=digitalRead(selectorRef);      //Pulsador de selección
  //¡ATENCIÓN! modificar el pin del pulsador de OK. Esta versión es provisional y aprovecha el pulsador
  //conectado en el pin 9, correspondiente al encoder
  switch2State=digitalRead(9);               //Pulsador de OK
 
  lcd.clear();
 

    lcd.setCursor(0,0);
    lcd.print("Modo operacion");
    lcd.setCursor(0,1);
    lcd.print("Registro Control");
    while(sel<200){
      digitalWrite(LEDRef,HIGH);
    if (switch1State){
      sel++;
    }
 
    }
   digitalWrite(LEDRef,LOW);
}

//Seleccción de referencia por puerto serie o mediante potenciomentro
//Está por ver que la selección se realiza mediante pulsador. Mejor mediante contacto conmutado.
//Finalmente por pulsador y añadir dos etapas mas para poder seleccionar una posición en la que unicamente registre
Logged

Murcia
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A lo mejor si pones cual es el problema que tienes, o lo que se supone que debería hacer, cual es la parte que no funciona...
dar alguna pista para ir acotando..

Yo soy nuevo en el arduino, y no sabía que se podían declarar variables así del tiron en una misma línea y setearlas smiley-eek
Perdona por mi nula ayuda...
Salu2
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 29
Posts: 527
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si fuese un examen ya encontre el error, pero mejor aun si dices que quieres que haga
el error esta en el loop

primero no uses clear a cada rato, se tarda mucho, sobreescribe en la posicion o reescribe todo el renglon, es mas rapido
Te comento entre lineas de tu codigo, lo que creo está mal.

 
  switch1State=digitalRead(selectorRef);      //Pulsador de selección
  //¡ATENCIÓN! modificar el pin del pulsador de OK. Esta versión es provisional y aprovecha el pulsador
  //conectado en el pin 9, correspondiente al encoder
  switch2State=digitalRead(9);               //Pulsador de OK
 
// usar en el setup o cambio de pantallas
  lcd.clear();
 
solo escribe en la pantalla cuando haya un cambio, es lento y parpadea
    lcd.setCursor(0,0);
    lcd.print("Modo operacion");
    lcd.setCursor(0,1);
    lcd.print("Registro Control");
esto parece un antirebote, yo pondria un capacitor en pullup de 100nf y pregunto si no lo soltó siga en el loop

    while(sel<200)
{
      digitalWrite(LEDRef,HIGH);
   //aca lees esta variable pero
    if (switch1State)
   {
      sel++;
    }
 
    }
   digitalWrite(LEDRef,LOW);
}


Cambiaria todo esto por un switch, preguntando que boton toco y en el bloque que corresponda dibujo y hago operaciones, despues solo espero una tecla, el display no hace falta refrescarlo.
Logged

El que pregunta aprende, el que responde aprende a responder.

Pages: [1]   Go Up
Jump to: