![]() |
cho em hỏi về mạch và lập trình cho pic 16F877A
1.các anh cho em hỏi em muốn tạo các nút ấn chọn sân và reset thì phải mắc mạch và viết code như thế nào ạ.
2.em viết một chương trìnnh con để rẽ trái cho robot dùng 6 led cảm biến từ 1 đến 6, không phụ thuộc led 0 và led 7 như sau có đúng không void turn_left() { do { motor_left_stop(); motor_right_forward(); }while(0bx000000x||0bx100000x||0bx110000x||0bx0110 00x); |
xin lỗi, bạn cho mình hỏi 1 câu hơi ngu. bạn viết cái này có biên dịch được không? chạy thì chạy như thế nào?
|
Trích:
chương trình để điều khiển cho robot rẽ trái. tớ dùng 8 con led dò đường cho dữ liệu vào cổng D. tớ dùng 6 con từ 1>6 để thực hiện việc dò đường và quay. còn 2 con 0 và 7 làm việc khác. thì t viết đoạn chương trình như vậy có được ko. bạn biết làm thế nào thì chỉ giùm tớ void turn_left() { switch (SENSOR) { case 0bx001100x: sang_trai(); break; case 0bx000110x: sang_trai(); break; case 0bx000011x: sang_trai(); break; case 0bx000001x: sang_trai(); break; case 0bx000000x: sang_trai(); break; case 0bx100000x: sang_trai(); break; case 0bx110000x: sang_trai(); break; case 0bx011000x: di_thang(); break; } } |
tớ cũng chẳng biết cái chương trình con bạn viết thế nào, nhìn vào cái này thấy có chút vấn đề chỗ 2 biến x đầu và x cuối của portb, mình share cho bạn tài liệu này, mình mong là nó có ích
|
1 Attachment(s)
ớ, quên, hì hì, tài liệu đây
|
ừ. thanks bạn cái này tớ cũng có rồi. tớ đọc cái tài liệu này xong tớ viết cái đó. ý của tớ là khi không cần quan tâm tới cái rb0 với rb7 thì viết vậy có được không. mà bạn có cách nào hay chỉ tớ cái
|
à cho tớ hỏi về cái tài liệu bạn gửi đó sao đầu vào cảm biến là portD sao trong chương trình lại viết
/* CHƯƠNG TRÌNH CHÍNH */ void main () { TRISC=0x00; // PORTC là ngõ ra ( động cơ) TRISD=0x00; // PORTD là ngõ vào (cảm biến quang) PORTC=0x00; // Khởi tạo giá trị ban đầu 0x00 cho PORTC while(1) { switch (SENSOR) { case 0b00011000: forward(); break; case 0b00001100: turn_left(); break; case 0b00000110: turn_left(); break; case 0b00000011: turn_left(); break; case 0b00000001: turn_left(); break; case 0b00110000: turn_right(); break; case 0b01100000: turn_right(); break; case 0b11000000: turn_right(); break; case 0b10000000: turn_right(); break; }} } |
Trích:
viết vầy gọn hơn while(1) { if( SENSOR == 24 ) { forward() ; } else { if( SENSOR < 24 ) { turn_left(); } else { turn_right(); } } } |
Trích:
|
bạn à, nếu ngõ vào cảm vào biến thì trisd = 0xff, thứ hai nữa : chẵn hạn khi lệch trái nhiều 00000001 và lệch trái nhẹ hơn là 00000100 thì turnright ở 2 trường hợp này tốc độ của bánh trái sẽ khác nhau.
|
Trích:
|
thế này nhé khi đến ngã tư cần rẽ trái(giả sử bit6=bên trái), cho bánh phải quay thuận ,bánh trái quay ngược đồng thời bit6 đi qua vạch( đèn cảm biến của bạn sẽ sáng rồi tắt) dùng While(bit6==1) chờ nó tắt, cho 2 bánh dừng, thế thôi.
|
Trích:
|
thanks mọi người. có gì khúc mắc hôm sau tớ hỏi mọi người tiếp
|
Múi giờ GMT. Hiện tại là 06:39 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam