РЕШЕНО Nrf24 + gps передача данных

Тема в разделе "Arduino & Shields", создана пользователем Wolferio, 9 май 2020.

Статус темы:
Закрыта.
  1. Wolferio

    Wolferio Нерд

    Всем доброго..
    Помогите разобраться с передачей данных. У меня мистика!!!
    Есть 2 шт ардуино которые работают 1 на передачу данных с GPS - 2 на приём.
    Когда передатчик (1) подключен непосредственно к ПК то прийом данных на 2-ой идет без проблем и без перерывов (2 работает со своим питанием без ПК). НО!!!! Когда включаю передатчик к Источнику питания и отключаю от ПК ТО!!! передачи данных нет!!!. (грешу в сторону Библиотек на передатчике). ПОМОГИТЕ РАЗОБРАТЬСЯ, ТКНИТЕ НОСОМ. Всем спасибо.
    Скетч Передатчика:

    Код (C++):
    #include <SPI.h>
    #include <TinyGPS++.h>
    #include <SoftwareSerial.h>
    #include <nRF24L01.h>  
    #include <RF24.h>            
    RF24 radio(8, 9);
    uint16_t raw_bandgap = 0;
    char Point[50],q[50];
    int channel1 = 4;
    int Channel1;
    String i;
    static const int RXPin = 11, TXPin = 10;
    static const uint32_t GPSBaud = 9600;
    TinyGPSPlus gps;
    int k;
    SoftwareSerial ss(RXPin, TXPin);


    void setup() {
      Serial.begin(4800);
      ss.begin(GPSBaud);
       radio.begin();        
      radio.setChannel(5);
      radio.setDataRate     (RF24_250KBPS);
    RF24_1MBPS, RF24_2MBPS).
      radio.setPALevel      (RF24_PA_HIGH);
      radio.openWritingPipe (0xAABBCCDD11LL);
    }
    void loop () {

      SPUT();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}

    HDOP();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}

      TD();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}

    Sped();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}
      LKoor();
       if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}
    NKoor();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}
    KANAL();
    if (millis() / 50 % 2) {if (radio.write(&Point, sizeof(Point))){}}
    }

    void SPUT()
    {
      while (ss.available() > 0)
        gps.encode(ss.read());
        i=String(gps.satellites.value());
       Point[0]='S';
    for (int t=0; t<=i.length();t++)
    {Point[t+1]=i[t];}}
    void HDOP()
    {
    while (ss.available() > 0)
        gps.encode(ss.read());
       i=String(gps.hdop.hdop());
        Point[0]='H';
    for (int t=0; t<=i.length();t++)
    {  {Point[t+1]=i[t];}}}


    void TD()
    {
      while (ss.available() > 0)
        gps.encode(ss.read());

       if  ((gps.time.hour()+3)<10) {i="0"+(String(gps.time.hour()+3));}
       else {i=String(gps.time.hour()+3);}
       if (gps.time.minute()<10) {i=i+":0"+String(gps.time.minute());}
       else i=i+":"+String(gps.time.minute());
       if (gps.time.second()<10) {i=i+":0"+String(gps.time.second());}
       else i=i+":"+String(gps.time.second());
      Point[0]='T';
    for (int t=0; t<=i.length();t++)
    {  {Point[t+1]=i[t];}}}

    void Sped()
    {
      while (ss.available() > 0)
        gps.encode(ss.read());
      {
       i=String(gps.speed.kmph());
       Point[0]='L';
       for (int t=0; t<=i.length();t++)
       {Point[t+1]=i[t];}}}

    void LKoor()
    {
      while (ss.available() > 0)
        gps.encode(ss.read());
      {
       i=String(gps.location.rawLat().deg)+"."+(gps.location.rawLat().billionths);
       Point[0]='F';
       for (int t=0; t<=i.length();t++)
       {Point[t+1]=i[t];}}

    }

    void NKoor()
    {
      while (ss.available() > 0)
        gps.encode(ss.read());
      {
       i=String(gps.location.rawLng().deg)+"."+(gps.location.rawLng().billionths);
       Point[0]='N';
       for (int t=0; t<=i.length();t++)
       {Point[t+1]=i[t];}}}


       void KANAL()
    { Channel1 = (pulseIn (channel1, HIGH));
      i=String(Channel1);
       Point[0]='K';
       for (int t=0; t<=i.length();t++)
       {Point[t+1]=i[t];}}
     
    Последнее редактирование: 9 май 2020
  2. NikitOS

    NikitOS Король шутов Администратор

    А скетч приемника где? И схему подключения.
     
  3. b707

    b707 Гуру

    перво-наперво давайте схему подключения передатчика к источнику питания. Какое напряжение источника? как вы его подключаете к ардуине(к каким пинам?) от чего питается NRF
    где логика? Библиотеки разве разные в этих двух случаях?
     
  4. Wolferio

    Wolferio Нерд

    1. Плата Leonardo:
    Источник NRF - 3.3В от платы ардуино Leonardo.
    Источник питания - 7.4 V на VIN на плату приходит

    2. Получаеться что так: Поскольку на передатчике использую библиотеку: <SoftwareSerial.h> которую не использую на приёмнике.
    Вот и грешу на эту библиотеку. Возможно я не прав!
     
  5. b707

    b707 Гуру

    ну вот и первая догадка.
    При включении БП через вход VIN у вас питание дважды проходит через регуляторы - сначала понижается с 7.4 до 5в, а потом с 5в до 3.3 для NRF. Мощность каждого регулятора довольно маленькая. едва на саму ардуину хватает.
    А NRF24 в моменты связи потребляет до 200-300мА
    Ах да, еще забыл - у вас же небось еще и GPS от ардуины запитан? - удивительно как это вообще все работает...

    Возьмите источник питания 5в током не менее 0.5А и подключите напрямую на пин "5в" ардуины. Если все заработает - значит дело в этом, будете думать как переделать питание
    Еще полезно припаять конденсатор 10мкФ прямо на пины питания модуля NRF
     
    NikitOS нравится это.
  6. Wolferio

    Wolferio Нерд

    Уже пробовал напрямую с источником питания 5в током 2А - не помогло.

    У меня ВОПРОС почему передатчик - при источнике от ПК работает и передает данные, а от ОТДЕЛЬНОГО Источника питания НЕТ? Где собака зарыта?

    И еще - подключаю к другому ПК где не стоит Ардуино - передачи нет. Возвращаю назад где установлено Ардуино - Передача идет.:rolleyes:
     
    Последнее редактирование: 9 май 2020
  7. Wolferio

    Wolferio Нерд

    ВСЕМ ОГРОМНОЕ СПАСИБО!!!!!!
    Проблему решил!!! :).
    Все дело в том что в случае с Leonardo лучше использовать аппаратный UART. Перекинул пины на RX и TX ардуины + скачал библиотеку которая работает с аппаратным UART (их в нэте полно!!!!). ВСЕ РАБОТАЕТ!!. ЕЩЕ РАЗ ВСЕМ СПАСИБО.
     
Статус темы:
Закрыта.