Draadloze Controller (3 / 4 steg)
Steg 3: De koden
Het programmeren van de 2,4 Ghz verzender sv ontvanger är eigenlijk häl makkelijk vill er zijn meerdere bibliotek te vinden om dat voor elkaar te krijgen.
Het verzenden:
/*----------------------------------------------------
Programma om de variabelen mig te zenden vanaf de controller sv ontvangen naar de controller.
av: Dave den Haan
Signal - Arduino pin
GND 1 GND
VCC 2 5V
CE 3 8
CSN 4 9
SCK 5 13
MOSI 6 11
MISO 7 12
IRQ 8-
De eerste rij är de volgorde van de pinnen op de NRF24L01 sv de rij ernaast är waaraan het moet verbinden i arduino
-------------------------------------------------------*/
#include
#include
#include
#include
#include
#include
Definiera CE och CSN stift så att de kan ändras lätt senare om det behövs.
#define CE_PIN 8
#define CSN_PIN 9
Skapa en ny radio med CE & CSN Pins
RF24 myRadio (CE_PIN, CSN_PIN);
Skapa adress för sändande och mottagande
byte adresser [] [6] = {"1Node", "2Node"};
LCD-adress LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, positiva);
Lägga till joystick & potmeter
CONST int JS_Y = A2; CONST int JS_X = A1; CONST int potkal = A3;
Lägg till datastruct om du vill spara överförda/fått värden struct dataStruct {int Y; int Kal; int X;} tData;
struct dataStruct2 {
float Serv; flyta snelheid = 0.00; } rData;
osignerade långa startLCD1 = 0; osignerade långa startLCD2 = 0;
int last_tData_Y; int last_tData_Kal = 16. float last_rData_Serv; flyta last_rData_snelheid = 200.
void transceive();
void rereshLCD();
void setup() {
Använd den seriella bildskärmen på baudvärde för 115200 Serial.begin(115200); Delay(250); Serial.println ("trådlöst överföra");
Starta radion
myRadio.begin();
Ställa in wifi kanal ovanför de flesta normala wifi kanaler
myRadio.setChannel(108);
PA nivå, välja vilket som ska användas. Låg, hög för testning med hjälp
myRadio.setPALevel(RF24_PA_MIN);
myRadio.setPALevel(RF24_PA_MAX);
Öppna läsa och skriva rör.
myRadio.openWritingPipe(addresses[0]);
myRadio.openReadingPipe (1, addresses[1]);
Delay(500);
Ställ in LCD
LCD.BEGIN (20, 4); LCD.Print (kolumn, linje)
lcd.setCursor (2, 0);
LCD.Print ("Wireless racerbil");
lcd.setCursor (6, 1);
LCD.Print ("från");
lcd.setCursor (3, 2);
LCD.Print ("Groep 4--SCS")
Initiera pinmodes
pinMode (JS_Y, indata);
pinMode (JS_X, indata);
pinMode (potkal, ingång);
Delay(3000);
LCD.Clear();
Ställa in LCD-skärm
lcd.setCursor (2, 0);
LCD.Print ("Wireless racerbil:");
lcd.setCursor (0, 1);
LCD.Print ("Kalibratie:");
lcd.setCursor (5, 2);
LCD.Print ("Accu %:");
lcd.setCursor (2, 3);
LCD.Print ("Snelheid:");
}
void loop() {
/*
Läs potvalue
Skicka värdet
*/
tData.X = map(analogRead(JS_X), 12, 1023,-255, 255);
tData.Y = map(analogRead(JS_Y), 13, 1023, 45, 130);
tData.Y = (analogRead(JS_Y));
tData.Kal = map(analogRead(potkal), 0, 1023, -6, 6);
Överföra data
transceive();
Reresh LCD
startLCD1 = millis();
om (startLCD1 - startLCD2 > 75)
{
refreshLCD();
startLCD2 = startLCD1;
}
}
void transceive() {
Serial.println ("starta transceiving");
osignerade långa started_tranceiving_at = micros();
bool succé = false;
myRadio.stopListening();
om (! myRadio.write (& tData, sizeof(tData)))
{
Serial.println ("misslyckades! GG");
}
annat
{
Serial.println ("succé!: D");
myRadio.startListening();
Succé = sant;
}
osignerade långa started_waiting_at = micros();
medan (framgång)
{
Serial.println ("väntar Daniel");
om (myRadio.available()) {
Serial.println ("Data ontvangen...");
myRadio.read (& rData, sizeof(rData));
Succé = false;
}
om (micros() - started_waiting_at > 200000)
{
Serial.println ("Timeout upptäckt!");
Succé = false;
bryta;
}
}
Serial.Print ("Total tid tranceiving:");
Serial.println(Micros() - started_tranceiving_at);
}
void refreshLCD() {
/*
Variabelen:
Accu %
Snelheid
potkal
accumelding
*/
om (tData.Kal! = last_tData_Kal)
{
lcd.setCursor (12, 1);
LCD.Print("");
lcd.setCursor (12, 1);
LCD.Print(tData.kal);
last_tData_Kal = tData.Kal;
}
om (rData.Serv! = last_rData_Serv)
{
lcd.setCursor (12, 2);
LCD.Print("");
lcd.setCursor (12, 2);
LCD.Print (rData.Serv, 0);
LCD.Print("%");
last_rData_Serv = rData.Serv;
}
om (rData.snelheid! = last_rData_snelheid)
{
lcd.setCursor (12, 3);
LCD.Print("");
lcd.setCursor (12, 3);
LCD.Print (rData.snelheid, 0);
LCD.Print ("km/h");
last_rData_snelheid = rData.snelheid;
}
}------------------------------------------------------------------------------------------------------------
Zoals ze te Lacke är hierboven är het een vrij lange kod maar hierin zijn 3 dingen al i verwerkt
namelijk de joystick voor het bewegen, en 1 knop. 1 voor het schieten en 1 voor het resetten.
Maar dit är alleen het verzenden nog maar.
Hieronder het ontvangen
------------------------------------------------------------------------------------------------------------
/*
Enkelt överföra program, överföring nummer börjar
*
*
* Signal - Arduino pin
* GND 1 GND
* VCC 2 5V
* CE 3 8
* CSN 4 9
* SCK 5 13
* MOSI 6 11
* MISO 7 12
* IRQ 8-
*/
#include
#include
#include
#include
#include
Definiera CE och CSN Pins
#define CE_PIN 8
#define CSN_PIN 9
Skapa nya radio med
RF24 myRadio (CE_PIN, CSN_PIN);
Adress för 1 sätt sänder
byte adresser [] [6] = {"1Node", "2Node"};
Få datastruct:
struct dataStruct {
int X = 0; //joystick
int Res = 0; //Reset
int Schiet = 0; //Schiet
} RData;
Flaggor
int Företagsflagga 1 = 0;
int Flag2 = 0;
int Flag3 = 0;
Utgångar
int Res = A0;
int Schiet = A1;
int Rechts = A2;
int länkar = A3;
void setup() {
Använda följetong monitor på baudvärde för 115200
Serial.BEGIN(115200);
Delay(1000);
Serial.println ("RF24 skicka prov").
pinMode (Res, OUTPUT);
pinMode (Schiet, OUTPUT);
pinMode (Rechts, OUTPUT);
pinMode (länkar, OUTPUT);
Meddelande:
Starta radion
myRadio.begin();
Ställ in kanal över wifi kanaler
myRadio.setChannel(108);
Setup Radio anslutning:
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openWritingPipe(addresses[1]);
myRadio.openReadingPipe(1,addresses[0]);
Delay(1000);
myRadio.startListening();
}
void loop() {
myRadio.read (& RData, sizeof(RData));
IF(Flag1 = 0) {
myRadio.read (& RData, sizeof(RData));
IF(RData.X == 1)
{
Serial.Print("Rechts");
analogWrite (Rechts, hög);
Fälten Företagsflagga 1 = 1;
}
annat if(RData.X == 2)
{
Serial.Print("Links");
analogWrite (länkar, hög);
Fälten Företagsflagga 1 = 1;
}
}
IF(RData.X == 0)
{
Serial.Print("Stilstaan");
Fälten Företagsflagga 1 = 0;
}
IF(Flag2 = 0) {
IF(RData.res = 1)
{
Serial.Print("reset");
analogWrite (Res, hög);
Flag2 = 1;
}
}
IF(RData.res = 0) {
Flag2 = 0;
}
IF(Flag3 = 0) {
IF(RData.Schiet == 1)
{
Serial.Print("Schiet");
analogWrite (Schiet, hög);
Flag3 = 1;
}
}
IF(RData.Schiet = 0) {
Flag3 = 0;
}
}
De koden hierboven spreekt bästa wel voor zich eigenlijk. ALS de ontvanger dingen binnenkrijgt dan geeft hij simpelweg een pin hoog aan sv hiermee kan een vervolg aangegeven worden. I ons geval ord er op een andere arduino een ledmatrix aangestuurd om te schieten heen sv weer te bewegen av de spel te resetten.