Código
- Car_nRF24.ino
- Joystick_nRF24.ino
Car_nRF24.ino Arduino
Código para Arduino RC Car / * Código do receptor do módulo JoyStick - CONEXÕES:Módulos nRF24L01 Veja:1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE para Arduino pino 6 4 - CSN para Arduino pino 8 5 - SCK para Arduino pino 13 6 - MOSI para Arduino pino 11 7 - MISO para Arduino pino 12 8 - NÃO USADO * /// ----- ( Importe as bibliotecas necessárias) ----- # include #include #include / * ----- (Declarar constantes e números de pinos) ----- * / # define CE_PIN 6 # define CSN_PIN 8 // NOTA:o "LL" no final da constante é "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Define o tubo de transmissão # define light_Front 18 // LED frontal direito pino A4 para Arduino Uno # define light_Back 19 // LED Back Right pino A5 para Arduino Uno # define horn_Buzz 7 #define ENA_m1 3 // Habilita / velocidade motor Front Right #define ENB_m1 5 // Habilita / acelera o motor Back Right # define ENA_m2 9 // Habilita / acelera o motor Front Left # define ENB_m2 10 // Habilita / acelera o motor Back Left # define IN_11 0 // L298N # 1 em 1 motor Front Right #define IN_12 1 // L298N # 1 em 2 motor Front Right # define IN_13 2 // L298N # 1 in 3 motor Back Right # define IN_14 4 // L298N # 1 in 4 motor Back Right # define IN_21 14 // L298N # 2 em 1 motor Front Left # define IN_22 15 // L298N # 2 in 2 motor Front Left # define IN_23 16 // L298N # 2 in 3 motor Back Left # define IN_24 17 // L298N # 2 in 4 motor Back Left / * ----- (Declarar objetos) ----- * / rádio RF24 (CE_PIN, CSN_PIN); // Criar um rádio / * ----- (Declarar variáveis) ----- * / int joystick [6]; // array de 6 elementos segurando Joystick readingsint speedRight =0; int speedLeft =0; int xAxis, yAxis; // as quatro variáveis de botão do joystickint buttonUp; int buttonRight; int buttonDown; int buttonLeft; void setup () {pinMode (light_Front, SAÍDA); pinMode (light_Back, OUTPUT); pinMode (horn_Buzz, OUTPUT); pinMode (ENA_m1, OUTPUT); pinMode (ENB_m1, OUTPUT); pinMode (ENA_m2, OUTPUT); pinMode (ENB_m2, OUTPUT); pinMode (IN_11, SAÍDA); pinMode (IN_12, SAÍDA); pinMode (IN_13, SAÍDA); pinMode (IN_14, SAÍDA); pinMode (IN_21, SAÍDA); pinMode (IN_22, SAÍDA); pinMode (IN_23, OUTPUT); pinMode (IN_24, SAÍDA); / * Serial.begin (9600); Serial.println ("Nrf24L01 Receiver Iniciando"); * / radio.begin (); radio.openReadingPipe (1, tubo); radio.startListening ();} void loop () {if (radio.available ()) {radio.read (joystick, sizeof (joystick)); xAxis =joystick [0]; yAxis =joystick [1]; // as quatro variáveis de botão do array de joystick int buttonUp =joystick [2]; botão interno direito =joystick [3]; int buttonDown =joystick [4]; int buttonLeft =joystick [5]; //Serial.println (); // para depuração // Buscar a carga útil de dados - Código de depuração abaixo if (buttonUp ==HIGH) {digitalWrite (horn_Buzz, LOW);} else {digitalWrite (horn_Buzz, HIGH);} if (buttonRight ==HIGH) {digitalWrite ( light_Front, LOW);} else {digitalWrite (light_Front, HIGH);} if (buttonLeft ==HIGH) {digitalWrite (light_Back, LOW);} else {digitalWrite (light_Back, HIGH);} // eixo Y usado para avançar e controle para trás if (yAxis <470) {// Define os motores corretos para trás digitalWrite (IN_11, LOW); digitalWrite (IN_12, HIGH); digitalWrite (IN_13, ALTO); digitalWrite (IN_14, LOW); // Define os motores esquerdos para trás digitalWrite (IN_21, HIGH); digitalWrite (IN_22, LOW); digitalWrite (IN_23, LOW); digitalWrite (IN_24, HIGH); // Converte as leituras decrescentes do eixo Y para retroceder de 470 a 0 para o valor de 0 a 255 para o sinal PWM para aumentar a velocidade do motor speedRight =map (yAxis, 470, 0, 0, 255); speedLeft =mapa (yAxis, 470, 0, 0, 255); } else if (yAxis> 550) {// Define os motores corretos para a frente digitalWrite (IN_11, HIGH); digitalWrite (IN_12, LOW); digitalWrite (IN_13, LOW); digitalWrite (IN_14, ALTO); // Ajuste os motores esquerdos para frente digitalWrite (IN_21, LOW); digitalWrite (IN_22, ALTO); digitalWrite (IN_23, HIGH); digitalWrite (IN_24, LOW); // Converte as leituras crescentes do eixo Y para avançar de 550 para 1023 no valor de 0 para 255 para o sinal PWM para aumentar a velocidade do motor speedRight =map (yAxis, 550, 1023, 0, 255); speedLeft =mapa (yAxis, 550, 1023, 0, 255); } // Se o joystick permanecer no meio, os motores não estão se movendo, else {speedRight =0; speedLeft =0; } // Eixo X usado para controle esquerdo e direito if (xAxis <470) {// Converte as leituras do eixo X em declínio de 470 para 0 em valores crescentes de 0 a 255 int xMapped =map (xAxis, 470, 0, 0 , 255); // Mover para a esquerda - diminuir a velocidade do motor esquerdo, aumentar a velocidade do motor direito speedLeft =speedLeft - xMapped; speedRight =speedRight + xMapped; // Limita o intervalo de 0 a 255 if (speedLeft <0) {speedLeft =0; } if (speedRight> 255) {speedRight =255; }} if (xAxis> 550) {// Converter as leituras crescentes do eixo X de 550 a 1023 em valores de 0 a 255 int xMapped =map (xAxis, 550, 1023, 0, 255); // Mover para a direita - diminui a velocidade do motor direito, aumenta a velocidade do motor esquerdo speedLeft =speedLeft + xMapped; speedRight =speedRight - xMapped; // Limita o intervalo de 0 a 255 if (speedLeft> 255) {speedLeft =255; } if (speedRight <0) {speedRight =0; }} // Evita zumbidos em baixas velocidades (ajuste de acordo com seus motores. Meus motores não podiam começar a se mover se o valor de PWM estivesse abaixo do valor de 70) if (speedLeft <70) {speedLeft =0; } if (speedRight <70) {speedRight =0; } analogWrite (ENA_m1, speedRight); // Envia o sinal PWM para o motor A analogWrite (ENB_m1, speedRight); analogWrite (ENA_m2, speedLeft); // Envia o sinal PWM para o motor B analogWrite (ENB_m2, speedLeft); / * Serial.print ("X ="); Serial.print (xAxis); Serial.print ("Y ="); Serial.print (yAxis); Serial.print ("Up ="); Serial.print (joystick [2]); Serial.print ("Right ="); Serial.print (joystick [3]); Serial.print ("Down ="); Serial.print (joystick [4]); Serial.print ("Esquerda ="); Serial.println (joystick [5]); * /}}
Joystick_nRF24.ino Arduino
Código para Joystick Controller / * Código transceptor do módulo JoyStick - CONEXÕES:Módulos nRF24L01 Veja:1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE para Arduino pino 9 4 - CSN para Arduino pino 10 5 - SCK para Arduino pino 13 6 - MOSI para Arduino pino 11 7 - MISO para Arduino pino 12 8 - NÃO USADO Pinos de botão padrão:Cima - pino 2 direito - pino 3 para baixo - pino 4 esquerdo - pino 5 - Módulo de joystick analógico GND para Arduino GND VCC para Arduino + 5V X Pot para Arduino A0 Y Pot para Arduino A1 / * ----- (Importar bibliotecas necessárias) ----- * / # include #include "nRF24L01.h" #include "RF24.h" #define CE_PIN 9 # define CSN_PIN 10 # define xAxis 14 // A0 para Arduino UNO # define yAxis 15 // A1 para Arduino UNO // NOTA:o "LL" no final da constante é "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Definir o tubo de transmissão / * ----- (Declarar objetos) ----- * / RF24 radio (CE_PIN, CSN_PIN); // Criar um rádio / * ----- (Declarar variáveis) ----- * / int joystick [6]; // array de 6 elementos segurando a leitura do joystick e 4 botõesint buttonUp =2; int buttonRight =3; int buttonDown =4; int buttonLeft =5; void setup () {Serial.begin (9600); radio.begin (); radio.openWritingPipe (tubo); radio.stopListening (); // declara pinMode para todos os botões e estado inicial pinMode (buttonUp, INPUT_PULLUP); pinMode (buttonRight, INPUT_PULLUP); pinMode (buttonDown, INPUT_PULLUP); pinMode (buttonLeft, INPUT_PULLUP); digitalWrite (buttonUp, LOW); digitalWrite (buttonRight, LOW); digitalWrite (buttonDown, LOW); digitalWrite (buttonLeft, LOW);} void loop () {joystick [0] =analogRead (xAxis); joystick [1] =analogRead (yAxis); joystick [2] =digitalRead (botão para cima); joystick [3] =digitalRead (buttonRight); joystick [4] =digitalRead (botão para baixo); joystick [5] =digitalRead (buttonLeft); radio.write (joystick, sizeof (joystick)); atraso (20); Serial.print ("X ="); Serial.print (analogRead (xAxis)); Serial.print ("Y ="); Serial.print (analogRead (yAxis)); Serial.print ("Up ="); Serial.print (digitalRead (buttonUp)); Serial.print ("Right ="); Serial.print (digitalRead (buttonRight)); Serial.print ("Down ="); Serial.print (digitalRead (buttonDown)); Serial.print ("Esquerda ="); Serial.println (digitalRead (buttonLeft));}