Aerodeslizador RC + mando a distancia personalizado (3 / 8 paso)

Paso 3: El control remoto Código

Si fue la manera dura y sucia y había fabricado un tablero del PWB como mina y si todo ha ido bien entonces este código siguiente debería funcionar como un encanto. Si usted fue la manera fácil con fuera de la los tableros fabricados por estante, algunos menores a la edición de código medio podrían necesitar. Este paso asume que estás familiarizado con la programación de Arduino C. Sin importar el código tiene un montón de comentarios que creo que podría ser útil para recorrerlo.

---EL CÓDIGO DE CONTROL REMOTO---

incluir el código de biblioteca:
#include < LiquidCrystal.h >
#include < SPI.h >
#include "nRF24L01.h"
#include "RF24.h"

/ *---MI ESTRUCTURAS A LA MEDIDA 'ENVOLVENTE'---* /

estructura para llevar mensajes a
typedef struct {}
int X;
int Y;
Boolean botones [4];
}
Capacidad de carga;

estructura para conseguir
datos telemétricos
typedef struct {}
int rudderAng;
int Z;
int S;
}
Retroalimentación;

/ *---CONTROL VARIABLES RELACIONADAS DE LA BATERÍA---* /

pin analógico lectura V_out/V2 de divisor de tensión
const int battPin = A5;

referencia por defecto en el circuito utilizado (5.0, 3.3, 1.1)
const refV doble = 5.0;
¿Cuántos voltios se enciende 1 medida ADC?
V_incr doble const = refV/1024.0;

valores de las resistencias que se utiliza para el divisor de tensión
const doble R1 = 68,4;
const doble R2 = 46,6;

determinar la relación del divisor de tensión
const doble voltageRatio = (R2 /(R1 + R2));

/ *---VARIABLES DE BOTÓN---* /

botón pin 'pad'
const int buttonPin = A3;

Esquemas de configuración de botón

Pin analógico 5
//            |
//Ground--1K--|--------|--------|-------|
//            |        |        |       |
btn1 btn2 btn3 btn4
//            |        |        |       |
220 Ohmios Ohm 390 680 Ohm de 2,2 K
//            |--------|--------|-------|-- +5V

int j = 1;
'j' es el número entero utilizado en análisis de la matriz que designa el número de columna
estas gamas a continuación dependen de los esquemas de arriba y pueden
deben ajustarse manualmente para compensar los varios factores
int tecla [15] [3] = {{1, 836, 840}, / / botón 1
{2, 732, 738,} / / botón 2
{3, 600, 625}, / / botón 3
{4, 310, 335,} / botón 4 /

{5, 890, 900}, / / botón 1 + 2
{6, 870, 880,} / / botón 1 + 3
{7, 840, 860,} / / botón 1 + 4
{8, 810, 830,} / / botón 2 + 3
{9, 760, 780,} / / botón 2 + 4
{10, 665, 685} / / botón de 3 + 4
};

etiqueta de int = 0;            por informar de la etiqueta del botón
int contador = 0;          Cuántas veces hemos visto un nuevo valor
tiempo = 0;            la última vez que el pin de salida fue muestreado
int debounce_count = 5;   número de millis, muestras a considerar antes de declarar una entrada debounced
current_state int = 0;    el valor de entrada debounced

int ButtonVal;

/* ---------------------------------------------------------------------------------------------------- */

inicializar la biblioteca con los números de los pines de interfaz
LiquidCrystal lcd (8, 7, 5, 4, 3, 2);

inicializar el radio con el CE, números de pin CN
Radio(9,10) de RF24;

const uint64_t tubos [2] = {}
0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};

OUT-'Paloma'
Paquete de carga útil;

IN-'Paloma'
Telemetría de respuesta;

previousMillis largo = 0;
largo intervalo de tiempo = 25;

/* ---------------------------------------------------------------------------------------------------- */

/ * CONFIGURACIÓN * /

void setup() {}

Serial.Begin(57600);
radio.Begin();

radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.startListening();

pinMode (buttonPin, entrada);

fijar número la pantalla del LCD de filas y columnas:
LCD.Begin (16, 2);

}

/* ------------------------------------------------------------------------ */
/ *---BIENVENIDO AL BUCLE---* /
/* ------------------------------------------------------------------------ */

void loop() {}

monitor voltaje de la batería mando a distancia
int val = analogRead(battPin);
doble battV = VoltageCheck(val);

paquete. X = analogRead(A0);
Delay(1);
paquete. Y = analogRead(A1);
Delay(1);

/ *---PULSAR UN BOTÓN MANGO---* /

Si hemos ido al siguiente milisegundo
Si (millis()! = tiempo)
{
verificar pin analógico para el valor del botón y guardarlo en ButtonVal
ButtonVal = analogRead(buttonPin);
Delay(1);

Serial.println(ButtonVal);    DE DEPURACIÓN

Si (ButtonVal == current_state & & contador > 0)
{
contador--;
}
Si (ButtonVal! = current_state)
{
contador ++;
}
Si ButtonVal ha demostrado lo suficiente vamos al mismo valor para cambiarlo
Si (contador > = debounce_count)
{
Contador = 0;
current_state = ButtonVal;
Comprueba qué botón o combinación de botón ha sido presionado
Si (ButtonVal > 100) {}
ButtonCheck();} Else {}

Package.Buttons[0] = 0;
Package.Buttons[1] = 0;
Package.Buttons[2] = 0;
Package.Buttons[3] = 0;}
}
tiempo = millis();

}

