RX TX для дальномера и UNO

Тема в разделе "Arduino & Shields", создана пользователем Егор Колмаков, 18 сен 2015.

  1. Алоха! Камрады!
    Имею дальномер (описание прикрепил!) и Arduino Uno
    Через RX хочу снять его показания и вывести на компорт!
    Задача вроде как проста, но результата добиться не могу.
    Может кто сталкивался с таким вопросом и может проконсультировать или подкинуть скетчик. С меня шашлык и пиво!
     

    Вложения:

  2. Arduiner001

    Arduiner001 Гик

    Подключите TX модуля к пину 2, RX к пину 3 и используйте SoftwareSerial.
    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial dist(2, 3);

    void setup(){
      Serial.begin(9600); //Подключаемся к компьютеру
      dist.begin(/*Скорость*/); //Подключаемся к модулю
    }

    void loop(){
      //Считываем значение и отправляем
    }
     
  3. Спасибо друг за ответ!
    Я все так и сделал, в ответ прога выделяет строку:
    dist.begin(/*Скорость*/); //Подключаемся к модулю

    и пишет сообщение об ошибке:

    Arduino: 1.6.5 (Windows 7), Плата"Arduino/Genuino Micro"

    sketch_sep18a.ino: In function 'void setup()':
    sketch_sep18a:8: error: no matching function for call to 'SoftwareSerial::begin()'
    sketch_sep18a.ino:8:26: note: candidate is:
    In file included from sketch_sep18a.ino:1:0:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.h:92:8: note: void SoftwareSerial::begin(long int)
    void begin(long speed);
    ^
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.h:92:8: note: candidate expects 1 argument, 0 provided
    no matching function for call to 'SoftwareSerial::begin()'

    Почему ему не нравится?
    И почему в void loop() нет команд, как я буду считывать полученный результат?
     
  4. geher

    geher Гуру

    Нескромный вопрос.
    Строка инициализации порта так и записана в программе?

    dist.begin(/*Скорость*/);

    Если так, то компилятор "не находит" подходящего варианта функции для вызова, поскольку функции с таким именем без параметра или с параметром, для которого задано значение по умолчанию, в классе SoftwareSerial просто нет. Но есть функция с таким же именем, но с целочисленным параметром. Как говорится, все на чистом англицком компилятором и написано.

    Надо просто вместо комментария /*Скорость*/ задать какую-нибудь скорость (такую же, как и на другой стороне, в случае данного конкретного модуля, если верить представленному описанию, 19200).
    Т.е. должно быть:

    dist.begin(19200);
     
  5. Спасибо Geher
    я загрузил 19200 и код прогрузился, но как все таки вызвать значение с дальномера?? void loop() пуст!
     
  6. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void loop(){
      dist.print("D");
      while(!dist.available());
      for(int i = 0; i < dist.available(); i++){
        Serial.write(dist.read());
      }
      Serial.println();
      delay(1500);
    }
     
  7. Заработало!
    вот только на ком порт сыпит непонятными значениями, изображение порта в приложении.Самое интересное, что с изменением расстояния эти знаки не меняются.
    Возможны какие то варианты?
     

    Вложения:

  8. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void loop(){
      dist.print("O"); //!!!ОСТОРОЖНО, ЭТО ВКЛЮЧИТ ЛАЗЕР!!!
      delay(500);
      dist.print("D");
      while(!dist.available());
      for(int i = 0; i < dist.available(); i++){
        Serial.print(dist.read()); //В данном случае мы отправляем не ASCII символ, а текст, в отличии от Serial.write()
      }
      Serial.println();
      delay(1500);
    }
     
  9. Сделал так, теперь выводит цифры, но они от расстояния не зависят! возможно как то решить эту проблему или это связано с неполадками дальномера?
    79447975
    33131068025544797533
    13107944797533131068025544
    797533131079447975331310680255
    44797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310680
    25544797533131079447975331310686
    25544797533131079447975331310680
     
  10. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void setup() {
      dist.print("O"); //!!!ОСТОРОЖНО, ЭТО ВКЛЮЧИТ ЛАЗЕР!!!
      delay(500);
    }

    void loop(){
      dist.print("D");
      while(!dist.available());
      Serial.print("Bytes available: ");
      Serial.println(dist.available());
      Serial.print("Data: ");
      for(int i = 0; i < dist.available(); i++){
        Serial.print(dist.read()); //В данном случае мы отправляем не ASCII символ, а текст, в отличии от Serial.write()
      }
      Serial.println();
      delay(1500);
    }
    Что пишет в мониторе?
     
  11. пишет следующее:
    Bytes available: 1
    Data: 68
    Bytes available: 9
    Data: 0255447975
    Bytes available: 13
    Data: 33131068025544
    Bytes available: 15
    Data: 7975331310680255
    Bytes available: 16
    Data: 447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 17
    Data: 255447975331310680
    Bytes available: 8
    Data: 255447975
    Bytes available: 4
    Data: 3313
    Bytes available: 2
    Data: 10
    Bytes available: 1
    Data: 0
     
  12. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void loop(){
      if(Serial.available()){
        dist.write(Serial.read());
      }
      if(dist.available()){
        Serial.write(dist.read());
      }
    }
    Откройте сер. порт, введите а английскую большую O, подождите секунду, введите D и напишите ответ от ардуино
     
  13. O,OK!
    D я,ОК!
    Такой ответ!
     
  14. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void setup(){
      dist.print("O");
      while(dist.available < 3);
      dist.read();
      dist.read();
      dist.read();
      delay(500);
    }

    void loop(){
      dist.print("D");
      while(dist.available < 4);
      byte data = dist.read();
      dist.read();
      dist.read();
      dist.read();
      Serial.print((int)data);
      delay(500);
    }
     
  15. Такую ошибку выдает
    sketch_sep18a:17: error: invalid use of member function (did you forget the '()' ?)
    invalid use of member function (did you forget the '()' ?)
     
  16. Arduiner001

    Arduiner001 Гик

    Код (C++):
    void setup(){
      dist.print("O");
      while(dist.available() < 3);
      dist.read();
      dist.read();
      dist.read();
      delay(500);
    }

    void loop(){
      dist.print("D");
      while(dist.available() < 4);
      byte data = dist.read();
      dist.read();
      dist.read();
      dist.read();
      Serial.print((int)data);
      delay(500);
    }
     
  17. поставил скобки, вгрузил, но дальномер не работает
     
  18. Arduiner001

    Arduiner001 Гик

    То есть "не работает"? Конкретно что?
     
  19. Лазер не мигает, компорт инфу не выводит
     
  20. Arduiner001

    Arduiner001 Гик

    А провод питания не отпаялся?
    Код (C++):
    Serial.begin(9600);
    dist.begin(19200);
    оставили? Если нет, то вставьте в setup.