Когда приемник включается первым то горит светодиод

temakoval
Offline
Зарегистрирован: 22.02.2019

Приемник и передатчик на Arduino Nano и NRF24L01. Проблема в следующем,  если включить первым приемник то светодиод D2 будет светится пока не включить передатчик. Включаю передатчик светодиод тухнет. Кнопки работают так- 1-я нажал отпустил горит D1, нажал отпустил D1 потух. 2-я нажал D2 горит отпустил D2 потух. Как подправить скетч(и), чтобы независимо что первое включить(приемник или передатчик) светодиод D2 изначально не светился. Помогите лузеру.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int datos[2];
void setup(void)
{
  radio.begin();
  radio.openWritingPipe( pipe);
  Serial.begin(9600);
  pinMode(4, INPUT);//левая кнопка
  digitalWrite(4, HIGH);//левая кнопка нажал отпустил горит
  pinMode(3, INPUT);//правая кнопка
  digitalWrite(3, HIGH);

  
}
void loop() {
  datos[0] = digitalRead(4);//кнопка D4 левая
  datos[1] = digitalRead(3);//кнопка D3 правая
  bool ok = radio.write(datos, sizeof(datos));
  //Serial.println(datos[0]);

}

 

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xE8E8F0F0E1LL;
#define CE_PIN 9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN);
int datos[2];
byte IsConnect;
void setup()
{
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  radio.begin();
  Serial.begin(9600);
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}


void loop() {
  static int8_t buttonState = LOW;
  uint8_t numero_canal;
  if ( radio.available())
  {
    radio.read(datos, sizeof(datos));
    IsConnect = HIGH;
  }
  else{
    IsConnect = LOW;
  }

  if (buttonState == HIGH && datos[0] == LOW) digitalWrite(14, ! digitalRead(14));
   buttonState = datos[0];
  digitalWrite(15, !datos[1]);  
}

 

temakoval
Offline
Зарегистрирован: 22.02.2019

Попралюсь в описании проблемы в часности работы кнопок
Кнопки работают так- SV2 нажал отпустил горит D1, нажал отпустил D1 потух. SV1 нажал D2 горит отпустил D2 потух

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

temakoval пишет:

Как подправить скетч(и), чтобы независимо что первое включить(приемник или передатчик) светодиод D2 изначально не светился. 

Никак. По Вашей схеме светодиоды подключены на аналоговые ВХОДЫ и, соответственно, не управляются. Правьте схему и потом спрашивайте.

temakoval
Offline
Зарегистрирован: 22.02.2019

Спасибо!

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

mykaida пишет:

Никак. По Вашей схеме светодиоды подключены на аналоговые ВХОДЫ и, соответственно, не управляются. Правьте схему и потом спрашивайте.

Не гони. Пины А0-А5 могут использоваться как обычные цифровые входы/выходы

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

asam пишет:

Не гони. Пины А0-А5 могут использоваться как обычные цифровые входы/выходы

Согласен, ступил. Даташит поверхностно посмотрел.

T.Rook
Offline
Зарегистрирован: 05.03.2016

Госпаде, флуда то скока!!!

2ТС: в приемнике  в setup задайте начальное состояние вывола на светик = погасите на старте. 33 строку приемника измените , а то она у Вас только выключает.

и вообще, чему равно datos[1] когда передатчик выключен?

temakoval
Offline
Зарегистрирован: 22.02.2019

T.Rook пишет:

Госпаде, флуда то скока!!!

2ТС: в приемнике  в setup задайте начальное состояние вывола на светик = погасите на старте. 33 строку приемника измените , а то она у Вас только выключает.

и вообще, чему равно datos[1] когда передатчик выключен?

33 строка работает она к d2 не относится. А вот дольше я ниче не понял

T.Rook
Offline
Зарегистрирован: 05.03.2016

Да, насчет 33 - был не прав, не вчитался

попробуйте 8 строку приемника  написать так : int datos[2] = {0,0};

temakoval
Offline
Зарегистрирован: 22.02.2019

Да спасибо попробую! Это только  часть кода масив больше на 5 элементов. Там идет управление сервоприводом и пропорциональное управление 2-мя двигателями через L298N. А нельзя ли как в 23 строке приемника прописать изначально, что кнопка не нажата? Вот только дальше в коде не пойму как прописать(33 и 34 строки  это для первой кнопки ).

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

temakoval пишет:

Да спасибо попробую! Это только  часть кода масив больше на 5 элементов. Там идет управление сервоприводом и пропорциональное управление 2-мя двигателями через L298N. А нельзя ли как в 23 строке приемника прописать изначально, что кнопка не нажата? Вот только дальше в коде не пойму как прописать(33 и 34 строки  это для первой кнопки ).

После этого стесняюсь спросить, а Вы под белый дом ничего не подложили с сервоприводами? Настолько секретная программа, что просто - УХ! И на форуме не опубликовать? 007 - а нахрена Вы сюда пришли?

temakoval
Offline
Зарегистрирован: 22.02.2019

Я сыну игрушку делаю, прошу совета помощи ,а ваши отвыте помогают так что дело "двигается".

temakoval
Offline
Зарегистрирован: 22.02.2019

T.Rook пишет:

Да, насчет 33 - был не прав, не вчитался

попробуйте 8 строку приемника  написать так : int datos[2] = {0,0};

 

Не неработает.

gfx125
Offline
Зарегистрирован: 27.05.2017

а если int datos[2] = {0,1}; ?

 

 

 

 

