Передача данных между ардуино

Тема в разделе "Arduino & Shields", создана пользователем TiMoN816, 14 июн 2021.

  1. b707

    b707 Гуру

    почему?
    Включите логику - если две ардуины не могут общаться, то и одна читать с авто тоже не смогла бы. А если вы говорите. что "у ребят работало" - то значит ардуины могут
     
  2. TiMoN816

    TiMoN816 Нерд

    Все верно, не знаю почему, может аппаратная проблема, что с нано на нано передает на такой скорости что попало. Но вот взяв сейчас Мега и посылая на нее данные с Нано, все прошло просто отлично!!! Попробовал в авто. Подключаю нано к шине авто, мега к нано. Нано считывает шину авто без ошибок, ну и мега отлично принимает эти же данные с нано с такой же скоростью(250кБод). С этим все понятно, теперь буду учиться писать код.
     
    Последнее редактирование: 15 июн 2021
  3. parovoZZ

    parovoZZ Гуру

    Честно говоря, так и не понял проблему ТС.
    Два аппаратных usart есть в дешманской attiny441/841. Бунина мега не мощнее ни разу, если не использовать блок перемножителя (а он здесь и не используется).
     
  4. b707

    b707 Гуру

    вы все перепутали, к авто надо было Мегу подключать... А "Нано получает и передает" - не верю, сказки какие-то
    Покажите код, который залит в Нано
     
  5. TiMoN816

    TiMoN816 Нерд

  6. b707

    b707 Гуру

    зачем вы мне даете ссылки на чей-то старый код?
    Где в этом коде чтение с авто и передача данных на другую ардуину? - там этого нет
    В сообщении #22 вы написали, что запустили чтение на Нано и передачу на мегу. - соврали?
     
  7. TiMoN816

    TiMoN816 Нерд

    Я только добавил строки запись в софтсериал того, что приходит в сериал от авто, больше ничего в коде не менялось. Приеду домой, вставлю код который у меня, посмотрите.
     
  8. b707

    b707 Гуру

    всегда выклдаывайте именно тот код. который запускаете. а не чей-то для примера.
    Будет код - посмотрим, но пока то. что вы пишете - звучит фантастикой...
     
  9. TiMoN816

    TiMoN816 Нерд

    Интересно Вы рассуждаете... Я же объяснил, что нано считывает с авто, а мега считывает с нано, по сути мне это и было нужно. Если бы так и не добился этого, зачем бы я врал, чтобы потом дальше мучаться.
     
  10. TiMoN816

    TiMoN816 Нерд

    Если успею, сегодня скину фото, что мега подключена к нано, а нано к авто, и что считываемые коды с помощью нано, приходят в монитор мега.
     
  11. b707

    b707 Гуру

    вот это и удивительно.
    Впрочем, без кода нет смысла обсуждать

    фото не нужно, достаточно кода
     
  12. TiMoN816

    TiMoN816 Нерд

    Основная часть кода находится в библиотеках по той же ссылке.
     
  13. b707

    b707 Гуру

    меня интересует ваш скетч для нано и, возможно, ваш скетч для меги.
    Только именно то. что залито в платы, а не "примерно как-то так..." :)

    И добавлю - вы нифига не поняли совета Паровоза, смысл использования Меги был в том, что у нее три аппаратных сериала, можно было один подключить к авто и читать данные. а на другой выдавать.
    А так как сделали вы - использование меги абсолютно не имеет смысла.
     
  14. TiMoN816

    TiMoN816 Нерд

    Хорошо, я понял, обязательно выложу
     
  15. Feofan

    Feofan Нерд

    Вроде как 4.
     
  16. TiMoN816

    TiMoN816 Нерд

    4, там 0,1,2,3.
     
  17. TiMoN816

    TiMoN816 Нерд

    Код (C++):
    #include <AVCLanDrv.h>
    #include <BuffSerial.h>
    #include <config.h>
    #include <SoftwareSerial.h>

    SoftwareSerial NANO(0, 1);

    int ledPin = 13;                 // LED connected to digital pin 13
    AVCLanDrv avclan;
    bool first;
    byte t;
    byte count;


    void setup(){
      pinMode(ledPin, OUTPUT);      // sets the digital pin as output
      bSerial.begin(250000);
      avclan.begin();
      bSerial.println("AVCLan");
      first = true;
      NANO.begin(250000);
    }

    void loop(){



      NANO.write(bSerial.rxRead());



      if (INPUT_IS_SET){
    //    LedOn();
        byte res = avclan.readMessage();
        if (!res){
          avclan.printMessage(true);
        }else{
          bSerial.print("R");
          bSerial.printHex4(res);
          bSerial.println();
          while (!avclan.isAvcBusFree());
        }
    //    LedOff();
      }else{
        if (first){
          first = false;
          avclan.deviceAddress = 0x240;
          avclan.broadcast = AVC_MSG_BROADCAST;
          avclan.masterAddress = 0x0360;
          avclan.slaveAddress  = 0x01FF;
          avclan.dataSize      = 0x04;
          avclan.message[0]    = 0x01;
          avclan.message[1]    = 0x11;
          avclan.message[2]    = 0x13;
          avclan.message[3]    = 0x63;
    //      byte res = avclan.sendMessage();
    //      if (!res){
    //        avclan.printMessage(false);
    //      }else{
    //        bSerial.print("W");
    //        bSerial.printHex4(res);
    //        bSerial.println();
    //      }
        }
      }
      if (bSerial.rxEnabled()) {
        cbi(UCSR0B, RXCIE0);                                // disable RX complete interrupt
        uint8_t readkey = bSerial.rxRead();

        switch (readkey){
          case 'P':                                  // print config
            bSerial.print("Overflow: ");
            bSerial.printHex8(bSerial.txOverflow >> 8);
            bSerial.printHex8(bSerial.txOverflow);
            bSerial.println();
         
         
            break;
          case 'M':
            count = 0;  
            while(1){
              while (INPUT_IS_SET);
              uint8_t oldSREG = SREG;
              cli();             // disable interrupts
              while (INPUT_IS_CLEAR);
              TCNT2 = 0;
              while (INPUT_IS_SET){
                t = TCNT2;
                if (t > 0xF0) break;
              };
              t = t / 2;
              SREG = oldSREG;
              bSerial.printDec(t);
              bSerial.println();
              count++;
              if (count > 30){
                delay(300);
                count = 0;
             
              }
            }
            break;
          case 'S':
            bSerial.println("S");
            sendMess();
            break;
          case 'H':
            bSerial.println("H set");
            AVC_OUT_EN;
            OUTPUT_SET_1;
            break;
          case 'L':
            bSerial.println("L set");
            AVC_OUT_EN;
            OUTPUT_SET_0;
            break;
          case 'D':
            bSerial.println("Out dis");
            AVC_OUT_DIS;
            break;
         
        }
      }
    }

    void sendMess(){

          avclan.deviceAddress = 0x360;
          avclan.broadcast = AVC_MSG_NORMAL;
          avclan.masterAddress = 0x0360;
          avclan.slaveAddress  = 0x0140;
          avclan.dataSize      = 0x05;
          avclan.message[0]    = 0x00;
          avclan.message[1]    = 0x01;
          avclan.message[2]    = 0x12;
          avclan.message[2]    = 0x10;
          avclan.message[3]    = 0x63;
          byte res = avclan.sendMessage();
          if (!res){
            avclan.printMessage(false);
          }else{
            bSerial.print("W");
            bSerial.printHex4(res);
            bSerial.println();
         
          }    
    }

    void LedOn(){
      digitalWrite(ledPin, HIGH);
    }

    void LedOff(){
      digitalWrite(ledPin, LOW);
    }
    Код (C++):
    void setup() {
      Serial.begin(250000);               // Скорость обмена данными с компьютером
      Serial.println("Read:");
    }
    void loop() {
      if (Serial.available()){ // Ожидаем прихода данных от Nano1
      Serial.write(Serial.read()); // …и выводим их в Serial
      }
    }
     
  18. TiMoN816

    TiMoN816 Нерд

  19. TiMoN816

    TiMoN816 Нерд

    Именно эти скетчи загружены на ардуино. На фото слева монитор Nano, справа от Мега. Повторюсь, с первым скетчем идут библиотеки. Насчет меги, если подключать ее, к тем же пинам что и на нано, и тот же скетч, она отказывается считывать корректно. Похоже скетч заточен именно под нано, а на данный момент у меня просто не хватит знаний, чтобы разобраться с кодом в библиотеках... И кстати, подключение почему-то идет именно к пинам 10, 11, 12.
     
    Последнее редактирование: 16 июн 2021
  20. b707

    b707 Гуру

    Мдя... у вас к пинам 0 и 1 на нано одновременно подключены Мега и адаптер для авто?

    я фигею, дорогая редакция...

    Вы понимаете. что отсылаете все. что приняли - не только на мегу. но и обратно в шину авто? Чем это кончится. интересно.