/ *---RADIO 'TORRE' GROUND CONTROL---* /

Si (radio.available())
{

bool = false;
mientras (! hecho)
{
= radio.read (& telemetría, sizeof(telemetrics));
}

radio.stopListening();
bool ok = radio.write (& paquete, sizeof(package));
radio.startListening();

}

/ *---PANTALLA DE LCD DE MANGO---* /

/ * LÍNEA 1 * /

lcd.setCursor(0,0);
hack codificado sucia abajo
if(telemetrics. Z < 100) {}
lcd.setCursor(2,0);
LCD.Print("");
lcd.setCursor(0,0);
}
LCD.Print (telemetría. Z);

lcd.setCursor(6,0);
hack codificado sucia abajo
Si (telemetrics.rudderAng < 100) {}
lcd.setCursor(8,0);
LCD.Print("");
lcd.setCursor(6,0);
}
LCD.Print(telemetrics.rudderAng);

lcd.setCursor(12,0);
if(telemetrics. S < 100) {}
lcd.setCursor(14,0);
LCD.Print("");
lcd.setCursor(12,0);
}
LCD.Print (telemetría. S);

/ * LÍNEA 2 * /

lcd.setCursor (0, 1);
LCD.Print ("X:");
lcd.setCursor (2, 1);
LCD.Print (paquete. X);

lcd.setCursor (6, 1);
LCD.Print ("Y:");
lcd.setCursor (8, 1);
LCD.Print (paquete. Y);

lcd.setCursor(12,1);
LCD.Print(battV);

/* --------------------------------------------------------------------------- */

} / / cierre loop()

/* ------------------------------ HELPING FUNCTIONS ------------------------------ */

leer ese voltaje de la batería
doble VoltageCheck (int v) {}

doble pinV = v * V_incr;
doble volts_in = pinV * 1/voltageRatio;

volver volts_in;
}

comprueba qué botón (o combinación de 2) ha sido presionada, si cualquier...
void ButtonCheck()
{
lazo para el análisis de la matriz de botón.
para (int i = 0; i < = 10; i ++)
{
comprueba la ButtonVal contra los vales altos y bajos en la matriz
Si (ButtonVal > = tecla [i] [j] & & ButtonVal < = Button[i][j+1])
{
almacena el número de botón a una variable
etiqueta = tecla [i] [0];

interruptor (etiqueta) {}
caso 1:
Package.Buttons[0] = 1;
Package.Buttons[1] = 0;
Package.Buttons[2] = 0;
Package.Buttons[3] = 0;
Serial.println ("botón 1");
rotura;
caso 2:
Package.Buttons[0] = 0;
Package.Buttons[1] = 1;
Package.Buttons[2] = 0;
Package.Buttons[3] = 0;
Serial.println ("botón 2");
rotura;
caso 3:
Package.Buttons[0] = 0;
Package.Buttons[1] = 0;
Package.Buttons[2] = 1;
Package.Buttons[3] = 0;
Serial.println ("botón 3");
rotura;
caso 4:
Package.Buttons[0] = 0;
Package.Buttons[1] = 0;
Package.Buttons[2] = 0;
Package.Buttons[3] = 1;
Serial.println ("botón 4");
rotura;
caso 5:
Serial.println ("botón 1 + 2");
Package.Buttons[0] = 1;
Package.Buttons[1] = 1;
Package.Buttons[2] = 0;
Package.Buttons[3] = 0;
rotura;
caso 6:
Serial.println ("botón 1 + 3");
Package.Buttons[0] = 1;
Package.Buttons[1] = 0;
Package.Buttons[2] = 1;
Package.Buttons[3] = 0;
rotura;
caso 7:
Serial.println ("botón 1 + 4");
Package.Buttons[0] = 1;
Package.Buttons[1] = 0;
Package.Buttons[2] = 0;
Package.Buttons[3] = 1;
rotura;
caso 8:
Serial.println ("botón 2 + 3");
Package.Buttons[0] = 0;
Package.Buttons[1] = 1;
Package.Buttons[2] = 1;
Package.Buttons[3] = 0;
rotura;
caso 9:
Serial.println ("botón 2 + 4");
Package.Buttons[0] = 0;
Package.Buttons[1] = 1;
Package.Buttons[2] = 0;
Package.Buttons[3] = 1;
rotura;
caso 10:
Serial.println ("botón 3 + 4");
Package.Buttons[0] = 0;
Package.Buttons[1] = 0;
Package.Buttons[2] = 1;
Package.Buttons[3] = 1;
rotura;
} / / cierre interruptor

}
}
}

Artículos Relacionados

Aerodeslizador con mando a distancia. por AnTiProcrastination

Aerodeslizador con mando a distancia. por AnTiProcrastination

¡ Hola! Somos AnTiProcrastination, un grupo de estudiantes de La Universidad de Michigan--Shanghai Jiao Tong University Instituto conjunto (ver Logo en la figura 1) nuestro campus, (Figura 2; citado de www.ngeschool.org) situado en el distrito de caí
Un escudo personalizado para la hélice ASC - mando a distancia Infra-rojo - y múltiples dientes!

Un escudo personalizado para la hélice ASC - mando a distancia Infra-rojo - y múltiples dientes!

En mi primer proyecto se añadió una pantalla LCD de 2 líneas a la placa Arduino Shield Compatible (ASC).(  )En este proyecto también introducimos el uso de múltiples dientes, una característica única de la viruta de propulsor de la paralaje.Pantalla
BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

En los pasos siguientes, usted hacer un DIY "TV" con el código para un smart remote y realmente vídeos y posiblemente incluso conectar el mando a distancia inteligente a la placa de base real.Materiales:Espejo de papelEstabilizador sólido y no f
Ingeniería inversa RF mando a distancia para IoT.

Ingeniería inversa RF mando a distancia para IoT.

En este instructable, usted aprenderá cómo invertir el ingeniero cómo implementar en un ordenador muy barato de WiFi activado, el MCU de nodo y mandos de Radio frecuencia (RF). Usando esta técnica puedes IoT habilitar dispositivos mayores y dispositi
Papel avión-TV mando a distancia con control remoto

Papel avión-TV mando a distancia con control remoto

Crear un avión de papel controlada remota controlado por televisor medio remoto. Super divertido y barato para hacer!Paso 1: Para el paso 1, usted debe obtener todos los materiales: una pequeña li-poli batería (3,7 voltios), un trozo de PCB, motor el
Arduino preamplificador pasivo con mando a distancia, atenuador y canal selector

Arduino preamplificador pasivo con mando a distancia, atenuador y canal selector

Hola a todos,Ya que me han apoyado mucho en mi última instructable me alentó para mejorar más y compartirlo con ustedes.En la compilación anterior tuve preamp barato con Potenciómetro motorizado, control remoto y selector de canal. Motorizado pote te
Arreglar un mando a distancia no responde

Arreglar un mando a distancia no responde

No hay nada más molesto que tener un mando a distancia no responde!! Han intentado todo, cambiar las pilas pero su control remoto es bastante antiguo y está a punto de sustituirla!No tienes que aunque pocas herramientas básicas y materiales que todos
Sencillo mando a distancia inalámbrico para Robot

Sencillo mando a distancia inalámbrico para Robot

Se trata de simple control remoto de 4 canales para el control de dos motores de corriente continua en dirección hacia adelante y reversa.Paso 1: Diseño transmisorTransmisor se construye usando el codificador HT12E, módulo inalámbrico de 433MHz y los
IPhone Learing mando a distancia Universal con Arduino

IPhone Learing mando a distancia Universal con Arduino

Hola y Bienvenidos a mi primer Instructable.No sé ustedes, pero nunca puedo encontrar el control remoto para mi TV. Siempre parece desaparecer cuando lo necesito y luego sólo aparece días más tarde como cuña dentro del sofá por uno de los niños. Una
Otro preludio de automatización - clonación de un mando a distancia

Otro preludio de automatización - clonación de un mando a distancia

Hace unos días publiqué un IBLE de cómo hackear un mando a distancia.Al tiempo, mi mente estaba obsesionada en conseguir una casa proyecto de automatización se inició tan pronto como sea posible, y decidí tomar la ruta como se muestra en el mencionad
Preludio a la automatización - Hacking un mando a distancia

Preludio a la automatización - Hacking un mando a distancia

Hace unas semanas he leído en un proyecto de Arduino para crear un sistema de automatización del hogar. Siendo un aficionado de la electrónico, que quería ser consciente de los límites de mis habilidades antes de intentar un proyecto como este.Uno de
Control de efectos de Halloween con mandos a distancia infrarrojos DIY

Control de efectos de Halloween con mandos a distancia infrarrojos DIY

Halloween es la oportunidad perfecta para crear divertidos efectos especiales. Cuando quiere poder controlar remotamente apoyos y efectos, una buena opción es utilizar un control remoto infrarrojo. Así en este proyecto, que voy a mostrar algunos efec
Ingeniería inversa: Bombilla de LED RGB con mando a distancia IR

Ingeniería inversa: Bombilla de LED RGB con mando a distancia IR

compramos 20 de estas bombillas LED RGB para una fiesta en el trabajo, pero estaba un poco decepcionado con las funciones de fundido de color que proporcionaban. Así que decidí tomar a un ingeniero inverso, aparte el protocolo de IR y ver si tenía má
Mando a distancia Smart Fan

Mando a distancia Smart Fan

Ventiladores tradicionales no son Directiva, nos gustaría estar sólo ese lugar donde nos encontramos con máxima de enfriamiento del ventilador. Así, el concepto de ventilador inteligente es hacerlo fácil y Directiva controlable con mando a distancia