temakoval
Offline
Зарегистрирован: 22.02.2019

gfx125 пишет:

а если int datos[2] = {0,1}; ?

 

 

 

 

Да все работает коректно. А как Эту запись int datos[2] = {0,1} применить к масиву из 5 элементов

temakoval
Offline
Зарегистрирован: 22.02.2019

Передатчик

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int datos[5];
void setup(void)
{
  radio.begin();
  radio.openWritingPipe( pipe);
  Serial.begin(9600);
  pinMode(4, INPUT);//левая кнопка
  digitalWrite(4, HIGH);//левая кнопка нажал отпустил горит
  pinMode(3, INPUT);//правая кнопка
  digitalWrite(3, HIGH);

  
}
void loop() {
  datos[0] = analogRead(1);
  datos[1] = analogRead(0);
  datos[2] = analogRead(4);//крутилка ствола
  datos[2] = map(datos[2],0,1023,0,180);
  datos[3] = digitalRead(4);//кнопка D4 левая
  datos[4] = digitalRead(3);//кнопка D3 правая
  bool ok = radio.write(datos, sizeof(datos));
  Serial.println(datos[0]);

}

Приемник



#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo myservo1;
const uint64_t pipe = 0xE8E8F0F0E1LL;
#define CE_PIN 9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN);
int datos[5];
int pwm = 0;
bool directionL;
bool directionR; // направление вращение для L298N

byte valueL;
byte valueR; // значение ШИМ M1, M2 (0-255)

int mLeft;
int mRight;
long time = 0;
long debounce = 300;
int pos;
int fspeed; // движение вперед
int bspeed; // движение назад
int steer;
const int in1 = 7; // direction pin 1
const int in2 = 6; // direction pin 2
const int in3 = 4; // direction pin 1
const int in4 = 2; // direction pin 2
const int ena = 5; // PWM pin to change speed
const int enb = 3;
byte IsConnect;
void setup()
{
  pinMode(in1, OUTPUT); // connection to L298n
  pinMode(in2, OUTPUT); // connection to L298n
  pinMode(ena, OUTPUT); // connection to L298n
  pinMode(in3, OUTPUT); // connection to L298n
  pinMode(in4, OUTPUT); // connection to L298n
  pinMode(enb, OUTPUT); // connection to L298n
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  //digitalWrite(15, LOW);
  myservo1.attach(8);
  radio.begin();
  Serial.begin(9600);
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}

int MotoL, MotoR;
int ValStickX, ValStickY;

void loop() {
  static int8_t buttonState = LOW;
 // static int8_t buttonState1 = LOW;
  uint8_t numero_canal;
  if ( radio.available())
  {
    radio.read(datos, sizeof(datos));
    IsConnect = HIGH;
  }
  else{
    IsConnect = LOW;
  }
  myservo1.write(datos[2]);
  if (buttonState == HIGH && datos[3] == LOW) digitalWrite(14, ! digitalRead(14));
   buttonState = datos[3];
  digitalWrite(15, !datos[4]);

   
                        
    int val_x = datos[0];
    int val_y = datos[1];
   
    ValStickX = map(val_x, 0, 1023, 254, -254);
    ValStickY = map(val_y, 0, 1023, 254, -254);

    if (abs(ValStickX) < 20) {
      ValStickX = 0;
    }
    if (abs(ValStickY) < 20) {
      ValStickY = 0;
    }

    MotoL = ValStickY - (ValStickX / 1.2);
    MotoR = ValStickY + (ValStickX / 1.2);
   
    if (IsConnect == LOW){MotoL = 0;}
    if (IsConnect == LOW){MotoR = 0;}
    
    if (MotoL > 255) {
      MotoL = 255;
    }
    if (MotoR > 255) {
      MotoR = 255;
    }
    if (MotoL < -255) {
      MotoL = -255;
    }
    if (MotoR < -255) {
      MotoR = -255;
    }
Serial.println(mLeft);
  if (MotoL > 0) 
  {
    valueL = MotoL;
    directionL = 0;
  }
  else if (MotoL < 0) 
  {
    valueL = abs(MotoL);
    directionL = 1;
  }
  else 
  {
    directionL = 0;
    valueL = 0;
  }

  if (MotoR > 0) {
    valueR = MotoR;
    directionR = 0;
  }
  else if (MotoR < 0) {
    valueR = abs(MotoR);
    directionR = 1;
  }
  else {
    directionR = 0;
    valueR = 0;
  }

  digitalWrite(in1, directionR);
  digitalWrite(in2, !directionR);
  digitalWrite(in3, directionL);
  digitalWrite(in4, !directionL);
  analogWrite(ena, valueL);
  analogWrite(enb, valueR);
  
}

 

gfx125
Offline
Зарегистрирован: 27.05.2017

temakoval пишет:

А как Эту запись int datos[2] = {0,1} применить к масиву из 5 элементов

Ну наверное так {0,0,0,0,1}.  Смотрите чему у вас должен быть равен каждый элемент массива когда от передатчика еще ничего не прилетело.

 

 

temakoval
Offline
Зарегистрирован: 22.02.2019

gfx125 пишет:

temakoval пишет:

А как Эту запись int datos[2] = {0,1} применить к масиву из 5 элементов

Ну наверное так {0,0,0,0,1}.  Смотрите чему у вас должен быть равен каждый элемент массива когда от передатчика еще ничего не прилетело.

 

 

Да спасибо все работает!Затупил скетч в передатчик не перезалил.Спасибо!