Aéroglisseur RC + commande à distance sur mesure (3 / 8 étapes)

Étape 3: Le contrôle à distance code

Si vous êtes allé la manière dur & malpropre et fabriqué un PCB bord comme le mien, et si tout va bien alors ce code ci-dessous devrait fonctionner comme un charme. Si vous êtes allé la manière facile avec hors-la conseils plateau fabriqués par quelques mineurs d’édition de code moyen pourraient être nécessaires. Cette étape suppose que vous êtes familiarisé avec la programmation en C Arduino. Malgré tout, le code a beaucoup de commentaires qui je pense pourrait être utile à y naviguer.

---LE CODE TÉLÉCOMMANDE---

inclure le code de bibliothèque :
#include < LiquidCrystal.h >
#include < SPI.h >
#include « nRF24L01.h »
#include « RF24.h »

/ *---MON STRUCTS PERSONNALISÉS « ENVELOPPE »---* /

struct pour diffuser des messages
typedef struct {}
int X ;
int Y ;
booléenne touches [4] ;
}
Charge utile ;

struct pour obtenir
données télémétriques
typedef struct {}
int rudderAng ;
int Z ;
int S ;
}
Vos commentaires ;

/ *---BATTERIE SUIVI DES VARIABLES CONNEXES---* /

broches analogiques lire V_out/V2 de diviseur de tension
const int battPin = A5 ;

référence par défaut sur le circuit utilisé (5.0, 3.3, 1.1)
const double refV = 5.0 ;
Combien de volts est 1 mesure de l’ADC ?
V_incr double const = refV/1024.0 ;

valeurs des résistances utilisées pour diviseur de tension
const double R1 = 68,4 ;
const double R2 = 46,6 ;

déterminer le ratio de diviseur de tension
voltageRatio double const = (R2 /(R1 + R2)) ;

/ *---LES VARIABLES LIÉES AU BOUTON---* /

broche « pad » bouton
const int buttonPin = A3 ;

Schémas de configuration de touche

Broche analogique 5
//            |
//Ground--1K--|--------|--------|-------|
//            |        |        |       |
btn1 btn2 btn3 btn4
//            |        |        |       |
220 Ohm Ohm 390 680 ohms 2,2 K
//            |--------|--------|-------|-- +5V

int j = 1 ;
« j » est le nombre entier utilisé dans l’analyse du tableau désignant le numéro de colonne
Ces gammes ci-dessous reposent sur les schémas ci-dessus et peut
doivent être modifiés manuellement pour compenser les divers facteurs
int touche [15] [3] = {{1, 836, 840}, / / bouton 1
{2, 732, 738}, / / bouton 2
{3, 600, 625}, / / bouton 3
{4, 310, 335}, / / bouton 4

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

étiquette d’int = 0 ;            pour avoir signalé l’étiquette du bouton
int compteur = 0 ;          Combien de fois nous avons vu la nouvelle valeur
long temps = 0 ;            la dernière fois que la broche de sortie a été échantillonnée
int debounce_count = 5 ;   nombre de millis/échantillons à examiner avant de déclarer une entrée debounced
int current_state = 0 ;    la valeur d’entrée debounced

int ButtonVal ;

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

initialiser la bibliothèque avec les numéros des broches interface
Innovente lcd (8, 7, 5, 4, 3, 2) ;

initialiser la radio avec CE, codes pin CN
RF24 radio(9,10) ;

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

OUT-« pigeon »
Paquet de charge utile ;

IN-« pigeon »
Vos commentaires telemetrics ;

long previousMillis = 0 ;
intervalle long = 25 ;

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

/ * CONFIGURATION * /

void setup() {}

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

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

pinMode (buttonPin, entrée) ;

mis en place nombre de l’écran LCD de colonnes et de lignes :
LCD.Begin (16, 2) ;

}

/* ------------------------------------------------------------------------ */
/ *---BIENVENUE À LA BOUCLE---* /
/* ------------------------------------------------------------------------ */

void loop() {}

surveiller la tension de la batterie de la télécommande
int val = analogRead(battPin) ;
double BattV usagées = VoltageCheck(val) ;

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

/ *---POIGNÉE BOUTON PRESSES---* /

Si nous sommes allés à la prochaine milliseconde
Si (millis()! = temps)
{
Vérifiez la valeur de la touche analogique goupille et l’enregistrer sur ButtonVal
ButtonVal = analogRead(buttonPin) ;
Delay(1) ;

Serial.println(ButtonVal) ;    DÉBOGAGE

Si (ButtonVal == current_state & & compteur > 0)
{
compteur--;
}
Si (ButtonVal! = current_state)
{
compteur ++ ;
}
Si ButtonVal a montré la même valeur pour assez longtemps nous allons passer
Si (compteur > = debounce_count)
{
compteur = 0 ;
current_state = ButtonVal ;
Vérifie quel bouton ou combo touche a été enfoncée
Si (ButtonVal > 100) {}
ButtonCheck();} else {}

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

}

