parent
19d50b56fa
commit
06e6ec14b3
@ -0,0 +1,37 @@
|
||||
{
|
||||
"env": {
|
||||
"myDefaultIncludePath": [
|
||||
"${workspaceFolder}",
|
||||
"${workspaceFolder}/VL53L8CX_ULD_API/inc",
|
||||
"${workspaceFolder}/build",
|
||||
"${env:PICO_SDK_PATH}/src/**/include",
|
||||
"${env:PICO_SDK_PATH}/src/common/pico_base/include",
|
||||
"${env:PICO_SDK_PATH}/build/generated/pico_base",
|
||||
"${env:PICO_SDK_PATH}/src/common/pico_base/include/pico",
|
||||
"${env:PICO_SDK_PATH}/src/common/pico_stdlib/include"
|
||||
],
|
||||
"myCompilerPath": "/usr/bin/arm-none-eabi-gcc"
|
||||
},
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"intelliSenseMode": "linux-gcc-arm",
|
||||
"includePath": [
|
||||
"${myDefaultIncludePath}",
|
||||
"${workspaceFolder}/build/"
|
||||
],
|
||||
"compilerPath": "/usr/bin/arm-none-eabi-gcc",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17",
|
||||
"browse": {
|
||||
"path": [
|
||||
"${workspaceFolder}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"configurationProvider": "ms-vscode.cmake-tools"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
{
|
||||
"tasks": [
|
||||
{
|
||||
"type": "shell",
|
||||
"command": "cd build; cmake ../; make",
|
||||
"label": "CMake in build/",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "shell",
|
||||
"command": "cd build; cmake ../; make Flash",
|
||||
"label": "CMake & Make & Flash",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"version": "2.0.0"
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Simple Read
|
||||
*
|
||||
* Read data from the serial port and change the color of a rectangle
|
||||
* when a switch connected to a Wiring or Arduino board is pressed and released.
|
||||
* This example works with the Wiring / Arduino program that follows below.
|
||||
*/
|
||||
|
||||
|
||||
import processing.serial.*;
|
||||
|
||||
Serial myPort; // Create object from Serial class
|
||||
int val; // Data received from the serial port
|
||||
|
||||
int square_size = 40;
|
||||
int square_gap = 4;
|
||||
int square_space = (square_size + square_gap);
|
||||
int max_distance = 650;
|
||||
int max_color = 650;
|
||||
|
||||
void setup()
|
||||
{
|
||||
size(360, 360);
|
||||
colorMode(HSB, 1000);
|
||||
// I know that the first port in the serial list on my mac
|
||||
// is always my FTDI adaptor, so I open Serial.list()[0].
|
||||
// On Windows machines, this generally opens COM1.
|
||||
// Open whatever port is the one you're using.
|
||||
print(Serial.list());
|
||||
String portName = Serial.list()[0];
|
||||
myPort = new Serial(this, portName, 115200);
|
||||
}
|
||||
|
||||
boolean record_started=false;
|
||||
String data="";
|
||||
|
||||
void draw()
|
||||
{
|
||||
|
||||
|
||||
if ( myPort.available() > 0) { // If data is available,
|
||||
String inBuffer = myPort.readString();
|
||||
|
||||
String[] lines = inBuffer.split("\n");
|
||||
|
||||
for(int index = 0; index<lines.length; index++){
|
||||
if ( lines[index].startsWith(">distance:")){
|
||||
data = lines[index];
|
||||
record_started=true;
|
||||
continue;
|
||||
}
|
||||
if(record_started){
|
||||
data += lines[index];
|
||||
if(count(data) >= 64){
|
||||
record_started=false;
|
||||
display_my_data(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int count(String line){
|
||||
return line.length() - line.replace(",", "").length();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void display_my_data(String data){
|
||||
|
||||
String distances[] = data.split(":")[1].split(",");
|
||||
print(distances[0]);
|
||||
for(int row=0; row < 8; row++){
|
||||
for(int col=0; col < 8; col++){
|
||||
int distance = int(distances[row+8*col]);
|
||||
if( distance >max_distance)distance = max_distance;
|
||||
fill(color(distance * max_color/ max_distance, 1000, 1000));
|
||||
|
||||
square(row * square_space + square_gap, col * square_space + square_gap, square_size);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
// Wiring / Arduino Code
|
||||
// Code for sensing a switch status and writing the value to the serial port.
|
||||
|
||||
int switchPin = 4; // Switch connected to pin 4
|
||||
|
||||
void setup() {
|
||||
pinMode(switchPin, INPUT); // Set pin 0 as an input
|
||||
Serial.begin(9600); // Start serial communication at 9600 bps
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (digitalRead(switchPin) == HIGH) { // If switch is ON,
|
||||
Serial.write(1); // send 1 to Processing
|
||||
} else { // If the switch is not ON,
|
||||
Serial.write(0); // send 0 to Processing
|
||||
}
|
||||
delay(100); // Wait 100 milliseconds
|
||||
}
|
||||
|
||||
*/
|
@ -1,47 +1,6 @@
|
||||
Détection de l'adversaire - 2023
|
||||
================================
|
||||
VL53L8CX with the Raspberry Pi Pico (RP2040)
|
||||
============================================
|
||||
|
||||
Le code présenté ici sert à la détection de l'adversaire pour les robots de l'équipe [Poivron Robotique](http://poivron-robotique.fr) qui participe à la coupe de France de Robotique. Ce code tourne sur un Raspberry Pi Pico et une carte personnalisé sur laquelle sont banchés 12 capteurs VL53L1X.
|
||||
This code use a Raspberry Pi Pico (RP2040) to read the data of a VL53L8CX.
|
||||
|
||||
Principe de fonctionnement
|
||||
--------------------------
|
||||
|
||||
Les capteurs VL53L1X sont des capteurs I2C dont l'adresse est configurable. Cependant, le capteur revient à son adresse par défaut dès qu'il est éteint ou désactivé par la broche `XSHUT`. Le Raspberry Pi Pico est relié à un 74HC4067, qui lui permet de désactiver un capteur à la fois.
|
||||
|
||||
Le code utilisé ici repose sur [VL53L1X_Raspberry_Pi_Pico](https://git.poivron-robotique.fr/Keuronde/Raspberry_Pi_Pico_VL53L1X) et l'exemple pour piloter les LED RGB ws2812 fourni avec le SDK du Raspberry Pi Pico.
|
||||
|
||||
Initialisation
|
||||
--------------
|
||||
|
||||
La première étape de l'initialisation consiste à changer tous les capteurs d'adresses en une seule commande I2C.
|
||||
|
||||
La seconde étape consiste, pour chaque capteur, à le désactiver puis à le réactiver à l'aide du 74HC4067 et de la boche `XSHUT` du composant. Ce faisant, il reprend son adresse par défaut et il est le seul à cette adresse. Ainsi il est possible, via le bus I2C de lui attribuer une adresse unique.
|
||||
|
||||
Communication I2C
|
||||
-----------------
|
||||
|
||||
Avec le reste du robot, la carte communique en I2C sur le bus i2c1, se comportant comme une EPROM en utilisant le code de Valentin Milea <valentin.milea@gmail.com>, [Pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave).
|
||||
|
||||
Description de la mémoire d'échange:
|
||||
------------------------------------
|
||||
Les adresses 0 à 11 (0x0B) contiennent les distances des capteurs en centimètre. Cette distance est saturée à 200 cm.
|
||||
Les adresses 16 (0x10) à 18 (0x12) contiennent les consignes d'éclairage des LEDs:
|
||||
* 0x10 : Couleur sur 8 bits.
|
||||
* 0x11 : octet de poids fort pour le masque sélectionnant les LEDs à commander.
|
||||
* 0x12 : octet de poids faible pour le masque sélectionnant les LEDs à commander.
|
||||
|
||||
Couleur sur 8 bits structurée ainsi : 3-3-2 (Rouge - vert - bleu).
|
||||
Le masque sur 16 bits, 1 : la led doit être piloter de la couleur indiquée, 0 la led affiche la distance.
|
||||
Valeur spéciale pour le masque : 0x00. Dans ce cas, toutes les LEDs reprennent leur fonction par défaut (affichage de la distance).
|
||||
|
||||
|
||||
Démo - Ne fonctionne plus
|
||||
----
|
||||
|
||||
La démo ne fonctionne plus, la carte initialise automatiquement les capteurs et lit leurs valeurs en continu. Le code esclave I2C envoi ces valeurs qui sont stockée de l'adresse 0x0 à 0x0B de la "mémoire" I2C.
|
||||
|
||||
Le code I2C pour la partie esclave est repris de [pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave).
|
||||
|
||||
Une fois branchée à un ordinateur, le Raspberry Pi Pico propose un menu par la liaison USB/série.
|
||||
- La commande "i" initialise les capteurs et change d'état les LEDs en fonction du succès de l'initialisation.
|
||||
- La commande "j" démarre une lecture continue et renvoie les données des capteurs dans un format compatible avec [Teleplot](https://github.com/nesnes/teleplot/).
|
||||
Current status : ability to read @15Hz the 8x8 values and send them to a computer through the USB connection. Based mainly on the "example 1" of the "Ultra Lite Driver" provided by ST Microelectronics.
|
Loading…
Reference in new issue