RC Hovercraft + aangepaste afstandsbediening (3 / 8 stap)

Stap 3: De code van de afstandsbediening

Als je ging de harde & rommelige manier en een PCB boord zoals de mijne en verzonnen als alles ging Nou dan dit onderstaande code zou moeten werken zoals te tovermiddel. Als je ging de gemakkelijke manier met uit-het is mogelijk de plank per-verzonnen planken enkele kleine tot middelgrote codebewerking vereist. Deze stap wordt ervan uitgegaan dat u bekend bent met de Arduino C programmeren. Ongeacht heeft de code tal van opmerkingen die mij misschien wel handig om te navigeren.

---DE AFSTANDSBEDIENING CODE---

de code van de bibliotheek omvatten:
#include < LiquidCrystal.h >
#include < SPI.h >
#include "nRF24L01.h"
#include "RF24.h"

/ *---MIJN OP MAAT 'ENVELOP' STRUCTS---* /

struct te voeren berichten
typedef struct {}
int X;
int Y;
Booleaanse knoppen [4];
}
Lading;

struct te krijgen
telemetrische gegevens
typedef struct {}
int rudderAng;
int Z;
int S;
}
Feedback;

/ *---BATTERIJ MONITORING VAN VERWANTE VARIABELEN---* /

analoge pin V_out/V2 lezen van spanning divider
Const int battPin = A5;

standaard referentie op circuit gebruikt (5.0, 3.3, 1.1)
Const dubbele refV = 5.0;
Hoeveel volt doet 1 ADC maatregel?
Const dubbele V_incr = refV/1024.0;

waarden van weerstanden gebruikt voor spanning divider
Const dubbele R1 = 68,4;
Const dubbele R2 = 46.6;

bepalen van de verhouding van de spanning divider
Const dubbele voltageRatio = (R2 /(R1 + R2));

/ *---KNOP-GERELATEERDE VARIABELEN---* /

knop 'pad' pin
Const int buttonPin = A3;

Knop installatie schema

Analoge pin 5
//            |
//Ground--1K--|--------|--------|-------|
//            |        |        |       |
btn1 btn2 btn3 btn4
//            |        |        |       |
220 Ohm 390 Ohm 680 Ohm 2.2K
//            |--------|--------|-------|-- +5V

int j = 1;
'j' is het gehele getal gebruikt bij het scannen van de array kolomnummer aanwijzen
deze bereiken hieronder zijn afhankelijk van de schema's hierboven en kan
moeten handmatig worden aangepast om te compenseren voor verschillende factoren
int knop [15] [3] = {{1, 836, 840} / / knop 1
{2, 732, 738} / / knop 2
{3, 600, 625} / / knop 3
{4, 310, 335} / / button 4

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

int label = 0;            voor het melden van het label van de button
int counter = 0;          Hoeveel keer hebben we nieuwe waarde
lange tijd = 0;            de laatste keer dat de uitgang-pins werd bemonsterd
int debounce_count = 5;   aantal millis/monsters om te overwegen vóór het declareren van een debounced-ingang
int current_state = 0;    de debounced invoerwaarde

int ButtonVal;

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

initialiseren van de bibliotheek met de nummers van de pennen van de interface
LiquidCrystal lcd (8, 7, 5, 4, 3, 2);

initialiseren van radio met CE, CN pincodes
RF24 radio(9,10);

Const uint64_t pijpen [2] = {}
0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};

OUT-'duif'
Pakket van de lading;

IN-'duif'
Feedback telemetrie;

lange previousMillis = 0;
lange interval = 25;

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

/ * INSTALLATIE * /

VOID Setup {}

Serial.begin(57600);
Radio.begin();

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

pinMode (buttonPin, INPUT);

de LCD's aantal kolommen en rijen instellen:
LCD.begin (16, 2);

}

/* ------------------------------------------------------------------------ */
/ *---WELKOM OP DE LUS---* /
/* ------------------------------------------------------------------------ */

void loop {}

monitor accuspanning op afstandsbediening
int val = analogRead(battPin);
dubbele battV = VoltageCheck(val);

pakket. X = analogRead(A0);
delay(1);
pakket. Y = analogRead(A1);
delay(1);

/ *---HANDVAT KNOOPPERSEN---* /

Als we zijn gegaan op naar de volgende milliseconde
Als (millis()! = tijd)
{
analoge pin voor de waarde van de knop controleren en sla het op ButtonVal
ButtonVal = analogRead(buttonPin);
delay(1);

Serial.println(ButtonVal);    DEBUG

Als (ButtonVal == current_state & & teller > 0)
{
teller--;
}
Als (ButtonVal! = current_state)
{
teller ++;
}
Als ButtonVal heeft aangetoond dezelfde waarde voor lang genoeg laten we schakelen
Als (teller > = debounce_count)
{
Counter = 0;
current_state = ButtonVal;
Controleert welke knop of de keuzelijst met de knop is ingedrukt
Als (ButtonVal > 100) {}
ButtonCheck();} else {}

package.buttons[0] = 0;
package.buttons[1] = 0;
package.buttons[2] = 0;
package.buttons[3] = 0;}
}
tijd = millis();

}

