Buenos días Señor:
Estuve haciendo pruenas a mi manera, la de poner un número y luego pulsa Enter. Hace cosas raras todavía. Lo raro que hace es almacenar información que viene de Arduino. Lo ideal sería, que si viene algo desde Arduino, se muestre en pantalla de C++, luego se borre, preparado para que llegue otro nuevo mensaje. El truco de las teclas, todavía no me sale.
Código de Arduino perfectamente funcional con su LCD Keypad Shield incluido.
Si tengo la ventana de C++, pulso el botón desde Arduino, me tiene que llegar un mensaje, solo llega un ON o un OFF. No muestra nada en C#, solo se acumula en la variable lenguaje, que si envío algo, se suma el ON o OFF más otros mensajes.
Si no entiendes a lo que hablo, me lo dices y lo explico de otra manera.
Saludos.
Estuve haciendo pruenas a mi manera, la de poner un número y luego pulsa Enter. Hace cosas raras todavía. Lo raro que hace es almacenar información que viene de Arduino. Lo ideal sería, que si viene algo desde Arduino, se muestre en pantalla de C++, luego se borre, preparado para que llegue otro nuevo mensaje. El truco de las teclas, todavía no me sale.
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <Windows.h>
#include "SerialClass.h"
using namespace std;
void main()
{
SetConsoleTitle("Control Led 13 de Arduino UNO y saludos.");
Serial* Puerto = new Serial("COM4");
while (Puerto -> IsConnected())
{
// Comandos para Arduino.
char L_ON[] = "Led13_ON";
char L_OFF[] = "Led13_OFF";
char Saludar[] = "Hola";
char Luz_ON[] = "Luz_ON";
char Luz_OFF[] = "Luz_OFF";
char lectura[50] = "\0";
int opc;
cout << endl;
cout << "Introduzca la opcion deseada: " << endl << endl;
cin >> opc;
switch (opc)
{
case 1:
cout << "caso 1\n";
// Enviar encender Led.
cout << "Enviando: " << L_ON << endl;
Puerto -> WriteData(L_ON, sizeof(L_ON) - 1);
break;
case 2:
cout << "caso 2\n";
// Enviar apagar Led.
cout << "Enviando: " << L_OFF << endl;
Puerto -> WriteData(L_OFF, sizeof(L_OFF) - 1);
break;
case 3:
cout << "caso 3\n";
// Mensaje saludar.
cout << "Enviando: " << Saludar << endl;
Puerto -> WriteData(Saludar, sizeof(Saludar) - 1);
break;
case 4:
cout << "caso 4\n";
// Mensaje saludar.
cout << "Enviando: " << Luz_ON << endl;
Puerto->WriteData(Luz_ON, sizeof(Luz_ON) - 1);
break;
case 5:
cout << "caso 5\n";
// Mensaje saludar.
cout << "Enviando: " << Luz_OFF << endl;
Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
break;
default:
cout << "Puse del 1 al 5.";
}
cout << endl;
Puerto->ReadData(lectura, 50);
cout << "Recibido: " << lectura << endl;
lectura[0] = 0; // Limpiar.
cout << "-------------------" << endl;
//system("PAUSE");
}
}
Código de Arduino perfectamente funcional con su LCD Keypad Shield incluido.
Código (c) [Seleccionar]
#include <LiquidCrystal.h>
// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
// Pin 10 para saber que es luz de fondo.
const byte LuzFondo = 10;
bool estadoActual = false, estadoUltimo = false, contador = false;
const byte pinLed = 13; // Declaramos la variable pin del Led.
const byte boton = 2;
char caracter;
String comando;
void setup()
{
pinMode(pinLed, OUTPUT); // Inicializa el pin del LED como salida:
pinMode(boton, INPUT); // Pulsador del pin 2.
Serial.begin(115200); // Puerto serie 115200 baudios.
lcd.begin(16, 2); // Formato de pantalla.
//digitalWrite(LuzFondo, HIGH);
lcd.setCursor(0, 0); // Posición en la pantalla.
lcd.print(" Arduino ");
delay(1000);
}
void loop()
{
/* Leyendo carácter a carácter lo que se resive por el canal del puerto serie
y los voy concatenando uno tras otro en una cedena. */
while (Serial.available() > 0)
{
caracter = Serial.read();
comando.concat(caracter);
delay(10);
}
estadoActual = digitalRead(boton); // Guarda el estado del pulsador.
delay(50); // Retardo de 50 mili segundos par evitar antirebotes.
// ¿Pulsador y estadoActual y negación del estadoUltimo es verdadero?
if (estadoActual && !estadoUltimo)
{
contador = !contador; // Cambio el estado tipo boleano.
if (contador)
{
digitalWrite(LuzFondo, HIGH);
Serial.write("ON");
lcd.setCursor(15, 0);
lcd.print("1");
}
else
{
digitalWrite(LuzFondo, LOW);
Serial.write("OFF");
lcd.setCursor(15, 0);
lcd.print("0");
}
}
// Pasa del estadoActual a estadoUltimo.
estadoUltimo = estadoActual;
// Si los carácteres es recibido y verdadero.
if (comando.equals("Led13_ON") == true)
{
digitalWrite(pinLed, HIGH); // Enciende el Led.
Serial.write("Led 13 encendido.");
lcd.setCursor(0, 1);
lcd.print("Led 13 encendido");
}
// Si los carácteres es recibido y verdadero.
if (comando.equals("Led13_OFF") == true)
{
digitalWrite(pinLed, LOW); // Apaga el Led.
Serial.write("Led 13 apagado ");
lcd.setCursor(0, 1);
lcd.print("Led 13 apagado. ");
}
// Mensaje de saludo.
if (comando.equals("Hola") == true)
{
Serial.write("Hola C++ de Win32. Saludos desde Arduino.");
lcd.setCursor(0, 1);
lcd.print("Hola C++ de Win32. Saludos desde Arduino.");
}
if (comando.equals("Luz_ON") == true)
{
digitalWrite(LuzFondo, HIGH); // Apaga el Led.
Serial.write("Luz ON.");
lcd.setCursor(0, 1);
lcd.print("Luz ON. ");
}
if (comando.equals("Luz_OFF") == true)
{
digitalWrite(LuzFondo, LOW); // Apaga el Led.
Serial.write("Luz OFF.");
lcd.setCursor(0, 1);
lcd.print("Luz OFF. ");
}
// Limpiamos la cadena para volver a recibir el siguiente comando.
comando = "";
}
Si tengo la ventana de C++, pulso el botón desde Arduino, me tiene que llegar un mensaje, solo llega un ON o un OFF. No muestra nada en C#, solo se acumula en la variable lenguaje, que si envío algo, se suma el ON o OFF más otros mensajes.
Si no entiendes a lo que hablo, me lo dices y lo explico de otra manera.
Saludos.