Hola a todos.
Estoy desarrollando un proyecto en Arduino UNO en el cual pretendo contabilizar los pulsos de un encoder rotativo y por medio de un push button ejecutar un Insert query que grabe el contador en la BD.
Mi problema se centra en que no puedo encapsular el valor de contador para insertarlo en la BD, actualmente capturo la palabra "Pos", ya que asi nombre mi variable.
En el monitor serial si puedo imprimir el valor numerico de la variable "Pos"
Alguien puede ayudarme a encapsular el valor para el query?
#include <SPI.h>
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
const int LED1 = 12;
const int LED2 = 13;
int pinA = 6; // Conectado al CLK on KY-040
int pinB = 5; // Conectado al DT on KY-040
int Pos = 0; // Es el que indica la posición del encoder
bool C = true;
bool D = true;
unsigned long time;
unsigned long t;
const int boton = 2;
int val;
char INSERT_SQL[] = "INSERT INTO fxi.counter (counter)VALUES ('%Pos')"; // Sample query
byte mac_addr[] = { 0x90, 0xA2, 0xDA, 0x10, 0xBD, 0x2C };
IPAddress server_addr(192, 168, 0, 101); // IP of the MySQL *server* here
char user[] = "fxi"; // MySQL user login username
char password[] = "4321"; // MySQL user login password
EthernetClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
// Inicio puerto serie
Serial.begin (9600);
// Declaro pines Encoder
pinMode(boton, INPUT);
pinMode (pinA, INPUT); // Derecha
pinMode (pinB, INPUT); // Izquierda
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
Ethernet.begin(mac_addr);
Serial.println("Connecting...");
if (conn.connect(server_addr, 3306, user, password)) {
delay(8000);
}
Serial.print("Encoder Position: ");
Serial.println(Pos); // Contador para la posición
}
void loop() {
if (digitalRead(pinA) == LOW) {
digitalWrite(LED1, LOW);
t = time;
if (C == true) {
Pos ++; //pos = pos + 1
digitalWrite(LED1, HIGH);
Serial.print("Encoder Position: ");
Serial.println(Pos);
C = false;
D = false;
}
}
if (digitalRead(pinB) == LOW) {
digitalWrite(LED2, LOW);
t = time;
if (D == true) {
Pos --; // pos = pos - 1
if (Pos < 0) {
Pos ++; // Evito conflicto con Encoder
}
digitalWrite(LED2, HIGH);
Serial.print("Encoder Position: ");
Serial.println(Pos);
D = false;
C = false; // Bloquea la lectura del A porque el B llego primero
//y sino me entra y pasa a la posición anterior
}
}
if (time - t > 1) { // Tengo que esperar 8 ms para registrar nuevamente
C = true;
D = true;
}
val = digitalRead(boton);
if (val == LOW) {
delay(50);
if (val == LOW) {
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(INSERT_SQL);
delete cur_mem;
Serial.println("Data recorded.");
delay(1000);
}
else Serial.println("Connection failed.");
}
time = millis(); // Registra el tiempo en todo el programa
//y lo usare en las distintas instancias.
}