Action - Reaction

The LED toggle application with a button is the most used project for simple input/output project example. This project allows the user to control the RGB LED Module with the Button Module by simply toggling an LED.

About Tools and Materials:

SMD Red (Purchase Here)

SMD USB Gateway (Purchase Here)

Arduino Gateway Module (Purchase Here)

RGB LED Module (Purchase Here)

Button Module (Purchase Here)

Step 1: Hardware & Software Overview

Project Key Components

  1. SMD

    The SMD acts as a bridge between the script and the modules. It is responsible for interpreting the commands sent by the script and translating them into actions that read input from the button module and toggle the RGB LED Module.

  2. RGB LED Module

    The RGB LED Module is designed to emit different colors, allowing users to experiment with different lighting effects.

  3. Button Module

    The Button Module is the physical interface for receiving input from the user. The input can be used to trigger the script in an encoded way.

  4. SMD Libraries

    The SMD library is at the heart of the application. It communicates with the SMD using a specific communication protocol, sending commands to read the Button Module and toggle the LED on the RGB LED Module.

Project Key Features

  • A Basic Physical Interaction

    The application supports a toggle functionality, allowing the user to press the button to toggle the LED. This provides a simple physical interaction with project.

  • Visualizing the Input

    The RGB LED Module serves as a visual indicator of the current state of the Button Module. When the button is pressed, the LED turns on; when the button is not pressed, the LED turns off.

Step 2: Assemble

Getting Started

  1. Hardware Setup

Project Wiring Diagram

Step 3: Run & Test

  1. Run the Script

    • Run the script on your computer. This will establish communication with the SMD and initiate control of the Button Module and RGB LED Module.

  2. Toggle LED State

    • Press the button on the Button Module to toggle the RGB LED. Observe the visual feedback of the LED.

Codes

from serial.tools.list_ports import comports
from platform import system
from smd.red import *

baudrate = 115200       # Baud rate of communication
ID = 0                  # ID of the SMD
rgb_module_id = 5       # ID of the RGB LED module
button_module_id = 5    # ID of the button module


def USB_Port():
    """
    Scans and identifies a compatible USB port for the current operating system.

    Returns:
        str: The detected USB port or None if no suitable port is found.
    """
    # Get a list of available ports
    ports = list(comports())
    
    # Known USB port names for different operating systems
    usb_names = {
        "Windows": ["USB Serial Port"],  # Names specific to Windows
        "Linux": ["/dev/ttyUSB"],        # Names specific to Linux
        "Darwin": [                      # Names specific to macOS
            "/dev/tty.usbserial",
            "/dev/tty.usbmodem",
            "/dev/tty.SLAB_USBtoUART",
            "/dev/tty.wchusbserial",
            "/dev/cu.usbserial",
        ]
    }

    # Detect the operating system
    os_name = system()
    print(f"Operating System: {os_name}")

    if ports:
        for port, desc, hwid in sorted(ports):
            # Check if the port matches any known USB names
            if any(name in port or name in desc for name in usb_names.get(os_name, [])):
                print(f"USB device detected on port: {port}")
                return port  # Return the first matching port
        # If no suitable port is found, print the list of available ports
        print("No suitable USB device found. Available ports:")
        for port, desc, hwid in ports:
            print(f"Port: {port}, Description: {desc}, HWID: {hwid}")
    else:
        print("No ports detected!")
    return None


try:
    # Find a valid serial port
    SerialPort = USB_Port()
    if not SerialPort:
        raise Exception("No compatible USB port found. Please check your connection.")

    print(f"Using serial port: {SerialPort}")

    # Initialize the SMD module
    master = Master(SerialPort, baudrate)       # Defines the USB gateway module
    master.attach(Red(ID))                      # Gives access to the SMD of specified ID
    master.scan_modules(ID)                     # Scans and identifies the modules connected to the SMD

    # Main loop
    while True:
        # Get the button state from the SMD
        button_state = master.get_button(ID, button_module_id)

        if button_state == 1:
            # Set the RGB LED to red
            master.set_rgb(ID, rgb_module_id, 255, 0, 0)  # RGB values for red
        else:
            # Turn off the RGB LED
            master.set_rgb(ID, rgb_module_id, 0, 0, 0)    # RGB values for off

except Exception as e:
    print(f"Error: {e}")

Last updated