Проблемы передачи через Ethernet

Тема в разделе "Arduino & Shields", создана пользователем ExSoulz, 14 окт 2016.

  1. ExSoulz

    ExSoulz Нуб

    Доброго времени, господа. Сегодня столкнулся с такой проблемой, что дуня передаёт по локалке только первый символ строки.
    Пояснения:
    Передаваемая строка - есть куча данных из вычислений, которые складываются в единую строку и отправляются.

    При выводе этой строки (той же самой переменной) в монитор порта, все отображается корректно.

    При передачи хардкода, аля
    Код (C++):
    String s = "55 55 55 55";
    client.Writeln(s);
    Все отправляется безупречно.

    Вот код (да поможет Вам господь разобрать это)


    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Physical ardress of arduino;
    IPAddress server(192,168,19,1);  // IP ADRESS OF SERVER< THAT YOU CONNECTS
    IPAddress ip(192,168,19,114);      // IP ADRESS OF ARDUINO
    IPAddress gateway(192,168,19, 1);  // Gateway for ip-network
    IPAddress subnet(255, 255, 255, 0);// Subnet for ip-network

    EthernetClient client;
    boolean isConnected;
    String machine_N = "65"; // Номер прядильной машины, где стоит этот модуль.

    String _result;

    void setup()
    {
      Serial.begin(9600);
      pinMode(7,INPUT); // Добавлять пины датчиков тут.
      pinMode(13, OUTPUT);
      Ethernet.begin(mac, ip,gateway,subnet);
      Serial.println();
      delay(1000);
    }

    int state;
    int perv_state=1;
    int counter;
    float res;
    float s_time;
    float e_time;
    boolean done = false;

    void loop()
    {
      Measure(7,4);
      Combine("0");
      Combine("0");
      Combine("0");
      SendResult(_result);
      _result = "";
    }

    void Measure(int sensorPin, int rCount)
    {
      Serial.println("Start");
      done = false;
      while(!done)
      {
      int state = digitalRead(sensorPin);
      if (state!=perv_state)
      {
        //state == 0 ? digitalWrite(13,HIGH) : digitalWrite(13,LOW);
        perv_state = state;
        if (state == 0)
        {
          inc(rCount);
        }
      }
      }
    }

    void inc(int rCount)
    {
      counter ++;
      Serial.println(counter);
      if (counter == 1) s_time= millis();
      if (counter == rCount+1)
      {
        e_time = millis();
        float delta = (e_time - s_time)/1000;
        res = (60*rCount)/delta;
        counter =0;
        char msg[15];
        dtostrf(res, 4, 3, msg);
        Combine(msg);
        done = true;
      }
    }
    void Combine (String _value)
    {
      _result +=_value+" ";
      Serial.println("Combined");
      Serial.println(_result);
    }



    void SendResult(String result)
    {
      Serial.println("Connecting");
      if (client.connect(server, 4949)) {
        isConnected = true;
      }
      else {
        Serial.println("connection failed");
      }
    if (isConnected)
    {
      Serial.print("Result = ");
      Serial.println(result);
      String message = machine_N + " " +_result;
      Serial.println(message);
      client.println(message);
      client.stop();
    }
    }
    [​IMG]
     
    Последнее редактирование: 14 окт 2016
  2. rkit

    rkit Гуру

    В этом коде не передается ничего, кроме трех нулей.
     
  3. ExSoulz

    ExSoulz Нуб

    см скриншот. Данные идут с датчика холла на приборе.
     
  4. ExSoulz

    ExSoulz Нуб

    Вопрос решен.

    Решение:
    Не посылайте String. Посылайте Char[];