
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.robotika.sk/robowiki/index.php?action=history&amp;feed=atom&amp;title=Tutorial_-_Code</id>
		<title>Tutorial - Code - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.robotika.sk/robowiki/index.php?action=history&amp;feed=atom&amp;title=Tutorial_-_Code"/>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;action=history"/>
		<updated>2026-05-05T02:09:03Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11321&amp;oldid=prev</id>
		<title>Robot at 08:08, 8 June 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11321&amp;oldid=prev"/>
				<updated>2024-06-08T08:08:37Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 08:08, 8 June 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l99&quot; &gt;Line 99:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 99:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; print(colorSensor.get_color())&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; print(colorSensor.get_color())&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; time.sleep(2)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; time.sleep(2)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; colorSensor.wait_until_color(&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Red&lt;/del&gt;&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; colorSensor.wait_until_color(&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;red&lt;/ins&gt;&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; print(&amp;quot;Red color detected. Continue...&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; print(&amp;quot;Red color detected. Continue...&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; colorSensor.wait_for_new_color()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; colorSensor.wait_for_new_color()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Robot</name></author>	</entry>

	<entry>
		<id>https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11294&amp;oldid=prev</id>
		<title>Robot at 10:04, 6 June 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11294&amp;oldid=prev"/>
				<updated>2024-06-06T10:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:04, 6 June 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Return back to project page: [[Spike Prime - &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Line Following Car &lt;/del&gt;- Jakub Vojtek| &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Line Following Car &lt;/del&gt;- Jakub Vojtek]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Return back to project page: [[Spike Prime - &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Tutorial &lt;/ins&gt;- Jakub Vojtek| &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Tutorial &lt;/ins&gt;- Jakub Vojtek]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Python code for the Line Following Car project:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Python code for the Line Following Car project:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Robot</name></author>	</entry>

	<entry>
		<id>https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11293&amp;oldid=prev</id>
		<title>Robot: Created page with &quot;Return back to project page:  Line Following Car - Jakub Vojtek  Python code for the Line Following Car project: &lt;syntaxhig...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=Tutorial_-_Code&amp;diff=11293&amp;oldid=prev"/>
				<updated>2024-06-06T10:03:56Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Return back to project page: &lt;a href=&quot;/robowiki/index.php?title=Spike_Prime_-_Line_Following_Car_-_Jakub_Vojtek&quot; title=&quot;Spike Prime - Line Following Car - Jakub Vojtek&quot;&gt; Line Following Car - Jakub Vojtek&lt;/a&gt;  Python code for the Line Following Car project: &amp;lt;syntaxhig...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Return back to project page: [[Spike Prime - Line Following Car - Jakub Vojtek| Line Following Car - Jakub Vojtek]]&lt;br /&gt;
&lt;br /&gt;
Python code for the Line Following Car project:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt; &lt;br /&gt;
&lt;br /&gt;
# All of buildhat documentation (source): https://buildhat.readthedocs.io/en/latest/hub_index.html&lt;br /&gt;
&lt;br /&gt;
from buildhat import Motor, MotorPair, DistanceSensor, ColorSensor, ForceSensor&lt;br /&gt;
import time&lt;br /&gt;
import cv2&lt;br /&gt;
import pygame&lt;br /&gt;
from pynput import keyboard as kb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Comment out motor or motorPair you cant run both because we don't have enough ports (add arguments from your ports)&lt;br /&gt;
motor = Motor('A')&lt;br /&gt;
motorPair = MotorPair('A', 'B')&lt;br /&gt;
distanceSensor = DistanceSensor('B')&lt;br /&gt;
colorSensor = ColorSensor('C')&lt;br /&gt;
forceSensor = ForceSensor('D')&lt;br /&gt;
&lt;br /&gt;
# camera setup&lt;br /&gt;
cam_width = 480&lt;br /&gt;
cam_height = 360&lt;br /&gt;
camera = cv2.VideoCapture(0)&lt;br /&gt;
camera.set(cv2.CAP_PROP_FRAME_WIDTH, cam_width)&lt;br /&gt;
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, cam_height)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Motor starts and runs until turned off&lt;br /&gt;
def run_infinite_motor():&lt;br /&gt;
    motor.start(30)&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    motor.start(-30)&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    motor.stop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Run motor for specific time or angle&lt;br /&gt;
def run_motor():&lt;br /&gt;
    motor.run_for_degrees(180, blocking=True)  # blocking= True/False determines if rest of the code should wait until motor movement stopped&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motor.run_for_degrees(-180)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motor.run_for_seconds(1)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motor.run_to_position(0)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motor.run_for_rotations(1)  # == motor.run_for_degrees(360)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# MotorPair starts and runs until turned off&lt;br /&gt;
def run_infinite_motorPair():&lt;br /&gt;
    motorPair.start(30, 30)&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    motorPair.stop()&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    motorPair.start(-30, 30)&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    motorPair.stop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Run motorPair for specific time or angle&lt;br /&gt;
def run_motorPair():&lt;br /&gt;
    motorPair.run_for_degrees(180)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motorPair.run_for_degrees(-180)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motorPair.run_for_seconds(1)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motorPair.run_to_position(0, 0)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    motorPair.run_for_rotations(1)  # == motorPair.run_for_degrees(360)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distance_functions():&lt;br /&gt;
    distanceSensor.wait_for_in_range(50)&lt;br /&gt;
    motor.run_for_rotations(1)&lt;br /&gt;
&lt;br /&gt;
    distanceSensor.wait_for_out_of_range(100)&lt;br /&gt;
    motor.run_for_rotations(2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def handle_in(distance):&lt;br /&gt;
    motor.run_for_rotations(1)&lt;br /&gt;
    print(&amp;quot;in range&amp;quot;, distance)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def handle_out(distance):&lt;br /&gt;
    motor.run_for_rotations(-1)&lt;br /&gt;
    print(&amp;quot;out of range&amp;quot;, distance)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
distanceSensor.when_in_range = handle_in&lt;br /&gt;
distanceSensor.when_out_of_range = handle_out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def color_functions():&lt;br /&gt;
    print(colorSensor.get_color())&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    colorSensor.wait_until_color(&amp;quot;Red&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Red color detected. Continue...&amp;quot;)&lt;br /&gt;
    colorSensor.wait_for_new_color()&lt;br /&gt;
    print(&amp;quot;New color detected. Continue...&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Value of reflected light: &amp;quot;, colorSensor.get_reflected_light())&lt;br /&gt;
    print(&amp;quot;Value of ambient light: &amp;quot;, colorSensor.get_ambient_light())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def force_functions():&lt;br /&gt;
    print(forceSensor.get_force())   # use in while loop to see how the force changes&lt;br /&gt;
    print(forceSensor.get_peak_force())  # highest force detected&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    print(forceSensor.is_pressed())  # True/False&lt;br /&gt;
    time.sleep(2)&lt;br /&gt;
    forceSensor.wait_until_pressed()&lt;br /&gt;
    print(&amp;quot;Force detected. Continue...&amp;quot;)&lt;br /&gt;
    forceSensor.wait_until_released()&lt;br /&gt;
    print(&amp;quot;Force released. Continue...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def handle_pressed(force):&lt;br /&gt;
    motor.run_for_rotations(1)&lt;br /&gt;
    print(&amp;quot;pressed: &amp;quot;, force)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def handle_released(force):&lt;br /&gt;
    motor.run_for_rotations(-1)&lt;br /&gt;
    print(&amp;quot;released: &amp;quot;, force)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
forceSensor.when_pressed = handle_pressed&lt;br /&gt;
forceSensor.when_released = handle_released&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Show camera feed&lt;br /&gt;
def generate_feed():&lt;br /&gt;
    while True:&lt;br /&gt;
        ret, frame = camera.read()&lt;br /&gt;
        if not ret:&lt;br /&gt;
            break&lt;br /&gt;
        cv2.imshow('frame', frame)&lt;br /&gt;
&lt;br /&gt;
        # Exit if 'q' is pressed&lt;br /&gt;
        if cv2.waitKey(1) &amp;amp; 0xFF == ord('q'):&lt;br /&gt;
            break&lt;br /&gt;
    camera.release()&lt;br /&gt;
    cv2.destroyAllWindows()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Show pygame window&lt;br /&gt;
def pygame_window():&lt;br /&gt;
    pygame.init()&lt;br /&gt;
    pygame.display.set_caption('PyGame Window')&lt;br /&gt;
    screen = pygame.display.set_mode((800, 600))&lt;br /&gt;
    running = True&lt;br /&gt;
&lt;br /&gt;
    while running:&lt;br /&gt;
        for event in pygame.event.get():&lt;br /&gt;
            if event.type == pygame.QUIT:  # close the window [X]&lt;br /&gt;
                running = False&lt;br /&gt;
                print(&amp;quot;Closing pygame window&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    pygame.quit()&lt;br /&gt;
&lt;br /&gt;
# keyboard controls&lt;br /&gt;
def on_press(key):&lt;br /&gt;
    if key == kb.Key.left:&lt;br /&gt;
        print(&amp;quot;left&amp;quot;)&lt;br /&gt;
    elif key == kb.Key.right:&lt;br /&gt;
        print(&amp;quot;right&amp;quot;)&lt;br /&gt;
    elif key == kb.Key.up:&lt;br /&gt;
        print(&amp;quot;up&amp;quot;)&lt;br /&gt;
    elif key == kb.Key.down:&lt;br /&gt;
        print(&amp;quot;down&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
listener = kb.Listener(on_press=on_press)&lt;br /&gt;
listener.start()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    pygame_window()&lt;br /&gt;
    generate_feed()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robot</name></author>	</entry>

	</feed>