comunidades

Arduino: Driver L293, DHT 11, nRF2401 (parte2)

Buenas a todos ya esta listo el programa para sus primeras pruebas.

El Programa consta de dos partes, el archivo "XboxRC24_Receptor_Tanque" y el archivo "NRF2401Receptor". Este ultimo sera común a partir de ahora que lo use en mis proyectos sin que sufra muchas modificaciones, es la mejor manera de "reciclar" código. Explicare ese código mas detalladamente en una próxima entrada, tanto la del receptor como la del emisor.

Como ya explique su construcción y diagrama de conexiones en Arduino: driver L293, DHT11 y nRF2401 (parte 1) voy a poner directamente el código:

Código XboxRC24_Receptor_Tanque.ino
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <DHT.h>

RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

typedef struct {
int dec = 0; //T1
int ace = 0; //T2
int RXdata = 0; // Eje RX
int RYdata = 0; // Eje RY
int LXdata = 0; // Eje LX
int LYdata = 0; // Eje LY
int ButA = 0; //Boton A
int ButB = 0; //Boton B
int ButX = 0; //Boton X
int ButY = 0; //Boton Y
int Butb = 0; //Boton Back
int ButS = 0; //Boton Start
}
dataReceive;
dataReceive dataR;

typedef struct {
int dataS0 = 0; //dato 0
int dataS1 = 0; //dato 1
int dataS2 = 0; // dado 2
int dataS3 = 0; // dato 3
int dataS4 = 0; // dato 5
}
dataSend;
dataSend dataS;

// Pin digital donde se conectamos el sensor.
#define DHTPIN 8
//Definimos el tipo de sensor (DHT11, DHT22).
#define DHTTYPE DHT11
//Iniciamos el sensor DHT11.
DHT dht(DHTPIN, DHTTYPE);

int motor11 = 4; //
int motor12 = 5; // 6alidas para el L293N
int motor21 = 6; //
int motor22 = 7; //
int enable1 = 3; // incluidos el enable
//int claxon = 10; //
int luces = 14;
int estado;
int flag = 0;
int estadoStop = 0;

void setup() {

//Configuramos los pines de salida:
pinMode(motor11, OUTPUT);
pinMode(motor12, OUTPUT);
pinMode(enable1, OUTPUT);
pinMode(motor21, OUTPUT);
pinMode(motor22, OUTPUT);
pinMode(luces, OUTPUT);
digitalWrite (luces, HIGH);
delay (3000);
digitalWrite (luces, LOW);
dht.begin();
Serial.begin(9600); //Comunicacion serial para el monitor serial
radio.begin();
radio.setRetries(15, 15);
radio.startListening();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
}

void loop() {
receiver();
botones();
conversion();
flag = 0;
/////////////////////////////////////////////
if (estado == 0 || estadoStop == 1) { // PARADO
digitalWrite(motor11, LOW);
digitalWrite(motor12, LOW);
digitalWrite(motor21, LOW);
digitalWrite(motor22, LOW);
if (flag == 0) {
Serial.println("STOP!");
flag = 1;
}
estadoStop = 0;
} else if (estado == 1) { // AVANCE:
analogWrite(enable1, dataR.ace);
digitalWrite(motor11, HIGH);
digitalWrite(motor12, LOW);
digitalWrite(motor21, HIGH);
digitalWrite(motor22, LOW);
if (flag == 0) {
Serial.println("Avance!!!");
flag = 1;
}
} else if (estado == 2) { // REVERSA
analogWrite(enable1, dataR.ace);
digitalWrite(motor11, LOW);
digitalWrite(motor12, HIGH);
digitalWrite(motor21, LOW);
digitalWrite(motor22, HIGH);
if (flag == 0) {
Serial.println("REVERSA!!!");
flag = 1;
}
} else if (estado == 3) { // IZQUIERDA
analogWrite(enable1, dataR.ace);
digitalWrite(motor11, LOW);
digitalWrite(motor12, HIGH);
digitalWrite(motor21, HIGH);
digitalWrite(motor22, LOW);
if (flag == 0) {
Serial.println("GIRA IZQUIERDA");
flag = 1;
}
} else if (estado == 4) { // DERECHA
analogWrite(enable1, dataR.ace);
digitalWrite(motor11, HIGH);
digitalWrite(motor12, LOW);
digitalWrite(motor21, LOW);
digitalWrite(motor22, HIGH);
if (flag == 0) {
Serial.println("GIRA DERECHA");
flag = 1;
}
}
static unsigned long lastTrigger; //Limpia la pantalla cada 500ms
if (millis() - lastTrigger >= 2000) {
lastTrigger = millis();
dht11Read();
}
}

