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.
#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