/ *---RADIO « TOUR » GROUND CONTROL---* /

Si (radio.available())
{

bool = false ;
tandis que (! fait)
{
fait = radio.read (& telemetrics, sizeof(telemetrics)) ;
}

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

}

/ *---AFFICHAGE À CRISTAUX LIQUIDES POIGNÉE---* /

/ * LIGNE 1 * /

lcd.setCursor(0,0) ;
sale hack codé ci-dessous
if(telemetrics. Z 100 <) {}
lcd.setCursor(2,0) ;
LCD.Print("") ;
lcd.setCursor(0,0) ;
}
LCD.Print (telemetrics. Z) ;

lcd.setCursor(6,0) ;
sale hack codé ci-dessous
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 (telemetrics. S) ;

/ * LIGNE 2 * /

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

lcd.setCursor (6, 1) ;
LCD.Print ("y") ;
lcd.setCursor (8, 1) ;
LCD.Print (paquet. Y) ;

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

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

} / / fermer loop()

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

lire cette tension de la batterie
double VoltageCheck (int v) {}

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

Return volts_in ;
}

vérifie quel bouton (ou combo de 2) a été enfoncée, le cas échéant...
Sub ButtonCheck()
{
boucle pour le tableau de boutons de numérisation.
pour (int i = 0; i < = 10; i ++)
{
vérifie la ButtonVal contre les hautes et basses vallées du tableau
Si (ButtonVal > = touche [i] [j] & & ButtonVal < = Button[i][j+1])
{
stocke le numéro de bouton à une variable
label = touche [i] [0] ;

commutateur (étiquette) {}
cas 1 :
Package.Buttons[0] = 1 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 0 ;
Serial.println ("bouton 1") ;
rupture ;
cas 2 :
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 1 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 0 ;
Serial.println ("bouton 2") ;
rupture ;
cas 3 :
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 1 ;
Package.Buttons[3] = 0 ;
Serial.println ("bouton 3") ;
rupture ;
cas 4 :
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 1 ;
Serial.println ("bouton 4") ;
rupture ;
cas no 5 :
Serial.println ("bouton 1 + 2") ;
Package.Buttons[0] = 1 ;
Package.Buttons[1] = 1 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 0 ;
rupture ;
cas 6 :
Serial.println ("bouton 1 + 3") ;
Package.Buttons[0] = 1 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 1 ;
Package.Buttons[3] = 0 ;
rupture ;
cas 7 :
Serial.println "(bouton 1 + 4") ;
Package.Buttons[0] = 1 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 1 ;
rupture ;
cas 8 :
Serial.println "(bouton 2 + 3") ;
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 1 ;
Package.Buttons[2] = 1 ;
Package.Buttons[3] = 0 ;
rupture ;
cas 9 :
Serial.println "(bouton 2 + 4") ;
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 1 ;
Package.Buttons[2] = 0 ;
Package.Buttons[3] = 1 ;
rupture ;
cas no 10 :
Serial.println "(bouton 3 + 4") ;
Package.Buttons[0] = 0 ;
Package.Buttons[1] = 0 ;
Package.Buttons[2] = 1 ;
Package.Buttons[3] = 1 ;
rupture ;
} / / interrupteur à proximité

}
}
}

Articles Liés

Comment faire une voiture de contrôle à distance sur mesure

Comment faire une voiture de contrôle à distance sur mesure

dans ce tutoriel, je vais vous montrer comment faire une voiture télécommande personnalisable à peu près tout ce que vous voulez. Je vais utiliser k-nex et un carton, mais vous pouvez également utiliser des Legos, pièces imprimées en 3d ou un tas d'a
Rakshak un : une rover pour la collecte de données et de surveillance avec des fonctionnalités de journalisation de données, voix alertes et distance de mesure.

Rakshak un : une rover pour la collecte de données et de surveillance avec des fonctionnalités de journalisation de données, voix alertes et distance de mesure.

I NTRODUCTIONCe système robotique peut être contrôlé à l'aide d'une interface graphique construite à l'aide de la transformation. Le rover peut être contrôlé en envoyant des commandes via l'interface utilisateur en cours d'exécution sur l'ordinateur
Commande à distance sécurisé

