Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2017
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Cambiar este código C++

Hola:

El programa que quiero es:

1. Si pulso un número 1 o un 2 en C++, envía un mensaje a Aduino, luego Arduino le devuelve un mensaje.

2. Si pulso otro número que no está en el Switch Case, te salta el mensaje Default inficando que solo hay dos opciones para pulsar, tecla 1 y 2. Si pulso un 3 o otro valor que no existe, se queda elprograma C++ como esperando y no hace nada.

3. Si no se pulsa nada desde C++, Arduino tiene un botón, que al pulsarlo, envía mensajes llamado, ON o un OFF, C++ debe leer, nunca los lee.

Uso el IDE de Visual Studio 2017 en Win32 consola.

El código C++ que debo mejorar y no se como hacerlo lo que pido arriba:
Código:
// Para crear conexión con los puertos COM1 - COM9.
// Serial* Arduino = new Serial("COM7");

// Para crear conexión con los puertos COM10 en adelante.
// Serial* Arduino = new Serial("\\\\.\\COM10");

#include <iostream>
#include <fstream>
#include <Windows.h>
#include "SerialClass.h"
using namespace std;

void main()
{
   // Título de la ventana
   SetConsoleTitle("Control Led Arduino.");

   // Puerto serie.
   Serial* Puerto = new Serial("COM4");

   // Comandos para Arduino.
   char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie.
   char Luz_OFF[] = "Luz_OFF";
   char lectura[50] = "\0"; // Guardan datos de entrada del puerto.

   int opc; // Guarda un 1 o 2 tipo entero queintroduces desde la consola.

   while (Puerto->IsConnected())
   {
      cout << endl; // Dejamos un retorno.
      cout << "Introduzca la opcion deseada: " << endl << endl; // Muestra texto en pantalla.

      cin >> opc; // Aquí introduces un número, el 1 o el 2.

      switch (opc) // Espera recibir un 1 o un 2.
      {
      case 1:
         // Encener luz.
         cout << "Enviando: " << Luz_ON << endl; // Muestra en pantalla textos.
         Puerto->WriteData(Luz_ON, sizeof(Luz_ON) - 1); // Envía al puerto el texto "Luz_ON".
         break;

      case 2:
         // Apagar luz.
         cout << "Enviando: " << Luz_OFF << endl;
         Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
         break;

      default: // Si haz pulsado otro número distinto del 1 y 2, muestra
         cout << "Puse del 1 al 2."; // este mensaje.
      }


      while (true) {
         int n = Puerto->ReadData(lectura, 49);
         if (n > 0) {
            lectura[n + 1] = '\0';
            break;
         }
         Sleep(1);
      }
      cout << "Recibido: " << lectura << endl;
      cout << "-------------------" << endl;
      }
}
Su librería es esta.
https://github.com/Gmatarrubia/LibreriasTutoriales

¿Alguna ayuda?

Llevo dos semanas con esto, ajjaa ajaj ja jaja. Al menos he logrado enviar y recibir algo, pero no sale como quiero.

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #2  
Antiguo 26-03-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El error fundamental que te bloquea el código es esta línea:*
Código PHP:
while ((opc == 1) == (opc == 2)) 
Fíjate en la lógica, tu quieres que entre en el bucle si opc es 1 ó 2 pero ocurre esto:
- si opc es 1 ó 2 no entra en el bucle puesto que la condición es falsa.
- si opc no es 1 ni 2, la condición del bucle es cierta, entra y no sale. Esto lo resuelves así:
Código PHP:
while ((opc == 1) || (opc == 2)) // || es el operador "or" lógico 
Pero poner ahí un bucle es otro error, deberías poner un simple condicional:
Código PHP:
if ((opc == 1) || (opc == 2)){
      
int n Puerto->ReadData(lectura49);
      if (
0)
        
lectura[1] = '\0';

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Me ayudan con este código?? MaxiDucoli Varios 1 15-03-2015 17:04:31
ayuda con este codigo kurono Varios 5 02-04-2014 01:25:11
Porque este código me da error (adjunto código) David JAVA 1 12-03-2009 21:07:27
ayuda con este codigo kurono Varios 4 13-06-2008 02:03:29
Que significa este codigo? D-MO PHP 14 23-01-2006 11:08:21


La franja horaria es GMT +2. Ahora son las 21:10:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi