14-07-2015, 06:24 PM
Hola, buenas tardes tengo un problemilla, recientemente he estado trabajando con dos leds rgb y bluetooth. Por favor echenme una mano, gracias de antemano, les dejo el código.
#define CARACTER_INICIO_CMD '*'
#define CARACTER_FINAL_CMD '#'
#define CARACTER_DIV_CMD '|'
#define ESCRITURA_DIGITAL_CMD 10
#define ESCRITURA_ANALOGA_CMD 11
#define TEXTO_CMD 12
#define LECTURA_ARDUDROID_CMD 13
#define MAX_COMMAND 20
#define MIN_COMMAND 10
#define LONGITUD_ENTRADA_STRING 40
#define ESCRITURA_ANALOGICA_MAX 255
#define PIN_ALTO 3
#define PIN_BAJO 2
String inText;
// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6
// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11
// Almacena el valor de nuestra elección
char MiOpcion;
// Almacena el valor de la elección de Arduino
int respuestaArduino;
void setup() {
Serial.begin(9600);
Serial.println("elprofegarcia.com");
Serial.flush();
// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);
// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);
// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");
}
void loop() {
Serial.flush();
int ard_command = 0;
int pin_num = 0;
int pin_value = 0;
char get_char = ' '; //lee serial
// esperar a que los datos entren
if (Serial.available() < 1) return; // si no hay datos en el serial retornar al Loop().
// analizar entrada de indicador de inicio de comando
get_char = Serial.read();
if (get_char != CARACTER_INICIO_CMD) return; // si no hay indicación de inicio del sistema, volver loop ().
// parse incoming command type
ard_command = Serial.parseInt(); // read the command
// analizar el tipo de comando entrante
pin_num = Serial.parseInt(); // leer el pin
pin_value = Serial.parseInt(); // leer el valor
// 1) OBTENER COMANDO DE TEXTO PARA ARDUDROID
if (ard_command == TEXTO_CMD){
inText =""; // borra variable para nueva entrada
while (Serial.available()) {
char c = Serial.read(); // recibe un byte de la memoria intermedia serie
delay(5);
if (c == CARACTER_FINAL_CMD) { // si la cadena completa ha sido leida
// add your code here
break;
}
else {
if (c != CARACTER_DIV_CMD) {
inText += c;
delay(5);
}
}
}
}
// 2) OBTENER DATOS DE digitalWrite ARDUDROID
if (ard_command == ESCRITURA_DIGITAL_CMD){
if (pin_value == PIN_BAJO) pin_value = LOW;
else if (pin_value == PIN_ALTO) pin_value = HIGH;
else return; // error en el valor de PIN. regresar.
set_digitalwrite( pin_num, pin_value); // Eliminar el comentario de esta función para utilizarla
return; // regrese al inicio de loop()
}
// 3) GET analogWrite DATA FROM ARDUDROID
if (ard_command == ESCRITURA_ANALOGA_CMD) {
analogWrite( pin_num, pin_value );
// add your code here
return; // Done. return to loop();
}
// 4) Enviar datos a ARDUDROID
if (ard_command == LECTURA_ARDUDROID_CMD) {
// char send_to_android[] = " Coloca el texto aquí." ;
// Serial.println(send_to_android); // Ejemplo: Envío de texto
Serial.print(" Analogo 0 = ");
Serial.println(analogRead(A0)); // Ejemplo: Leer y enviar valor analógico del Pin de Arduino
return; // Listoe. regrese al loop();
}
}
// 2a) seleccionar el pin # solicitado para la acción digitalWrite
void set_digitalwrite(int pin_num, int pin_value)
{
switch (pin_num) {
case 13:
pinMode(13, OUTPUT);
digitalWrite(13, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 12:
pinMode(12, OUTPUT);
digitalWrite(12, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 11:
pinMode(11, OUTPUT);
digitalWrite(11, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 10:
pinMode(10, OUTPUT);
digitalWrite(10, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 9:
pinMode(9, OUTPUT);
digitalWrite(9, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 8:
pinMode(8, OUTPUT);
digitalWrite(8, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 7:
pinMode(7, OUTPUT);
digitalWrite(7, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 6:
pinMode(6, OUTPUT);
digitalWrite(6, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 5:
pinMode(5, OUTPUT);
digitalWrite(5, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 4:
pinMode(4, OUTPUT);
digitalWrite(4, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 3:
pinMode(3, OUTPUT);
digitalWrite(3, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 2:
pinMode(2, OUTPUT);
digitalWrite(2, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
// por defecto
// si nada más fue seleccionado, hacer el defecto (default)
// default es opcional
}
}
void verMiOpcion(int Rojo, int Verde, int Azul){
analogWrite(led1Rojo, 255-Rojo);
analogWrite(led1Verde, 255-Verde);
analogWrite(led1Azul, 255-Azul);
}
int opcionArduino(){
int aleatorio = random(0,3); //int aleatorio = random(min,max)
//int aleatorio = random(0,300)
//elegirá un número entre 0 y 300,
//es decir 0,1,2....297,298 y 299
//NO ELEGIRÁ EL 300
if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}
if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}
if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}
// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;
}
void verOpcionArduino(int Rojo, int Verde, int Azul){
analogWrite(led2Rojo, 255-Rojo);
analogWrite(led2Verde, 255-Verde);
analogWrite(led2Azul, 255-Azul);
}
#define CARACTER_INICIO_CMD '*'
#define CARACTER_FINAL_CMD '#'
#define CARACTER_DIV_CMD '|'
#define ESCRITURA_DIGITAL_CMD 10
#define ESCRITURA_ANALOGA_CMD 11
#define TEXTO_CMD 12
#define LECTURA_ARDUDROID_CMD 13
#define MAX_COMMAND 20
#define MIN_COMMAND 10
#define LONGITUD_ENTRADA_STRING 40
#define ESCRITURA_ANALOGICA_MAX 255
#define PIN_ALTO 3
#define PIN_BAJO 2
String inText;
// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6
// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11
// Almacena el valor de nuestra elección
char MiOpcion;
// Almacena el valor de la elección de Arduino
int respuestaArduino;
void setup() {
Serial.begin(9600);
Serial.println("elprofegarcia.com");
Serial.flush();
// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);
// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);
// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");
}
void loop() {
Serial.flush();
int ard_command = 0;
int pin_num = 0;
int pin_value = 0;
char get_char = ' '; //lee serial
// esperar a que los datos entren
if (Serial.available() < 1) return; // si no hay datos en el serial retornar al Loop().
// analizar entrada de indicador de inicio de comando
get_char = Serial.read();
if (get_char != CARACTER_INICIO_CMD) return; // si no hay indicación de inicio del sistema, volver loop ().
// parse incoming command type
ard_command = Serial.parseInt(); // read the command
// analizar el tipo de comando entrante
pin_num = Serial.parseInt(); // leer el pin
pin_value = Serial.parseInt(); // leer el valor
// 1) OBTENER COMANDO DE TEXTO PARA ARDUDROID
if (ard_command == TEXTO_CMD){
inText =""; // borra variable para nueva entrada
while (Serial.available()) {
char c = Serial.read(); // recibe un byte de la memoria intermedia serie
delay(5);
if (c == CARACTER_FINAL_CMD) { // si la cadena completa ha sido leida
// add your code here
break;
}
else {
if (c != CARACTER_DIV_CMD) {
inText += c;
delay(5);
}
}
}
}
// 2) OBTENER DATOS DE digitalWrite ARDUDROID
if (ard_command == ESCRITURA_DIGITAL_CMD){
if (pin_value == PIN_BAJO) pin_value = LOW;
else if (pin_value == PIN_ALTO) pin_value = HIGH;
else return; // error en el valor de PIN. regresar.
set_digitalwrite( pin_num, pin_value); // Eliminar el comentario de esta función para utilizarla
return; // regrese al inicio de loop()
}
// 3) GET analogWrite DATA FROM ARDUDROID
if (ard_command == ESCRITURA_ANALOGA_CMD) {
analogWrite( pin_num, pin_value );
// add your code here
return; // Done. return to loop();
}
// 4) Enviar datos a ARDUDROID
if (ard_command == LECTURA_ARDUDROID_CMD) {
// char send_to_android[] = " Coloca el texto aquí." ;
// Serial.println(send_to_android); // Ejemplo: Envío de texto
Serial.print(" Analogo 0 = ");
Serial.println(analogRead(A0)); // Ejemplo: Leer y enviar valor analógico del Pin de Arduino
return; // Listoe. regrese al loop();
}
}
// 2a) seleccionar el pin # solicitado para la acción digitalWrite
void set_digitalwrite(int pin_num, int pin_value)
{
switch (pin_num) {
case 13:
pinMode(13, OUTPUT);
digitalWrite(13, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 12:
pinMode(12, OUTPUT);
digitalWrite(12, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 11:
pinMode(11, OUTPUT);
digitalWrite(11, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 10:
pinMode(10, OUTPUT);
digitalWrite(10, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 9:
pinMode(9, OUTPUT);
digitalWrite(9, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 8:
pinMode(8, OUTPUT);
digitalWrite(8, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 7:
pinMode(7, OUTPUT);
digitalWrite(7, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 6:
pinMode(6, OUTPUT);
digitalWrite(6, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 5:
pinMode(5, OUTPUT);
digitalWrite(5, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 4:
pinMode(4, OUTPUT);
digitalWrite(4, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 3:
pinMode(3, OUTPUT);
digitalWrite(3, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
case 2:
pinMode(2, OUTPUT);
digitalWrite(2, pin_value);
// adicione su código aquí, para este número de pin del Arduino
break;
// por defecto
// si nada más fue seleccionado, hacer el defecto (default)
// default es opcional
}
}
void verMiOpcion(int Rojo, int Verde, int Azul){
analogWrite(led1Rojo, 255-Rojo);
analogWrite(led1Verde, 255-Verde);
analogWrite(led1Azul, 255-Azul);
}
int opcionArduino(){
int aleatorio = random(0,3); //int aleatorio = random(min,max)
//int aleatorio = random(0,300)
//elegirá un número entre 0 y 300,
//es decir 0,1,2....297,298 y 299
//NO ELEGIRÁ EL 300
if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}
if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}
if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}
// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;
}
void verOpcionArduino(int Rojo, int Verde, int Azul){
analogWrite(led2Rojo, 255-Rojo);
analogWrite(led2Verde, 255-Verde);
analogWrite(led2Azul, 255-Azul);
}