Commande à distance sécurisé

Avez-vous déjà demandé comment vous pourriez relativement facilement cacher votre argent de poche de votre plus petit/grand frère (s) ou tout simplement avoir votre petit "Fort Knox" ? Eh bien... avec ce Instructable vous serez en mesure de ! No
Commande à distance contrôlé via Internet

Commande à distance contrôlé via Internet

Il s'agit d'un tutoriel un peu complex, bien que je vais essayer de le rendre aussi facile à comprendre pour un large nombre de programmeurs.Avant de commencer, n'oubliez pas que vous aurez besoin d'au moins un Altair.Étape 1: théorie Tout d'abord, n
Commande à distance vos framboises Pi

Commande à distance vos framboises Pi

La plupart des articles qui traitent de journalisation à distance dans votre Pi framboise utilisent xrdp pour créer des sessions Bureau à distance dans votre Pi de framboise. C'est souvent une bonne solution et fonctionne même si vous n'avez pas un m
Ajouter une commande à distance à peu près n’importe quoi !

Ajouter une commande à distance à peu près n’importe quoi !

Dans ce Instructable je vais vous montrer comment ajouter un contrôle à distance à bas prix à peu près n'importe quoi ! qui prend votre fantaisie.L'année dernière, j'ai construit un lance-roquettes de l'air comprimé qui a été présenté dans le Magazin
Appareil photo, commande à distance

Appareil photo, commande à distance

Mon appareil photo n'est pas un moyen d'être déclenchée à l'extérieur. Alors, j'ai décidé de construire une caméra Canon contrôlée à distance et il s'avère être « Vert ».Donc, certains d'entre vous ont peut-être appris du logiciel CHDK (Canon Hack De
MediaCenter simple et commande à distance avec une convivialité améliorée

MediaCenter simple et commande à distance avec une convivialité améliorée

Oui, c'est une autre axée sur le bricolage PC Media Center (ou HTPC), mais avec une caractéristique unique : il a sacrément simple à contrôler, donc bien adapté pour les personnes âgées, personnes handicapées, ou simplement paresseux utilisateurs.De
Comment connecter ps3 à distance sur Android (racine)

Comment connecter ps3 à distance sur Android (racine)

comment faire pour connecter votre ps3 à distance sur votre appareil Android pour jouer n'importe quel jeux ?Matériel :-Ps3 à distance-Appareil android root:-)-Adaptateur USB miniUSB-Recharger le câble USB de la télécommande PS3sixaxis - compatibilit
Sur mesure Keg Cooler pour le Camping!!

Sur mesure Keg Cooler pour le Camping!!

Tout d'abord, Merci de vérifier sur mon Instructable! Je l'ai ai créé sous forme d'entrée dans faire un concours de boîte parrainé par Rockler! Si vous aimez ce Instructable, s'il vous plaît VOTE FOR ME! J'aimerais gagner ce concours !L'an dernier, q
Jouet pour chat Catnip sur mesure

Jouet pour chat Catnip sur mesure

il s'agit d'une conception pour un jouet pour chat feutre personnalisable, avec plumes, cloches, cataire et tout ce que vous pouvez penser à ajouter ! Vous pouvez faire cette petite bestiole dans moins d'une heure, et les fournitures sont à peu de fr
Adaptateur porte de coupe sur mesure pour SodaStream, tasse à café & bouteilles d’eau.  J’ai fait à TechShop.

Adaptateur porte de coupe sur mesure pour SodaStream, tasse à café & bouteilles d’eau. J’ai fait à TechShop.

ProblemsDifférentes voitures sont détenteurs de coupe & bouteille de taille différente.  Conducteurs et les passagers ont une taille différente de leurs tasses de café préféré et des bouteilles.  Quand votre bouteille et coupe les détenteurs de véhic
Sur mesure en bois lettres

Sur mesure en bois lettres

Mon premier Instructable !J'ai voulu faire quelque chose sur mesure pour certains de mes amis qui sont déplacent dans une nouvelle maison. Après de longues délibérations, j'ai décidé de faire des mini toiles sur des lettres en bois de leurs initiales
36V 8.7Ah Battery Pack (sac de vélo sur mesure siège)

36V 8.7Ah Battery Pack (sac de vélo sur mesure siège)

Construire un 36V 8.7Ah 18650 Li-ion cellules batterie pour un sac de vélo petit siège.-série 10, 3 cellules Lithium-ion Panasonic 18650 max de 2900mAh 3C en parallèle.-Spot soudé bandes de nickel pur 0,1 mm x 6 mm.-9 ampères. Máx. continuos BMS * av