1+ from maix import ext_dev , display , camera , pinmap , time , err , app
2+ import threading
3+
4+ ### MODE
5+ MODE_SHOW_PICTURE = 0
6+ MODE_SHOW_VIDEO = 1
7+
8+ # If you have high frame requirement,
9+ # please use cdk, refer to MaixCDK/example/maix_tmc2209_2axis_scan.
10+
11+ ### Change mode according to your needs
12+ MODE = MODE_SHOW_PICTURE
13+
14+ if __name__ == "__main__" :
15+
16+ if MODE == MODE_SHOW_PICTURE :
17+ print ("Mode: show picture" )
18+ elif MODE == MODE_SHOW_VIDEO :
19+ print ("Mode: show video" )
20+ else :
21+ print ("Error Mode: " , MODE )
22+ exit (- 1 )
23+
24+ cam = camera .Camera (512 , 320 )
25+ disp = display .Display ()
26+
27+ port = "/dev/ttyS1"
28+ uart_baudrate = 115200
29+
30+ uart_addr_x = 0x00
31+ step_angle_x = 18
32+ micro_step_x = 256
33+ screw_pitch_x = 3.0
34+ speed_x = 1.0
35+ dir_x = True
36+ start_x = 0
37+ stop_x = 20
38+ step_x = 3
39+
40+ uart_addr_y = 0x03
41+ step_angle_y = 18
42+ micro_step_y = 256
43+ screw_pitch_y = 3.0
44+ speed_y = 1.0
45+ dir_y = False
46+ start_y = 0
47+ stop_y = 15
48+ step_y = 3
49+
50+ if pinmap .set_pin_function ("A19" , "UART1_TX" ) != err .Err .ERR_NONE :
51+ print ("pinmap error!" )
52+ exit (- 1 )
53+ if pinmap .set_pin_function ("A18" , "UART1_RX" ) != err .Err .ERR_NONE :
54+ print ("pinmap error!" )
55+ exit (- 1 )
56+
57+ slide_x = ext_dev .tmc2209 .ScrewSlide (
58+ port ,
59+ uart_addr_x ,
60+ uart_baudrate ,
61+ step_angle_x ,
62+ micro_step_x ,
63+ screw_pitch_x ,
64+ speed_x
65+ )
66+
67+ slide_y = ext_dev .tmc2209 .ScrewSlide (
68+ port ,
69+ uart_addr_y ,
70+ uart_baudrate ,
71+ step_angle_y ,
72+ micro_step_y ,
73+ screw_pitch_y ,
74+ speed_y
75+ )
76+
77+ need_exit = False
78+
79+ def one_step_callback ():
80+ global need_exit , cam , disp
81+ img = cam .read ()
82+ disp .show (img )
83+ return need_exit
84+
85+ def thread_func ():
86+ while not app .need_exit ():
87+ if one_step_callback ():
88+ break
89+
90+
91+ if MODE == MODE_SHOW_VIDEO :
92+ th = threading .Thread (target = thread_func )
93+ th .daemon = True
94+ th .start ()
95+
96+ current_x = start_x if dir_x else stop_x
97+ current_y = start_y if dir_y else stop_y
98+
99+ dir_x_ = dir_x
100+
101+ for i in range (0 , (stop_y - start_y )// step_y + 1 ):
102+ target_move_y = step_y if i != 0 else 0
103+ target_move_y = target_move_y if dir_y else - target_move_y
104+ slide_y .move (target_move_y )
105+ current_y = current_y + step_y if dir_y else current_y - step_y
106+
107+ for j in range (0 , (stop_x - start_x )// 2 ):
108+ target_move_x = step_x if dir_x_ else - step_x
109+ slide_x .move (target_move_x )
110+ current_x += target_move_x
111+ if MODE == MODE_SHOW_PICTURE :
112+ one_step_callback ()
113+ if app .need_exit ():
114+ break
115+
116+ dir_x_ = False if dir_x_ else True
117+ if app .need_exit ():
118+ break
119+
120+ need_exit = True
121+
122+ time .sleep (3 )
0 commit comments