/ *---RADIO 'TOWER' GROUND CONTROL---* /

Als (radio.available())
{

BOOL = false;
terwijl (! gedaan)
{
= radio.read (& telemetrie, sizeof(telemetrics));
}

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

}

/ *---HANDVAT LCD DISPLAY---* /

/ * LIJN 1 * /

lcd.setCursor(0,0);
vuile hardgecodeerde houwer hieronder
if(telemetrics. Z < 100) {}
lcd.setCursor(2,0);
LCD.Print("");
lcd.setCursor(0,0);
}
LCD.Print (telemetrie. Z);

lcd.setCursor(6,0);
vuile hardgecodeerde houwer hieronder
Als (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 (telemetrie. S);

/ * LIJN 2 * /

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

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

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

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

} / / Sluit loop

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

Lees dat accuspanning
dubbele VoltageCheck (int v) {}

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

Return volts_in;
}

controleert welke knop (of een combo van 2) heeft gedrukt, eventueel...
VOID ButtonCheck()
{
lus voor het scannen van de knop-matrix.
for (int i = 0; ik < = 10; i ++)
{
controleert de ButtonVal tegen de boven- en onderlimieten vales in de matrix
Als (ButtonVal > = knop [i] [j] & & ButtonVal < = Button[i][j+1])
{
de knop getal aan een variabele wordt opgeslagen
Label = knop [i] [0];

schakelaar (label) {}
Case 1:
package.buttons[0] = 1;
package.buttons[1] = 0;
package.buttons[2] = 0;
package.buttons[3] = 0;
Serial.println ("knop 1");
breken;
Case 2:
package.buttons[0] = 0;
package.buttons[1] = 1;
package.buttons[2] = 0;
package.buttons[3] = 0;
Serial.println ("knop 2");
breken;
Case 3:
package.buttons[0] = 0;
package.buttons[1] = 0;
package.buttons[2] = 1;
package.buttons[3] = 0;
Serial.println ("knop 3");
breken;
Case 4:
package.buttons[0] = 0;
package.buttons[1] = 0;
package.buttons[2] = 0;
package.buttons[3] = 1;
Serial.println ("knop 4");
breken;
Case 5:
Serial.println ("knop 1 + 2");
package.buttons[0] = 1;
package.buttons[1] = 1;
package.buttons[2] = 0;
package.buttons[3] = 0;
breken;
Case 6:
Serial.println ("knop 1 + 3");
package.buttons[0] = 1;
package.buttons[1] = 0;
package.buttons[2] = 1;
package.buttons[3] = 0;
breken;
Case 7:
Serial.println ("knop 1 + 4");
package.buttons[0] = 1;
package.buttons[1] = 0;
package.buttons[2] = 0;
package.buttons[3] = 1;
breken;
zaak 8:
Serial.println ("knop 2 + 3");
package.buttons[0] = 0;
package.buttons[1] = 1;
package.buttons[2] = 1;
package.buttons[3] = 0;
breken;
Case 9:
Serial.println ("knop 2 + 4");
package.buttons[0] = 0;
package.buttons[1] = 1;
package.buttons[2] = 0;
package.buttons[3] = 1;
breken;
zaak 10:
Serial.println ("knop 3 + 4");
package.buttons[0] = 0;
package.buttons[1] = 0;
package.buttons[2] = 1;
package.buttons[3] = 1;
breken;
} / / sluiten van de schakelaar

}
}
}

Gerelateerde Artikelen

Hoe maak je een aangepaste afstandsbediening auto

Hoe maak je een aangepaste afstandsbediening auto

In deze tutorial zal ik u tonen hoe te maken van een aanpasbare afstandsbediening auto uit vrij veel wat je wilt. Mij zal zitten using k-nex en sommige karton, maar u kunt ook Legos, 3d gedrukte onderdelen of een heleboel andere dingen.Stap 1: De ele
Maak je eigen aangepaste afstandsbediening voor uw project

Maak je eigen aangepaste afstandsbediening voor uw project

Ik heb een project dat een arduino gebruikt en een IR verwijderen bibliotheek om te controleren van een paar dingen.Dus in dit instructable ik laten zien hoe u een afstandsbediening aan uw op doel kunt hergebruiken.En u hoeft niets bijzonders te make
UFO-achtige Hovercraft met afstandsbediening

UFO-achtige Hovercraft met afstandsbediening

