měření vzdáleností pomocí RPLidar A1 a komunikace s PLC
Napsal: 31 bře 2019, 23:36
				
				Zdravím, jsem nováček a byl bych rád za nějaká doporučení a rady od zkušenějších. Do Arduina UNO jsem nahrál example sketch z knihovny RPLidar, chtěl jsem nechat tisknout informace o vzdálenosti do seriového monitoru, tak jsem přidal akorát "Serial.println(distance);", všechno jsem zapojil, všechno vypadalo, že bude fungovat, akorát v seriovém monitoru mi to házelo akorát otazníky a různé znaky místo číselných hodnot. Zkoušel jsem měnit baudy, jestli to nebude tím, ale nepomohlo to. Napadlo mě, jestli nebude problém v tom, že sensor využívá TX/RX piny Arduina, ale nevím moc co s tím. Pokud tohle vyřeším, tak mám v plánu posílat data skrz ethernetový sheild W5100 do PLC. Budu rád za každou radu, ať už ohledně tištění hodnot do seriového monitoru, nebo ohledně toho propojení s PLC (jestli je to vůbec realizovatelné přes ten shield, nebo tak).
Děkuji
			Děkuji
Kód: Vybrat vše
// This sketch code is based on the RPLIDAR driver library provided by RoboPeak
#include <RPLidar.h>
// You need to create an driver instance 
RPLidar lidar;
#define RPLIDAR_MOTOR 3 // The PWM pin for control the speed of RPLIDAR's motor.
                        // This pin should connected with the RPLIDAR's MOTOCTRL signal 
                       
                        
void setup() {
  // bind the RPLIDAR driver to the arduino hardware serial
  lidar.begin(Serial);
  
  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
}
void loop() {
  if (IS_OK(lidar.waitPoint())) {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
    float angle    = lidar.getCurrentPoint().angle; //anglue value in degree
    bool  startBit = lidar.getCurrentPoint().startBit; //whether this point is belong to a new scan
    byte  quality  = lidar.getCurrentPoint().quality; //quality of the current measurement
    
    Serial.printl(distance);
    
    
  } else {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor
    
    // try to detect RPLIDAR... 
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100))) {
       // detected...
       lidar.startScan();
       
       // start motor rotating at max allowed speed
       analogWrite(RPLIDAR_MOTOR, 255);
       delay(1000);
    }
  }
}