FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
@tsk
Buenas: No te había leído. Tendré que hacer otra vez el tutorial, ya que tengo intención de hacer lo mismo pero con entradas analógicas ya para Delphi 10.4. Lo que no me deja ahora mismo cargar el proyecto. Me da este error. Desde que pulse File--->Open Proyect para cargar un archivo me sale este error y no se el motivo. https://www.clubdelphi.com/foros/att...1&d=1615844858 Desinstalé Delphi 10.2 y luego instalé el Delphi 10.4. ¿Tiene algo que ver? Sobre el tutorial de arriba con el código de ARduino. Que es este. Código:
#include // Inicializa la librería con sus pines indicados. // RS, RW, Enable, D4, D5, D6, D7. LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7); // LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Pin 10 para saber que es luz de fondo. const byte LuzFondo = 10; const byte Led = 13; // Declaramos la variable pin del Led. char caracter; String comando; void setup() { pinMode(Led, OUTPUT); // Inicializa el pin del LED como salida: Serial.begin(115200); // Puerto serie 115200 baudios. lcd.begin(16, 2); // Formato de pantalla. lcd.clear(); // Borra la pantalla y su posición superior izquierda. lcd.print(" Arduino "); delay(1000); } void loop() { /* Voy leyendo carácter a carácter lo que se recibe por el canal serie (mientras llegue algún dato allí), y los voy concatenando uno tras otro en una cadena. En la práctica, si usamos el "Serial monitor" el bucle while acabará cuando pulsamos Enter. El delay es conveniente para no saturar el canal serie y que la concatenación se haga de forma ordenada. */ while (Serial.available() > 0) { caracter = Serial.read(); comando.concat(caracter); delay(10); } /* Una vez ya tengo la cadena "acabada", compruebo su valor y hago que la placa Arduino reacciones según sea este. Aquí podríamos hacer lo que quisiéramos: si el comando es "tal", enciende un Led, si es cual, mueve un motor... y así. */ // Si los carácteres es recibido y verdadero. if (comando.equals("Luz_ON") == true) { digitalWrite(Led, HIGH); // Enciende el Led 13. Serial.write("ON - Led encendido."); // Envía este mensaje al PC. lcd.setCursor(0, 1); lcd.print("Luz ON. "); // Mostrar en el LCD. } if (comando.equals("Luz_OFF") == true) { digitalWrite(Led, LOW); // Apaga el Led 13. Serial.write("OFF - Led apagado. "); // Envía este mensaje al PC. lcd.setCursor(0, 1); lcd.print("Luz OFF. "); // Mostrar en el LCD. } // Limpiamos la cadena para volver a recibir el siguiente comando. comando = ""; } ¿Cómo harías el código sustituyendo a este? Lo comento para hacerlo de nuevo. A parte que voy hacer el de entradas y salidas analógicas. Quiero hacer coas con Delphi y Arduino. Un cordial saludos y muy buena explicación.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
#2
|
|||
|
|||
Es exactamente lo que que puse, lo que cambiaría es que eliminas la parte que hace parpadear el LED y dentro de la condición que se pregunta por stringComplet ahí procesas los comandos.
Aunque yo lo que haría es hacer un separación de los componentes del sistema para que te sea más fácil desarrollar. Por lo general siempre sigo una estrategia similar a la siguiente, aunque cada aplicación es su propio mundo, por lo que a veces no es posible generalizar. Defino una estructura donde coloco la información de cada comando, incluso lo que debe de ejecutar. Código PHP:
Después se crear un arreglo donde se colocan los comandos de la siguiente forma. Código PHP:
Código PHP:
Por ejemplo cmdSearch busca en el arreglo el índice del comando, si es que existe, en caso de existir regresa el índice, de lo contrario un -1. Con esa información cmdProcess se encargar de ejecutar el comando y decidir si el formato es de un query, un set o una ejecución Así es mucho más sencillo añadir comandos y que lleves un buen control. En tu ejemplo, tienes un Luz_ON, Luz_OFF, pero si quieres añadir más, o incluso preguntar el estado, le vas a tener que agregar más y más IFs, en cambio si lo planteas de esta forma, con un sólo comando podrías manejar todas las opciones {"+LUZ",4,getState,setState,NULL}, Entonces puedes definir un formato de comando, por ejemplo AT+LUZ <- Te regresa el estado de todas las luces que tengas definidas AT+LUZ?1 <- Te regresa el estado de la Luz 1 AT+LUZ==1,0 <- Pone la Luz 1 en estado bajo AT+LUZ==2,1 <- Pone la Luz 2 en estado alto De la misma forma, podrías aplicar el mismo concepto a la lectura de los sensores, y en lugar de actuar directamente sobre el sistema, este le enviaría un comando, por ejemplo: Código PHP:
Código PHP:
Código PHP:
Por ejemplo, ahorita sólo tienes un sólo LED y el comando AT+LUZ==1,1 te arrojaría un error, pero si decides agregarle una segunda luz, podrías ejecutar el comando AT+LUZ==1,1 modificando una sola parte del sistema sin importar que venga de un comando que se introduzca por el puerto serie o que provenga como respuesta a un estímulo de una entrada, de lo contrario vas a tener que modificar el código en, por lo menos dos partes: 1.- La sección que interpreta los comandos que entran por el puerto serie. 2.- En el código de cada uno de los sensores cuyo efecto se debe de notar en el estado de la salida en particular. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
[TUTORIAL] Arduino Delphi 10.2 y Puerto serie | REHome | ASM y Microcontroladores | 4 | 20-07-2017 08:58:32 |
[TUTORIAL] Arduino C++ y Puerto serie | REHome | C++ Builder | 2 | 31-03-2017 23:12:21 |
[TUTORIAL] Interfaz Java, Visual Basic 6 y Arduino | REHome | ASM y Microcontroladores | 0 | 07-12-2015 04:43:04 |
Leer Puerto Com escrito por Arduino | mariano22 | Varios | 1 | 25-08-2015 05:56:33 |
Puerto serie | esquerda21 | Varios | 2 | 12-05-2004 23:58:52 |
|