Hola, tengo un proyecto que funciona bien pero lo estoy ampliando con un motor (micro DC 6v y el micro L293d) y no hay forma de que funcione, el resto funciona.
Cuando lo conecto empieza a girar dando saltos y no responde ni a derecha ni a izquierda.
Aquí pongo los Sketch TX y RX
//transmisor intermitentes,freno,rampa strobo,marcha atras, motor
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// Define las entradas digitales.
#define pin1 2 // Boton 1
#define pin2 3 // Boton 2
#define pin3 4 // Boton 3
#define pin4 5 // Boton 4
#define pin5 6 // Boton 5
#define pin6 7 // Boton 6
#define pin7 8 // Boton 7
RF24 radio(9,10); // nRF24L01 (CE 53/9 Verde, CSN 48/10 Azul)
const byte address[6] = "00001";
// El tamaño máximo de esta estructura es de 32 bytes - NRF24L01 límite de búfer
struct Data_Package {
byte j1PotX,j2PotY;
byte button1,button2,button3,button4,button5,button6,button7; // Botones 1,2,3,4
};
Data_Package data; //Crear una variable con la estructura anterior.
void setup() {
Serial.begin(9600); // Define la comunicación por radio.
radio.begin();
radio.openWritingPipe(address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
// Activa las resistencias pull-up internas de Arduino.
pinMode(pin1, INPUT_PULLUP); // Boton 1
pinMode(pin2, INPUT_PULLUP); // Boton 2
pinMode(pin3, INPUT_PULLUP); // Boton 3
pinMode(pin4, INPUT_PULLUP); // Boton 4
pinMode(pin5, INPUT_PULLUP); // Boton 5
pinMode(pin6, INPUT_PULLUP); // Boton 6
pinMode(pin7, INPUT_PULLUP); // Boton 7
// Establecer valores iniciales predeterminados
data.j1PotX = 127; // Valores de 0 a 255. Cuando el Joystick está en posición de reposo,
data.j2PotY = 127; // El valor está en el medio, o 127.
// En realidad mapeamos el valor del pozo de 0 a 1023 a 0 a 255 porque ese es un valor BYTE
data.button1 = 1;
data.button2 = 1;
data.button3 = 1;
data.button4 = 1;
data.button5 = 1;
data.button6 = 1;
data.button7 = 1;
}
void loop() {
// Lee todas las entradas analógicas y asignelas a un valor de byte
data.j2PotY = map(analogRead(A0), 0, 1023, 0, 255); // Convierta el valor de lectura analógica de 0 a 1023
data.j1PotX = map(analogRead(A1), 0, 1023, 0, 255); // en un valor BYTE de 0 a 255
// Lee todas las entradas digitales
data.button1 = digitalRead(pin1); // Boton 1
data.button2 = digitalRead(pin2); // Boton 2
data.button3 = digitalRead(pin3); // Boton 3
data.button4 = digitalRead(pin4); // Boton 4
data.button5 = digitalRead(pin5); // Boton 5
data.button6 = digitalRead(pin6); // Boton 6
data.button7 = digitalRead(pin7); // Boton 7
/*Serial.print("; button1: ");
Serial.print(data.button1);
delay(600);
Serial.print("; button2: ");
Serial.print(data.button2);
delay(600);
Serial.print("; button3: ");
Serial.print(data.button3);
delay(600);
Serial.print("; button4: ");
Serial.print(data.button4);
delay(600);
Serial.print("; button5: ");
Serial.print(data.button5);
delay(600);
Serial.print("; button6: ");
Serial.print(data.button6);
delay(600);
Serial.print("; button7: ");
Serial.println(data.button7);
delay(600); */
radio.write(&data, sizeof(data)); // Envia todos los datos de la estructura al receptor.
}
// RX direccion y acelerador con intermitentes,freno,marcha atras,buzzer y posicion,cortas,largas,aux1,aux,2
// Este codigo es para ir en el camion (Arduino Nano)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define pin1 2 //intermitente D2
#define pin2 3 //intermitente D3
#define pin3 4 //freno D4
#define pin4 5 //marcha atras D5
#define pin5 6 //posicion D6
#define pin6 7 //cortas D7
#define pin7 8 //largas D8
#define pin18 18 //aux1 D18 (A4)
#define pin19 19 //aux2 D19 (A5)
#define buzzer1 17 //buzzer1 D17 (A3)
RF24 radio(9,10); // nRF24L01 (CE 53 Mega/9 UNO Verde, CSN 48 Mega/10 UNO Azul)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
//------------buzzer1--------------------
unsigned long beep;
const int duracion=300; //si quieres que el tono sea mas corto baja este valor
const int frecuencia=2450; //si quieres que se escuche mas agudo sube este valor
unsigned long impresion;
//--------Intermitentes------------------
unsigned long previousMillis = 0; // almacenará la última vez que se actualizó el LED
const unsigned long interval = 400; // intervalo de los intermitentes
//------------servos---------------------
Servo servo1; // servo direccion (A0)
Servo servo2; // servo acelerador (A1)
Servo rampa3; // servo rampa o puerta trasera (A2)
int servo1Value,servo2Value;
int pos = 0;
unsigned long pausa;
struct Data_Package { // El tamaño máximo de esta estructura es de 32 bytes
byte j1PotX,j2PotY; //joystick acelerador,direccion
byte button1,button2,button3; //botones posicion,cortas,largas
byte button5,button6; //botones de la rampa (subir/bajar)
byte button7,button4; //motor IZ, DE
};
Data_Package data; // Crea una variable con la estructura anterior
int xEje, yEje;
bool encender1_state = false;
bool encender2_state = false;
bool encender3_state = false;
bool encender4_state = false;
bool encender5_state = false;
void setup()
{
pinMode(pin1, OUTPUT); // Intermitente derecho led Ambar D2 (resistencia de 220/330 ohmios)
pinMode(pin2, OUTPUT); // Intermitente izquierdo led Ambar D3 (resistencia de 220/330 ohmios)
pinMode(pin3, OUTPUT); // Freno configura la salida led Rojo D4 (resistencia de 220/330 ohmios)
pinMode(pin4, OUTPUT); // Marcha atras configura la salida led Blanco D5 (resistencia de 220/330 ohmios)
pinMode(pin5, OUTPUT); // Posicion configura la salida led Rojo fijo D6 (resistencia de 750,parte baja)en alta 220/330ohmios
pinMode(pin6, OUTPUT); // Cortas configura la salida led Blanco D7 (resistencia de 220/330 ohmios)
pinMode(pin7, OUTPUT); // Largas configura la salida led Blanco D8 (resistencia de 220/330 ohmios)
pinMode(pin18, OUTPUT); // Aux1 configura la salida led COLOR ? D10 (A4) (resistencia de 220/330 ohmios)
pinMode(pin19, OUTPUT); // Aux2 configura la salida led COLOR ? D11 (A5) (resistencia de 220/330 ohmios)
pinMode(buzzer1, OUTPUT); // Buzzer1 configura la salida pin17 D9 (A3) (buzzer 5v)
rampa3.write(0); // Servo rampa arranca en posicion 0º (A2)
// P.D. la resitencia de 750 es porque la posicion va con el mismo led del freno 220/330
// solo en los pilotos de abajo, en la parte alta o(galibo)sera de 220/330 Rojo trasera/blanco delantera
radio.begin();
radio.openReadingPipe(0, address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.startListening(); // Establecer el módulo como receptor
//-------------------------------
servo1.attach(14); // servo acelerador (A0)
servo2.attach(15); // servo direccion (A1)
rampa3.attach(16); // servo rampa (A2)
//-------------------------------
}
void loop() {
// Comprueba si seguimos recibiendo datos o si tenemos una conexión entre los dos módulos.
currentTime = millis();
if ( currentTime - lastReceiveTime > 1000 ) { // Si la hora actual es más de 1 segundo desde que recibimos los últimos datos,
} // eso significa que hemos perdido la conexión
// Comprueba si hay datos para recibir
if (radio.available()) {
radio.read(&data, sizeof(Data_Package)); // Lee todos los datos y guárdelos en la estructura de 'datos'
lastReceiveTime = millis(); // En este momento hemos recibido los datos.
}
xEje = data.j1PotX;
yEje = data.j2PotY;
{
servo1Value = map(data.j1PotX, 0, 255, 0, 180);
servo2Value = map(data.j2PotY, 0, 255, 0, 180);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
//--------------intermitentes----------------
if (yEje >= 120 && yEje <= 130) {
digitalWrite(pin1, LOW); // derecho
digitalWrite(pin2, LOW); // izquierdo
}
if (yEje < 110) {
if (millis() - previousMillis >= interval)
{
digitalWrite(pin1, !digitalRead(pin1));
previousMillis = millis();
}
digitalWrite(pin2, LOW);
}
if (yEje > 140) {
if (millis() - previousMillis >= interval)
{
digitalWrite(pin2, !digitalRead(pin2));
previousMillis = millis();
}
digitalWrite(pin1 , LOW);
}
//--------------freno buzzer1---------------
//------------------freno-------------------
if (xEje >= 120 && xEje <= 140) { // >=120-<=140
digitalWrite(pin3, HIGH); // freno led Rojo
digitalWrite(pin4, LOW); // marcha atras led Blanco
}
if (xEje >= 150 && xEje <= 255) { // >=0-<=110
digitalWrite(pin3, LOW); // freno led Rojo
digitalWrite(pin4, HIGH); // marcha atras led Blanco
//----------------buzzer1-----------------
if(millis() - impresion >= 500UL){
impresion=millis();
{
if( millis()- beep >= duracion*2){ //multiplico duracion por 2 para que dure el mismo tiempo el tono encendido que apagado
tone(buzzer1, frecuencia, duracion); //buzzer1
beep=millis(); } } }
}
if (xEje <= 110 && xEje >= 0) { //>=150-<=225
digitalWrite(pin3, LOW); //freno led Rojo
digitalWrite(pin4, LOW); //marcha atras led Blanco
}
//-----------------fin----------------------
//--------enciende led Posicion-------------
if(data.button1 == 1 && !encender1_state)
{
digitalWrite (pin5,HIGH); //posicion led Blanco
encender1_state = true;
digitalWrite (pin5, LOW);
}
if(data.button1 == 0)
{
digitalWrite (pin5,HIGH);
encender1_state = false;
}
//-------enciende led cortas--------
if(data.button2 == 1 && !encender2_state)
{
digitalWrite (pin6,HIGH);
encender2_state = true;
digitalWrite (pin6, LOW);
}
if(data.button2 == 0)
{
digitalWrite (pin6,HIGH);
encender2_state = false;
}
//--------enciende led largas--------
if(data.button3 == 1 && !encender3_state)
{
digitalWrite (pin7,HIGH);
encender3_state = true;
digitalWrite (pin7, LOW);
}
if(data.button3 == 0)
{
digitalWrite (pin7,HIGH);
encender3_state = false;
}
//----------rampa sube---------------
if(data.button5 == 0 && pos<=180) //posicion 0º hasta 180º
{
if(millis()-pausa >= 10UL)
{
pos++;
pausa=millis();
}
rampa3.write(pos); //arranca en posicion 0º
}
//------------rampa baja---------------
if(data.button6 == 180 && pos >=0) //posicion 180º hasta 0º
{
if(millis()-pausa >= 10UL)
{
pos--;
pausa=millis();
}
rampa3.write(pos); //arranca en posicion 180º
}
//----------------Giro motor---------------------
{
if(data.button4 ==1 && !encender4_state)
{
digitalWrite(pin18,HIGH); // A4
digitalWrite(pin19,LOW); // A5
}
else{
(digitalWrite(pin18,LOW));
(digitalWrite(pin19,LOW));
}
}
{
if(data.button7 ==1 && !encender5_state){
digitalWrite(pin19,HIGH);
digitalWrite(pin18,LOW);
}
else{
(digitalWrite(pin19,LOW));
(digitalWrite(pin18,LOW));
}
}
}
La idea es que con (button4 gire a izquierda, button7 gire a derecha) para controlar el subir o bajar de un motor lineal actuador (simulación pistón hidráulico elevador) para la caja del volquete.
Gracias por vuestra ayuda y saludos a tod@s