Mục lục:
- Bước 1: Xác định địa chỉ đăng ký
- Bước 2: Mảng và biến tổng thể
- Bước 3: Hàm "serial.begin"
- Bước 4: Chức năng "serial.available"
- Bước 5: Hàm "serial.read"
- Bước 6: Hàm "serial.write"
- Bước 7: Chức năng thiết lập
- Bước 8: Chức năng Vòng lặp và ISR
- Bước 9: Đấu dây
- Bước 10: Kết hợp tất cả lại với nhau
Video: Arduino Tone Generator Không có Thư viện hoặc Chức năng Nối tiếp (Có ngắt): 10 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Đây không phải là thứ mà tôi thường đưa ra để hướng dẫn, tôi thích đồ kim loại của mình hơn, nhưng vì tôi là một sinh viên kỹ thuật điện và phải tham gia một lớp học về vi điều khiển (Thiết kế hệ thống nhúng), tôi nghĩ rằng tôi sẽ làm cho một trong những dự án của tôi. Khi tôi thực hiện dự án ban đầu và những người khác cho lớp này, tôi nhận thấy rằng có rất ít hoặc không có hướng dẫn nào không sử dụng các hàm thư viện arduino hoặc các hàm nối tiếp, đó là một lý do khác mà tôi nghĩ rằng đây sẽ là một tài liệu hướng dẫn tốt.
Mã này được thiết kế cho vi điều khiển Atmega 2560, vì vậy nếu bạn muốn triển khai nó trên một bo mạch khác, bạn sẽ cần thay đổi các đăng ký địa chỉ trong mã dựa trên hướng dẫn sử dụng bộ điều khiển của bạn. Ý tưởng cơ bản đằng sau mã là bất cứ khi nào bạn nhập một phím trên bàn phím vào màn hình nối tiếp, arduino mega sẽ xuất ra một tần số nhất định dựa trên phím bạn nhấn, với "q" đặt lại nó. Tôi đã làm cho nó "a" sẽ xuất ra A tần số phẳng và "A" sẽ xuất ra A tần số nhọn, "b" xuất ra B phẳng, "c" cho C phẳng, "C" cho C sắc nét, v.v. Mã đầy đủ được tải lên ở cuối, nhưng mỗi bước sẽ chia mã thành nhiều phần để dễ giải thích hơn.
Bước 1: Xác định địa chỉ đăng ký
Bước này rất dễ dàng, nếu bạn đang sử dụng atmega 2560, bạn chỉ cần sử dụng các địa chỉ tôi đã sử dụng, mặc dù nếu bạn sử dụng bảng có chip khác, bạn sẽ cần tìm địa chỉ cho từng thanh ghi này trên hướng dẫn sử dụng chip. Các định nghĩa ở trên cùng chỉ là các hằng số sẽ được sử dụng cho các hàm của chúng ta sau này. Chúng tôi chỉ định các địa chỉ là không dấu dễ bay hơi vì chúng tôi không muốn trình biên dịch gây rối với chúng.
Bước 2: Mảng và biến tổng thể
Ở đây chúng tôi muốn xác định mảng Tần số sẽ chứa tất cả các tần số mà mỗi khóa sẽ xuất ra. Các giá trị này được tính toán từ các tần số nốt nhạc thực tế và thành thật mà nói, tôi đã quên cách tôi lấy chúng, nhưng chúng là các giá trị phù hợp khi tôi kiểm tra chúng trên máy hiện sóng để đảm bảo. Chúng tôi cũng đang xác định mảng ghi chú chứa tất cả các phím để nhấn cho mỗi giai điệu, cũng như các biến chúng tôi cần cho các chức năng sau này của chúng tôi.
Bước 3: Hàm "serial.begin"
Chúng tôi sẽ gọi hàm tùy chỉnh của chúng tôi sao chép hàm "serial.begin" là U0init (). Nó lấy baudrate mong muốn làm đầu vào và khởi động cổng nối tiếp tại baudrate đó.
Bước 4: Chức năng "serial.available"
Chúng tôi sẽ gọi hàm bắt chước "serial.available" U0kbhit (). Nó không nhận đầu vào mà thay vào đó sẽ phát hiện xem có thay đổi nào được thực hiện trên bàn phím hay không bằng cách sử dụng bit trạng thái RDA và trả về true khi phát hiện thấy thay đổi.
Bước 5: Hàm "serial.read"
Chúng ta sẽ gọi hàm bắt chước hàm "serial.read" là U0getchar (), hàm này không cần nhập và xuất bất kỳ thay đổi nào được thực hiện trên bàn phím, được lưu trữ trong thanh ghi UDR0.
Bước 6: Hàm "serial.write"
Chúng tôi sẽ gọi hàm bắt chước "serial.write" U0putchar (), lấy dữ liệu từ thanh ghi UDR0 trong khi một thay đổi được phát hiện và lưu trữ, và xuất ra thay đổi đó trở lại màn hình nối tiếp.
Bước 7: Chức năng thiết lập
Đây là chức năng thiết lập cơ bản sẽ sử dụng bắt chước "serial.begin" của chúng tôi để khởi tạo cổng nối tiếp và sẽ khởi tạo cài đặt bit của chúng tôi cho các thanh ghi hẹn giờ và đặt PB6 để xuất âm của chúng tôi.
Bước 8: Chức năng Vòng lặp và ISR
Vòng lặp hoạt động như vậy: nếu một thay đổi được phát hiện bằng hàm "serial.available" của chúng tôi, hàm "serial.read" của chúng tôi sẽ lưu trữ thay đổi đó và hàm "serial.write" của chúng tôi sẽ đặt thay đổi đó vào màn hình nối tiếp. Miễn là một biến i nhỏ hơn kích thước của mảng tần số, nó sẽ đặt đầu ra là vị trí của i trong mảng đó, xuất ra tần số tại vị trí đó. ISR hoạt động như một thiết lập lại, trong đó nếu vị trí mảng tần số không bằng 0 (nói cách khác nếu "q" không được nhấn), nó sẽ xuất ra tần số, nhưng khi nhấn "q", nó sẽ được đặt lại. mã này sử dụng ngắt, nhưng nó có thể được thực hiện với ngắt bị vô hiệu hóa. Tôi sẽ đăng mã mà không bị gián đoạn nếu tôi nhận được bất kỳ yêu cầu nào cho nó, tôi chỉ nghĩ rằng phiên bản ngắt sẽ thú vị hơn.
Bước 9: Đấu dây
Việc đấu dây cho mã này cực kỳ dễ dàng, chỉ cần đặt một dây đầu ra từ PB6 đến một breadboard, kết nối bộ rung hoặc loa nối tiếp với đó và kết nối nó trở lại mặt đất. Lưu ý: nếu bạn sử dụng loa, hãy đặt một điện trở nhỏ vào trước loa. Nếu bạn chỉ muốn xem đầu ra nhưng không nghe thấy nó, chỉ cần kết nối PB6 với dây dẫn màu đỏ của máy hiện sóng và dây dẫn màu đen với đất.
Bước 10: Kết hợp tất cả lại với nhau
Tôi đã thêm mã đầy đủ vào bước này, vì tôi đã giải thích tất cả các phần của nó trong các bước trước. Nó chỉ cần một đầu vào bàn phím cho các tần số khác nhau và xuất tần số đó ra PB6. Hy vọng bạn thích đọc một cách khác để viết mã với IDE!
Ngoài ra, hãy bình chọn cho điều này trong cuộc thi Vi điều khiển: D
Đề xuất:
Tự làm Bộ phân phối nước rửa tay không tiếp xúc mà không cần Arduino hoặc vi điều khiển: 17 bước (có hình ảnh)
DIY Máy rửa tay không tiếp xúc Không cần Arduino hoặc Vi điều khiển: Như chúng ta đã biết, sự bùng phát COVID-19 đã tấn công thế giới và thay đổi lối sống của chúng ta. Trong điều kiện này, Rượu và nước rửa tay là những chất lỏng quan trọng, tuy nhiên, chúng phải được sử dụng đúng cách. Chạm vào hộp đựng cồn hoặc nước rửa tay bằng tay bị nhiễm trùng c
Tự động hóa nhà điều khiển bằng giọng nói (như Alexa hoặc Google Home, không cần Wifi hoặc Ethernet): 4 bước
Tự động hóa nhà điều khiển bằng giọng nói (như Alexa hoặc Google Home, không cần Wifi hoặc Ethernet): Về cơ bản, nó là rơ le điều khiển arduino dựa trên SMS với thiết lập trợ lý Google để gửi tin nhắn hướng dẫn bằng giọng nói. Nó rất dễ dàng và rẻ tiền và hoạt động giống như quảng cáo Alexa với của bạn các thiết bị điện hiện có (nếu bạn có Moto -X smartp
Làm thế nào để đo chính xác mức tiêu thụ điện năng của các mô-đun truyền thông không dây trong kỷ nguyên tiêu thụ điện năng thấp ?: 6 bước
Làm thế nào để đo chính xác mức tiêu thụ điện năng của các mô-đun truyền thông không dây trong kỷ nguyên tiêu thụ điện năng thấp ?: Tiêu thụ điện năng thấp là một khái niệm cực kỳ quan trọng trong Internet of Things. Hầu hết các nút IoT cần được cung cấp năng lượng bằng pin. Chỉ bằng cách đo chính xác mức tiêu thụ điện năng của mô-đun không dây, chúng tôi mới có thể ước tính chính xác lượng pin mà tôi
Kết nối Pi không đầu của bạn với Mạng WiFi Thư viện: 7 bước
Kết nối Headless Pi của bạn với Mạng WiFi Thư viện: Đã bao nhiêu lần bạn muốn làm việc với các dự án Raspberry Pi không đầu của mình tại thư viện cục bộ, chỉ để rồi thấy mình bị mắc kẹt vì mạng WiFi mở cần bạn sử dụng trình duyệt? Không còn lo lắng nữa, tài liệu hướng dẫn này sẵn sàng trợ giúp! Chúng tôi sẽ
Giao tiếp nối tiếp không dây bằng Bluefruit: 4 bước
Giao tiếp nối tiếp không dây sử dụng Bluefruit: Đây là hướng dẫn từng bước đơn giản để thay thế dây của bạn bằng kết nối bluetooth năng lượng thấp: Tôi đã mất một lúc để tìm ra điều này vì hầu như không có bất kỳ tài liệu nào về việc này với công nghệ năng lượng thấp bluetooth hiện đại như vậy với tư cách là Bluefrui