diff --git a/loop/SARA_send_data_v2.py b/loop/SARA_send_data_v2.py index 57d826e..6d093b6 100755 --- a/loop/SARA_send_data_v2.py +++ b/loop/SARA_send_data_v2.py @@ -97,7 +97,6 @@ import os import traceback import sys import sqlite3 -import RPi.GPIO as GPIO from threading import Thread from datetime import datetime @@ -130,31 +129,7 @@ uSpot_profile_id = 1 conn = sqlite3.connect("/var/www/moduleair_pro_4g/sqlite/sensors.db") cursor = conn.cursor() -def blink_led(pin, blink_count, delay=1): - """ - Blink an LED on a specified GPIO pin. - Args: - pin (int): GPIO pin number (BCM mode) to which the LED is connected. - blink_count (int): Number of times the LED should blink. - delay (float): Time in seconds for the LED to stay ON or OFF (default is 1 second). - """ - # GPIO setup - GPIO.setwarnings(False) - GPIO.setmode(GPIO.BCM) # Use BCM numbering - GPIO.setup(pin, GPIO.OUT) # Set the specified pin as an output - - try: - for _ in range(blink_count): - GPIO.output(pin, GPIO.HIGH) # Turn the LED on - #print(f"LED on GPIO {pin} is ON") - time.sleep(delay) # Wait for the specified delay - GPIO.output(pin, GPIO.LOW) # Turn the LED off - #print(f"LED on GPIO {pin} is OFF") - time.sleep(delay) # Wait for the specified delay - finally: - GPIO.cleanup(pin) # Clean up the specific pin to reset its state - print(f"GPIO {pin} cleaned up") #get config data from SQLite table def load_config_sqlite(): @@ -758,9 +733,6 @@ try: print("Operation not allowed. This may require a different configuration.") # Actions spécifiques pour ce type d'erreur - # Clignotement LED rouge en cas d'erreur - led_thread = Thread(target=blink_led, args=(24, 5, 0.5)) - led_thread.start() else: # 2.Si la réponse contient une réponse HTTP valide @@ -775,10 +747,7 @@ try: print("*****") print('ATTENTION: HTTP operation failed') print("*****") - print("Blink red LED") - # Run LED blinking in a separate thread - led_thread = Thread(target=blink_led, args=(24, 5, 0.5)) - led_thread.start() + # Get error code print("Getting error code (11->Server connection error, 73->Secure socket connect error)") @@ -820,9 +789,7 @@ try: else: # Si la commande HTTP a réussi print('✅✅HTTP operation successful.') - print("Blink blue LED") - led_thread = Thread(target=blink_led, args=(23, 5, 0.5)) - led_thread.start() + #4. Read reply from server print("Reply from server:") @@ -906,10 +873,7 @@ try: #on a peut etre une ERROR de type "+CME ERROR: No connection to phone" else: print('No UUHTTPCR response') - print("Blink red LED") - # Run LED blinking in a separate thread - led_thread = Thread(target=blink_led, args=(24, 5, 0.5)) - led_thread.start() + #Vérification de l'erreur print("Getting type of error") # Split the response into lines and search for "+CME ERROR:" diff --git a/matrix/test_forms_infinite b/matrix/test_forms_infinite new file mode 100644 index 0000000..f8154cc Binary files /dev/null and b/matrix/test_forms_infinite differ diff --git a/matrix/test_forms_infinite.cc b/matrix/test_forms_infinite.cc new file mode 100644 index 0000000..234a3f3 --- /dev/null +++ b/matrix/test_forms_infinite.cc @@ -0,0 +1,136 @@ +/* + + __ __ _ _____ ____ _____ __ + | \/ | / \|_ _| _ \|_ _\ \/ / + | |\/| | / _ \ | | | |_) || | \ / + | | | |/ ___ \| | | _ < | | / \ + |_| |_/_/ \_\_| |_| \_\___/_/\_\ + + +Script to display a simple square on the matrix LED + +Pour compiler: +g++ -Iinclude -Llib test_forms_infinite.cc -o test_forms_infinite -lrgbmatrix + +Pour le lancer: +sudo /var/www/moduleair_pro_4g/matrix/test_forms_infinite +*/ + +#include "led-matrix.h" +#include "graphics.h" +#include +#include +#include +#include // For rand() +#include // For time() + +using rgb_matrix::RGBMatrix; +using rgb_matrix::Canvas; +using rgb_matrix::Color; + +// Global flag that can be used to exit the loop +volatile bool running = true; + +// Signal handler to catch Ctrl+C +static void InterruptHandler(int signo) { + running = false; +} + +int main(int argc, char *argv[]) { + RGBMatrix::Options defaults; + + defaults.hardware_mapping = "moduleair_pinout"; + defaults.rows = 64; + defaults.cols = 128; + defaults.chain_length = 1; + defaults.parallel = 1; + defaults.row_address_type = 3; + defaults.show_refresh_rate = true; + defaults.brightness = 100; + defaults.pwm_bits = 1; + defaults.panel_type = "FM6126A"; + defaults.disable_hardware_pulsing = false; + + // Set up signal handler for clean exit + signal(SIGTERM, InterruptHandler); + signal(SIGINT, InterruptHandler); + + // Seed the random number generator + srand(time(NULL)); + + Canvas *canvas = RGBMatrix::CreateFromFlags(&argc, &argv, &defaults); + if (canvas == NULL) + return 1; + + // Get canvas dimensions for position constraints + int canvas_width = canvas->width(); + int canvas_height = canvas->height(); + + // Square properties + int square_size = 8; // Size of the square (8x8) + int current_x = 10; // Initial X position + int current_y = 10; // Initial Y position + + // Create an array of colors to cycle through + std::vector colors = { + Color(255, 0, 0), // Red + Color(0, 255, 0), // Green + Color(0, 0, 255), // Blue + Color(255, 255, 0), // Yellow + Color(0, 255, 255), // Cyan + Color(255, 0, 255), // Magenta + Color(255, 255, 255), // White + Color(255, 127, 0), // Orange + Color(127, 0, 255) // Purple + }; + + int color_index = 0; + time_t last_change = time(NULL); + + // Draw initial square + Color current_color = colors[color_index]; + for (int x = current_x; x < current_x + square_size; ++x) { + for (int y = current_y; y < current_y + square_size; ++y) { + canvas->SetPixel(x, y, current_color.r, current_color.g, current_color.b); + } + } + + // Run indefinitely until interrupted + while (running) { + // Check if it's time to change color and position (every 2 seconds) + time_t now = time(NULL); + if (now - last_change >= 2) { + // Clear the previous square + for (int x = current_x; x < current_x + square_size; ++x) { + for (int y = current_y; y < current_y + square_size; ++y) { + canvas->SetPixel(x, y, 0, 0, 0); // Clear to black + } + } + + // Move to the next color + color_index = (color_index + 1) % colors.size(); + current_color = colors[color_index]; + + // Generate new random position, ensuring the square stays fully on screen + current_x = rand() % (canvas_width - square_size); + current_y = rand() % (canvas_height - square_size); + + // Draw the square with the new color at the new position + for (int x = current_x; x < current_x + square_size; ++x) { + for (int y = current_y; y < current_y + square_size; ++y) { + canvas->SetPixel(x, y, current_color.r, current_color.g, current_color.b); + } + } + + last_change = now; + } + + // Small sleep to prevent using 100% CPU + usleep(100000); // 100ms sleep + } + + // Clean up when interrupted + canvas->Clear(); + delete canvas; + return 0; +} \ No newline at end of file