diff --git a/Arduino/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813.ino b/Arduino/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813.ino index 3b1d6db746135bec8391de46530535e8963ff30a..01920671d69764d457117e2ab0ed558eedb1481e 100644 --- a/Arduino/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813.ino +++ b/Arduino/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813/18_vl53l7cx_clean_with_STlibrary_Shift_register_20250127154813.ino @@ -340,6 +340,109 @@ void processSensorData(VL53L7CX &sensor, VL53L7CX_ResultsData &results, const Js for (int x = 0; x <= imageWidth - 1; x++) { sensorData.add(results.distance_mm[VL53L7CX_NB_TARGET_PER_ZONE * (x + y)]); } + void I2C_RST(int dataPin, int latchPin, int clockPin){ + uint8_t Pin_byte1 = 0b11111111; // For pins 0-7 + uint8_t Pin_byte2 = 0b11111111; // For pins 8-15 + uint8_t Pin_byte3 = 0b11111111; // For pins 16-23 + // Update the correct byte based on Pin + + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte3); // Send byte for pins 16-23 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_void I2C_RST(int dataPin, int latchPin, int clockPin){ + uint8_t Pin_byte1 = 0b11111111; // For pins 0-7 + uint8_t Pin_byte2 = 0b11111111; // For pins 8-15 + uint8_t Pin_byte3 = 0b11111111; // For pins 16-23 + // Update the correct byte based on Pin + + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte3); // Send byte for pins 16-23 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin, HIGH); + delay(200); +} + +void LPn0(uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin0, LOW); + + // Shift out the bits + shiftOut(dataPin0, clockPin0, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin0, clockPin0, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin0, HIGH); +} + +void LPn1(uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin1, LOW); + + // Shift out the bits + shiftOut(dataPin1, clockPin1, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin1, clockPin1, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin1, HIGH); +}byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin, HIGH); + delay(200); +} + +void LPn0(uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin0, LOW); + + // Shift out the bits + shiftOut(dataPin0, clockPin0, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin0, clockPin0, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin0, HIGH); +} + +void LPn1(uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin1, LOW); + + // Shift out the bits + shiftOut(dataPin1, clockPin1, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin1, clockPin1, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin1, HIGH); +} } } diff --git a/Arduino/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18.ino b/Arduino/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18.ino new file mode 100644 index 0000000000000000000000000000000000000000..3ac807313c5833ee521af2a6c77ddbd03649d86e --- /dev/null +++ b/Arduino/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18/4_vl53l7cx_clean_with_STlibrary_Shift_register_scalebal_to_18.ino @@ -0,0 +1,309 @@ +#include <Arduino.h> +#include <Wire.h> +#include <ArduinoJson.h> +#include <vl53l7cx_class.h> +#include "74HC154.h" +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <assert.h> +#include <stdlib.h> + +#define DEV_I2C1 Wire1 +#define DEV_I2C0 Wire + +#ifndef LED_BUILTIN + #define LED_BUILTIN 13 +#endif +#define LedPin LED_BUILTIN + +#define Fake_I2C_RST_PIN 99 +#define Fake_LPN 99 + +#define LPN_PIN0 0 +#define LPN_PIN1 1 +#define LPN_PIN2 2 +#define LPN_PIN3 3 +#define LPN_PIN4 4 +#define LPN_PIN5 5 +#define LPN_PIN6 6 +#define LPN_PIN7 7 +#define LPN_PIN8 8 +#define LPN_PIN9 9 +#define LPN_PIN10 10 +#define LPN_PIN11 11 +#define LPN_PIN12 12 +#define LPN_PIN13 13 +#define LPN_PIN14 14 +#define LPN_PIN15 15 +#define LPN_PIN16 16 +#define LPN_PIN17 17 + + +pin_size_t dataPin0 = 18; +pin_size_t latchPin0 = 17; +pin_size_t clockPin0 = 16; + +pin_size_t dataPin1 = 13; +pin_size_t latchPin1 = 14; +pin_size_t clockPin1 = 15; + + +uint16_t sensoraddress0 = 0x30; +uint16_t sensoraddress1 = 0x31; +uint16_t sensoraddress2 = 0x32; +uint16_t sensoraddress3 = 0x33; +uint16_t sensoraddress4 = 0x34; +uint16_t sensoraddress5 = 0x35; +uint16_t sensoraddress6 = 0x36; +uint16_t sensoraddress7 = 0x37; +uint16_t sensoraddress8 = 0x38; + +uint16_t sensoraddress9 = 0x40; +uint16_t sensoraddress10 = 0x41; +uint16_t sensoraddress11 = 0x42; +uint16_t sensoraddress12 = 0x43; +uint16_t sensoraddress13 = 0x44; +uint16_t sensoraddress14 = 0x45; +uint16_t sensoraddress15 = 0x46; +uint16_t sensoraddress16 = 0x47; +uint16_t sensoraddress17 = 0x48; + +uint16_t wait_for_i2c = 50; +uint16_t imageWidth = 8; +uint16_t ranging_frequency = 15; +pin_size_t SCL_PIN0 = 21; +pin_size_t SDA_PIN0 = 20; +pin_size_t SDA_PIN1 = 2; +pin_size_t SCL_PIN1 = 3; +JsonDocument doc; + +// Components. +VL53L7CX sensor0(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor1(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor2(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor3(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor4(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor5(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor6(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor7(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor8(&DEV_I2C0, Fake_LPN, Fake_I2C_RST_PIN); + +VL53L7CX sensor9(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor10(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor11(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor12(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor13(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor14(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor15(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor16(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); +VL53L7CX sensor17(&DEV_I2C1, Fake_LPN, Fake_I2C_RST_PIN); + + +void blink_led_loop(void); + +void setup() { + // put your setup code here, to run once: + delay(7000); + pinMode(dataPin0, OUTPUT); + pinMode(latchPin0, OUTPUT); + pinMode(clockPin0, OUTPUT); + pinMode(dataPin1, OUTPUT); + pinMode(latchPin1, OUTPUT); + pinMode(clockPin1, OUTPUT); + + Serial.begin(115200); + Serial.println("Initialize... Please wait, it may take few seconds..."); + + // Initialize I2C bus. + DEV_I2C0.setSCL(SCL_PIN0); + DEV_I2C0.setSDA(SDA_PIN0); + DEV_I2C0.begin(); + DEV_I2C0.setClock(1000000); + delay(50); + + DEV_I2C1.setSCL(SCL_PIN1); + DEV_I2C1.setSDA(SDA_PIN1); + DEV_I2C1.begin(); + DEV_I2C1.setClock(1000000); + delay(50); + + // Initialize and configure sensors + Serial.println("Initializing sensors..."); + + initializeSensorInterface0(sensor0, sensoraddress0, LPN_PIN0); + i2cScanner(); // Perform I2C scan + + initializeSensorInterface0(sensor1, sensoraddress1, LPN_PIN1); + i2cScanner(); // Perform I2C scan + + initializeSensorInterface0(sensor2, sensoraddress2, LPN_PIN2); + i2cScanner(); // Perform I2C scan + + initializeSensorInterface0(sensor3, sensoraddress3, LPN_PIN3); + i2cScanner(); // Perform I2C scan + + Serial.println("All sensors initialized successfully."); +} + +void loop() { + // Declare the result data variables for each sensor + VL53L7CX_ResultsData Results0; + VL53L7CX_ResultsData Results1; + VL53L7CX_ResultsData Results2; + VL53L7CX_ResultsData Results3; + + // Process each sensor data and save to respective JSON arrays + processSensorData(sensor0, Results0, doc["sensor0"].to<JsonArray>(), "sensor0"); + processSensorData(sensor1, Results1, doc["sensor1"].to<JsonArray>(), "sensor1"); + processSensorData(sensor2, Results2, doc["sensor2"].to<JsonArray>(), "sensor2"); + processSensorData(sensor3, Results3, doc["sensor3"].to<JsonArray>(), "sensor3"); + + // Serialize the JSON document and print to Serial + serializeJson(doc, Serial); + Serial.println(); +} + +void LPn(uint16_t dataPin, uint16_t latchPin, uint16_t clockPin, uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + Serial.print(Pin_byte1,BIN); + Serial.println(Pin_byte2,BIN); + digitalWrite(latchPin, HIGH); +} + +void I2C_RST(uint16_t dataPin, uint16_t latchPin, uint16_t clockPin){ + uint8_t Pin_byte1 = 0b11111111; // For pins 0-7 + uint8_t Pin_byte2 = 0b11111111; // For pins 8-15 + // Update the correct byte based on Pin + + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin, HIGH); + delay(200); +} + +void processSensorData(VL53L7CX &sensor, VL53L7CX_ResultsData &results, const JsonArray& data, const char* sensorKey) { + uint8_t NewDataReady = 0; + uint8_t status; + + // Wait for data to be ready + do { + status = sensor.vl53l7cx_check_data_ready(&NewDataReady); + } while (!NewDataReady); + + // Turn LED on to indicate data processing + digitalWrite(LedPin, HIGH); + + // If data is ready, get the ranging data and store it in the JSON array + if ((!status) && (NewDataReady != 0)) { + status = sensor.vl53l7cx_get_ranging_data(&results); + JsonArray sensorData = doc[sensorKey].to<JsonArray>(); + + // Process the results and add them to the JSON array + for (int y = imageWidth * (imageWidth - 1); y >= 0; y -= imageWidth) { + for (int x = 0; x <= imageWidth - 1; x++) { + sensorData.add(results.distance_mm[VL53L7CX_NB_TARGET_PER_ZONE * (x + y)]); + } + } + } + + // Turn LED off to indicate processing is done + digitalWrite(LedPin, LOW); +} + +void initializeSensorInterface0(VL53L7CX &sensor, uint16_t sensorAddress, int lpnPin) { + LPn(dataPin0, latchPin0, clockPin0, lpnPin, true); // Activate sensor power + delay(wait_for_i2c); + sensor.begin(); + delay(wait_for_i2c); + sensor.init_sensor(); + delay(wait_for_i2c); + + // Set I2C address + sensor.vl53l7cx_set_i2c_address(sensorAddress << 1); + delay(wait_for_i2c); + + // Set resolution and frequency + sensor.vl53l7cx_set_resolution(VL53L7CX_RESOLUTION_8X8); + delay(wait_for_i2c); + sensor.vl53l7cx_set_ranging_frequency_hz(ranging_frequency); + delay(wait_for_i2c); + + // Start ranging + sensor.vl53l7cx_start_ranging(); + delay(wait_for_i2c); + + // Reset LPN and I2C pins + LPn(dataPin0, latchPin0, clockPin0, lpnPin, false); +} + +void initializeSensorInterface1(VL53L7CX &sensor, uint16_t sensorAddress, int lpnPin) { + LPn(dataPin1, latchPin1, clockPin1, lpnPin, true); // Activate sensor power + delay(wait_for_i2c); + sensor.begin(); + delay(wait_for_i2c); + sensor.init_sensor(); + delay(wait_for_i2c); + + // Set I2C address + sensor.vl53l7cx_set_i2c_address(sensorAddress << 1); + delay(wait_for_i2c); + + // Set resolution and frequency + sensor.vl53l7cx_set_resolution(VL53L7CX_RESOLUTION_8X8); + delay(wait_for_i2c); + sensor.vl53l7cx_set_ranging_frequency_hz(ranging_frequency); + delay(wait_for_i2c); + + // Start ranging + sensor.vl53l7cx_start_ranging(); + delay(wait_for_i2c); + + // Reset LPN and I2C pins + LPn(dataPin1, latchPin1, clockPin1, lpnPin, false); +} + + +void i2cScanner() +{ + for (byte address = 1; address < 127; address++ ) + { + Wire.beginTransmission(address); + if (Wire.endTransmission() == 0) + { + Serial.print("Device found at address 0x"); + if (address < 0x10) + Serial.print("0"); + Serial.println(address, HEX); + } + } + Serial.println(); + delay(wait_for_i2c); +} + +void blink_led_loop(void) +{ + do { + // Blink the led forever + digitalWrite(LedPin, HIGH); + delay(wait_for_i2c); + digitalWrite(LedPin, LOW); + } while (1); +} \ No newline at end of file diff --git a/Arduino/VL53L5CX_first_try_with_shiftand_one_sensor/VL53L5CX_first_try_with_shiftand_one_sensor.ino b/Arduino/VL53L5CX_first_try_with_shiftand_one_sensor/VL53L5CX_first_try_with_shiftand_one_sensor.ino new file mode 100644 index 0000000000000000000000000000000000000000..ac581e12dbfaae6aebb4b89afd52fb4f1926b378 --- /dev/null +++ b/Arduino/VL53L5CX_first_try_with_shiftand_one_sensor/VL53L5CX_first_try_with_shiftand_one_sensor.ino @@ -0,0 +1,52 @@ + +#include <Arduino.h> +#include <Wire.h> +#include <vl53l5cx_class.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <assert.h> +#include <stdlib.h> + + +#define DEV_I2C Wire + +#define SerialPort Serial + +#ifndef LED_BUILTIN + #define LED_BUILTIN 13 +#endif +#define LedPin LED_BUILTIN + +#define LPN_PIN 99 +#define I2C_RST_PIN 99 +#define PWREN_PIN 99 + +// Components. +VL53L5CX sensor_vl53l5cx_sat(&DEV_I2C, LPN_PIN, I2C_RST_PIN); + +void blink_led_loop(void); + +void blink_led_loop(void) +{ + do { + // Blink the led forever + digitalWrite(LedPin, HIGH); + delay(500); + digitalWrite(LedPin, LOW); + } while (1); +} + +/* Setup ---------------------------------------------------------------------*/ + +void setup() +{ + +} + +void loop() +{ + + +} diff --git a/Arduino/arduino-ide_2.3.4_Linux_64bit.AppImage b/Arduino/arduino-ide_2.3.4_Linux_64bit.AppImage new file mode 100755 index 0000000000000000000000000000000000000000..8e5553f19b12ca3cb3f96129bb3526bc788a06f0 Binary files /dev/null and b/Arduino/arduino-ide_2.3.4_Linux_64bit.AppImage differ diff --git a/Arduino/sketch_to_test_the_shift_register/sketch_to_test_the_shift_register.ino b/Arduino/sketch_to_test_the_shift_register/sketch_to_test_the_shift_register.ino new file mode 100644 index 0000000000000000000000000000000000000000..5b23df265ee6d7a308813835bdc19486f9c78418 --- /dev/null +++ b/Arduino/sketch_to_test_the_shift_register/sketch_to_test_the_shift_register.ino @@ -0,0 +1,56 @@ +uint16_t dataPin = 18; +uint16_t latchPin = 17; +uint16_t clockPin = 16; + +#define LPN_PIN0 0 +#define LPN_PIN1 1 +#define LPN_PIN2 2 +#define LPN_PIN3 3 + + +void setup() { + // put your setup code here, to run once: + delay(7000); + pinMode(dataPin, OUTPUT); + pinMode(latchPin, OUTPUT); + pinMode(clockPin, OUTPUT); + LPn(dataPin, latchPin, clockPin, 1, true); // Activate sensor I2C + Ranging(dataPin, latchPin, clockPin) +} + +void loop() { + // put your main code here, to run repeatedly: +} + +void LPn(uint16_t dataPin, uint16_t latchPin, uint16_t clockPin, uint16_t Pin, bool on) { + uint8_t Pin_byte1 = 0b00000000; // For pins 0-7 + uint8_t Pin_byte2 = 0b00000000; // For pins 8-15 + // Update the correct byte based on Pin + if (Pin <= 7) { + Pin_byte1 |= (on << Pin); // Set the corresponding bit in Pin_byte1 + } else if (Pin <= 15) { + Pin_byte2 |= (on << (Pin - 8)); // Set the corresponding bit in Pin_byte2 + } + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin, HIGH); +} + +void Ranging(uint16_t dataPin, uint16_t latchPin, uint16_t clockPin){ + uint8_t Pin_byte1 = 0b11111111; // For pins 0-7 + uint8_t Pin_byte2 = 0b11111111; // For pins 8-15 + // Update the correct byte based on Pin + + digitalWrite(latchPin, LOW); + + // Shift out the bits + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte2); // Send byte for pins 8-15 + shiftOut(dataPin, clockPin, MSBFIRST, Pin_byte1); // Send byte for pins 0-7 + + digitalWrite(latchPin, HIGH); + delay(200); +} \ No newline at end of file