Ciao a tutti ragazzi.
Sto utilizzando il laser Lidar-lite v2 e sto sviluppando un codice di scansione e mappatura del terreno.
I risultati fin'ora ottenuti sono fantastici (600 pixel 60°x50° di campo visivo utilizzando 2 servi) ma per varie problematiche vorrei evitare di utilizzare la libreria l2c che attualmente appunto uso nel codice e al suo posto vorrei utilizzare la wire.
E' possibile? riuscireste a modificare il codice che ho postato in seguito utilizzando la wire al posto della l2c?
grazie in anticipo a tutti!
Ecco il codice base del lidar-lite:
/*
http://pulsedlight3d.com
This sketch demonstrates getting distance with the LIDAR-Lite Sensor
It utilizes the 'Arduino I2C Master Library' from DSS Circuits:
http://www.dsscircuits.com/index.php/articles/66-arduino-i2c-master-library
You can find more information about installing libraries here:
http://arduino.cc/en/Guide/Libraries
*/
#include <I2C.h>
#define LIDARLite_ADDRESS 0x62 // Default I2C Address of LIDAR-Lite.
#define RegisterMeasure 0x00 // Register to write to initiate ranging.
#define MeasureValue 0x04 // Value to initiate ranging.
#define RegisterHighLowB 0x8f // Register to get both High and Low bytes in 1 call.
void setup(){
Serial.begin(500000); //Opens serial connection at 9600bps.
I2c.begin(); // Opens & joins the irc bus as master
delay(1); // Waits to make sure everything is powered up before sending or receiving data
I2c.timeOut(50); // Sets a timeout to ensure no locking up of sketch if I2C communication fails
}
void loop()
{
// Write 0x04 to register 0x00
uint8_t nackack = 100; // Setup variable to hold ACK/NACK resopnses
while (nackack != 0)
{ // While NACK keep going (i.e. continue polling until sucess message (ACK) is received )
nackack = I2c.write(LIDARLite_ADDRESS,RegisterMeasure, MeasureValue); // Write 0x04 to 0x00
delay(1); // Wait 1 ms to prevent overpolling
}
byte distanceArray[2]; // array to store distance bytes from read function
// Read 2byte distance from register 0x8f
nackack = 100; // Setup variable to hold ACK/NACK resopnses
while (nackack != 0)
{ // While NACK keep going (i.e. continue polling until sucess message (ACK) is received )
nackack = I2c.read(LIDARLite_ADDRESS,RegisterHighLowB, 2, distanceArray); // Read 2 Bytes from LIDAR-Lite Address and store in array
delay(1); // Wait 1 ms to prevent overpolling
}
int distance = (distanceArray[0] << 8 ) + distanceArray[1]; // Shift high byte [0] 8 to the left and add low byte [1] to create 16-bit int
Serial.println(distance);
}