Als u besteden aan een mooi weekend staren naar het TV-scherm of surfen op het net, voelt u zich vervelen. Waarom niet Volg ons om te maken een geweldig UFO-achtige hovercraft!Korte introductie:De hovercraft introduceert luchtstroom onder het schip.
Een TV-afstandsbediening volledig hergebruiken!

Een TV-afstandsbediening volledig hergebruiken!

Er zijn vele manieren om "hack" een afstandsbediening.In dit Instructable zal ik u tonen hoe om een stapje verder een volledig kappen, redesign en hergebruiken van een afstandsbediening in enkele eenvoudige stappen.Voordat u probeert dit project
Arduino afstandsbediening minder $10

Arduino afstandsbediening minder $10

Gids voor je arduino gebruiken als een afstandsbediening met Easy Remote app.MaterialenArduino nano of een Arduino. op ebay staren $2,58Infrarood led 940nm ebay 10 x.99 centBluettoth module JY-MCU HC06 ebay $1.99Infrarood Reciver 2 x $1.99Gratis = ge
DIY iPhone controller voor Raspberry-Pi (OSC)

DIY iPhone controller voor Raspberry-Pi (OSC)

Om te beginnen met dit project wil ik uitleggen hoe dit alles zal werken. We zullen worden met behulp van een vorm van communicatie genoemd OSC (Open Sound Control) en een app genaamd "TouchOSC", die beschikbaar op de Google Play is en de Apple
Externe volumeregeling voor oude stereo versterker

Externe volumeregeling voor oude stereo versterker

Ik heb een oude Stereo versterker die ik heb op mijn woonkamer. Het werkt vrij goed, maar het is zo oud dat het niet over een afstandsbediening, waardoor het erg vervelend beschikken te gebruiken terwijl zittend op de Bank.Dus ik dit, een apparaat ma
Met behulp van uw Bluetooth ingeschakeld Sony Ericsson telefoon naar Control Your Computer

Met behulp van uw Bluetooth ingeschakeld Sony Ericsson telefoon naar Control Your Computer

ik heb gelezen op instructables voor een tijdje nu, en ik heb altijd al wilde doen sommige van de dingen dat de mensen hebben geschreven over, maar heb mezelf kijken naar dingen die moeilijk te doen omdat ze zijn echt moeilijk om te doen, of de dinge
Afstandsbediening Hovercraft Racing

Afstandsbediening Hovercraft Racing

• OverzichtDe reus, krachtige hovercraft in de film rood Bronx hebben ons enthousiast voor een lange tijd. Onlangs, onze universiteit gehouden een hovercraft competitie. Wij hebben een afstandsbediening hovercraft en won de eerste plaats in de tijdri
Afstandsbediening Hovercraft

Afstandsbediening Hovercraft

Ons product is een kleine afstandsbediening hovercraft die op het land functioneert. De hovercraft is snel, stabiel en makkelijk te controleren. De rok is het belangrijkste kenmerk. De rok kan verminderen de wrijving, waarmee de hovercraft een hoge s
Mijn aangepaste auto audiosysteem w / playstation 2 draadloze afstandsbediening, 7" inch LCD w / draadloze koptelefoon, LEDS, 5 Farad condensator

Mijn aangepaste auto audiosysteem w / playstation 2 draadloze afstandsbediening, 7" inch LCD w / draadloze koptelefoon, LEDS, 5 Farad condensator

dit is mijn aangepaste gemaakte car audio systeem ontworpen en gebouwd door mij.  Dit is een glasvezel Luidsprekerbox die ik met behulp van een houten frame en fleece materiaal, fiberglas risin gemaakt, lichaam vuller and alot of hard schuren. Ook we
Hovercraft - Bluetooth RC

Hovercraft - Bluetooth RC

Hovercraft zijn ook bekend als luchtkussen voertuigen. Drijvend op een kussen van lucht voorziet in de buurt van wrijving-minder verkeer, met name en vlakke, gladde oppervlakken. Besturingselement (of het gebrek daaraan) is niet zo verschillend van r
Zomer 2014 Hovercraft competitie Shane Group19

Zomer 2014 Hovercraft competitie Shane Group19

(1) Introductie van de UniversiteitShanghaiJiaoTong University(SJTU) is een top Universiteit in China. Engineering is een van de beste expertise in SJTU. Het Joint Institute is een beroemde Instituut SJTU, ook het Instituut heeft het winnen van een h
DIY LED Light - moderne Desktop Mood Lamp met afstandsbediening

DIY LED Light - moderne Desktop Mood Lamp met afstandsbediening

In dit artikel die zal ik gaan over het proces dat ik gebruikt om te bouwen vormige dit geweldige piramide LED Mood Lamp.Ik gebruikte esdoorn voor de hoofdstructuur en sommige mahonie body voor extra sterkte. Ik gebruikte voor de lichten RGB LED-lamp