# Tutorial

First, make sure that NXT-Python is installed correctly, see Installation.

This is not a Python tutorial, you must know how to program using Python to use NXT-Python.

First step when writing a NXT-Python script is to find the brick. This is the role of the `nxt.locator.find()` function:

    #!/usr/bin/python3
    """NXT-Python tutorial: find the brick."""
    import nxt.locator

    # Find a brick.
    with nxt.locator.find() as b:
        # Once found, print its name.
        print("Found brick:", b.get_device_info()[0])
        # And play a recognizable note.
        b.play_tone(440, 250)

Once the brick is found, the `nxt.locator.find()` function returns an object to interact with it: the `Brick` object. Here the script query device information and play a tone.

Now something a little bit more interesting, plug a motor on the port A and try the following script:

    #!/usr/bin/python3
    """NXT-Python tutorial: turn a motor."""
    import nxt.locator
    import nxt.motor

    with nxt.locator.find() as b:
        # Get the motor connected to the port A.
        mymotor = b.get_motor(nxt.motor.Port.A)
        # Full circle in one direction.
        mymotor.turn(25, 360)
        # Full circle in the opposite direction.
        mymotor.turn(-25, 360)

Try changing the parameters and see what happen. You can of course drive several motors, just use the `get_motor()` function for each one.

You can also get information from sensors:

    #!/usr/bin/python3
    """NXT-Python tutorial: use ultra-sonic sensor."""
    import time

    import nxt.locator
    import nxt.sensor

    # Need to import generic sensors for auto-detection to work.
    import nxt.sensor.generic

    with nxt.locator.find() as b:
        # Find the sensor connected to port 4.
        mysensor = b.get_sensor(nxt.sensor.Port.S4)
        # Read the sensor in a loop (until interrupted).
        print("Use Ctrl-C to interrupt")
        while True:
            distance_cm = mysensor.get_sample()
            print(distance_cm)
            time.sleep(0.5)

Digital sensors can be automatically detected as long as the corresponding module is loaded. In the retail set, only the ultra-sound distance sensor is digital, all the other sensors are analog. When using an analog sensor, you must give the sensor class explicitly:

    #!/usr/bin/python3
    """NXT-Python tutorial: use touch sensor."""
    import time

    import nxt.locator
    import nxt.sensor
    import nxt.sensor.generic

    with nxt.locator.find() as b:
        # Get the sensor connected to port 1, not a digital sensor, must give the sensor
        # class.
        mysensor = b.get_sensor(nxt.sensor.Port.S1, nxt.sensor.generic.Touch)
        # Read the sensor in a loop (until interrupted).
        print("Use Ctrl-C to interrupt")
        while True:
            value = mysensor.get_sample()
            print(value)
            time.sleep(0.5)

If you run into problems, you can increase the log level. NXT-Python is using the `logging` module from the standard Python distribution. Try this script:

    #!/usr/bin/python3
    """NXT-Python tutorial: increase log level."""
    import logging

    import nxt.locator

    # Increase the log level, must be done before using any NXT-Python function. See logging
    # documentation for details.
    logging.basicConfig(level=logging.DEBUG)

    with nxt.locator.find() as b:
        b.play_tone(440, 250)

You should now have enough information to start playing with NXT-Python. See the API Reference, or the Tips and Tricks pages for more informations.