void conversion()
{
dataR.ace = map(dataR.ace, 0, 100, 0, 254);
dataR.ace = constrain (dataR.ace, 0 , 240);

if (dataR.RYdata == dataR.RXdata) estado = 0;
else if ((dataR.RYdata > 50) && (dataR.RXdata <= 50)) estado = 1; //AVANCE
else if ((dataR.RYdata < 50) && (dataR.RXdata >= 50)) estado = 2; //REVERSA
else if ((dataR.RXdata > 50) && (dataR.RYdata <= 50)) estado = 3; //DERECHA
else if ((dataR.RXdata < 50) && (dataR.RYdata >= 50)) estado = 4; //IZQUIERDA
}
void botones() {
if (dataR.ButA == 0) {
digitalWrite(luces, HIGH);
} else {
digitalWrite (luces, LOW);
}
}
void dht11Read(){
float h = dht.readHumidity();// Lee la humedad relativa.
float t = dht.readTemperature();// Lee la temperatura en ºC (por defecto).
if (isnan(h) || isnan(t)) {
Serial.println("Error obteniendo los datos del sensor DHT11");
return; //Si tiene error vuelve a leer el sensor
}
float hic = dht.computeHeatIndex(t, h, false); //Calcula el índice de calor en ºC
dataS.dataS1 = t;
dataS.dataS2 = h;
dataS.dataS3 = hic;
Serial.println();
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" ºC");
Serial.print("Humedad: ");
Serial.print(h);
Serial.println(" %");
Serial.print("Indice de calor: ");
Serial.print(hic);
Serial.println(" ºC");
}



Código NRF2401Receptor.ino
void receiver(){
if ( radio.available() ) // Si hay datos disponibles
{

bool done = false;
while (!done) // Espera aqui hasta recibir algo
{

done = radio.read( &dataR, sizeof(dataR));
//receiverDebug();
}
radio.stopListening(); // Dejamos d escuchar para poder hablar

radio.write( &dataS, sizeof(dataS));
Serial.println("Enviando Respuesta");
radio.startListening(); // Volvemos a la escucha para recibir mas paquetes
//sendDebug();
}

}
void receiverDebug() {
Serial.println("Dato Recibido =");
Serial.print("Canal 0 = ");
Serial.println(dataR.dec);
Serial.print("Canal 1 = ");
Serial.println(dataR.ace);
Serial.print("Canal 2 = ");
Serial.println(dataR.RXdata);
Serial.print("Canal 3 = ");
Serial.println(dataR.RYdata);
Serial.print("Canal 4 = ");
Serial.println(dataR.LXdata);
Serial.print("Canal 5 = ");
Serial.println(dataR.LYdata);
Serial.print("Canal 6 = ");
Serial.println(dataR.ButA);
}
void sendDebug(){
Serial.println(dataS.dataS0);
Serial.println(dataS.dataS1);
Serial.println(dataS.dataS2);
Serial.println(dataS.dataS3);
Serial.println(dataS.dataS4);
}

Muchas Gracias a todos, Si tenéis cualquier duda hacedmelo saber en la caja de comentarios, Saludos!!!
Fuente: este post proviene de InfotronikBlog, donde puedes consultar el contenido original.
¿Vulnera este post tus derechos? Pincha aquí.
¿Qué te ha parecido esta idea?

Esta idea proviene de:

Y estas son sus últimas ideas publicadas:

Usos para Raspberry Pi

Buenas a todos!!! Esta publicación va con un poco de retraso... ya tenía la Raspberry Pi 2 desde hacia bastante tiempo, pero como la tenia en otros usos y no he podido hacerle una entrada en condicion ...

Recomendamos