全志ARM-SG90舵機

??控制轉角

向黃色信號線“灌入”PWM信號。 PWM波的頻率不能太高,50hz,即周期=1/頻率=1/50=0.02s,20ms左右數據: 不同的PWM波形對應不同的旋轉角度,以20ms為周期,50hz為頻率的PWM波

?

定時器需要定時20ms,關心的單位0.5ms, 20ms = 0.5ms * 40

1.Linux定時器

實現定時器,通過itimerval 結構體以及函數setitimer產生的信號,系統隨之使用signal信號處理函數來處理產生的定時信號。從而實現定時器。

itimerval 結構體原型:

struct itimerval{/* Value to put into `it_value' when the timer expires.  */struct timeval it_interval;/* Time to the next timer expiration.  */struct timeval it_value;};

it_value:計時器的初始值,一般基于這個初始值來加或者來減,看控制函數的參數配置 it_interval:程序跑到這之后,多久啟動定時器

2.判斷是否有信號傳入

setitimer()將value指向的結構體設為計時器的當前值,如果ovalue不是NULL,將返回計時器原有值。

setitimer()原型:

 int setitimer (__itimer_which_t __which,const struct itimerval *__restrict __new,struct itimerval *__restrict __old)

which:三種類型

ITIMER_REAL //數值為0,計時器的值實時遞減,發送的信號是SIGALRM

ITIMER_VIRTUAL //數值為1,進程執行時遞減計時器的值,發送的信號是SIGVTALRM。 ITIMER_PROF //數值為2,進程和系統執行時都遞減計時器的值,發送的信號是SIGPROF

3.?信號進行邏輯處理

signal(SIGALRM,signal_handler);

成功執行時,返回0。失敗返回-1

實現代碼:

SG90編程實現:鍵盤輸入不同的值,讓舵機轉動不同角度,軟件PWM實現

#include <stdio.h>#include <sys/time.h>#include <stdlib.h>#include <signal.h>int jd;static int i = 0;void signal_handler(int signum){if(i <= jd){digitalWrite(SG90Pin, HIGH);}else{digitalWrite(SG90Pin, LOW);}if(i == 40){i = 0;}i++;}int main(){struct itimerval itv;jd = 0;wiringPiSetup();pinMode(SG90Pin, OUTPUT);}//設定定時時間
itv.it_interval.tv_sec = 0;itv.it_interval.tv_usec = 500;//設定開始生效,啟動定時器的時間
itv.it_value.tv_sec = 1;itv.it_value.tv_usec = 0;//設定定時方式
if( -1 == setitimer(ITIMER_REAL, &itv, NULL)){perror("error");exit(-1);}//信號處理
signal(SIGALRM,signal_handler);while(1){printf("input jd: 1-0  2-45  3-90  4-135 \n");scanf("%d",&jd);}return 0;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10304.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

el-checkbox復選框做單選

思路&#xff1a;&#xff08;所有選擇項都在一個數組中&#xff09;給每一個選項設置一個是否選中的屬性&#xff08;checked&#xff09;&#xff0c;通過change事件來改變,數組中每一項的checked&#xff0c;如果change事件的值是true,那么就要把數組中&#xff08;如根據唯…

零基礎入門篇①③ Python可變序列類型--列表

Python從入門到精通系列專欄面向零基礎以及需要進階的讀者傾心打造,9.9元訂閱即可享受付費專欄權益,一個專欄帶你吃透Python,專欄分為零基礎入門篇、模塊篇、網絡爬蟲篇、Web開發篇、辦公自動化篇、數據分析篇…學習不斷,持續更新,火熱訂閱中??專欄限時一個月(5.8~6.8)重…

vue階段案例,練習filter、map、forEach,雙向綁定,三元表達式,以及圖片滾動,文字跳動等等。

階段案例 通過案例來練習雙向綁定&#xff0c;三元表達式&#xff0c;以及圖片滾動&#xff0c;文字跳動等等。 代碼如下&#xff1a; <template><table class"bjtp" ><div class"title" >{{title}}</div><div class"s…

【解決Android Studio】cmake報錯找不到vulkan包

1 報錯信息 CMake Error at D:/Android/project/cmake/3.10.2.4988404/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Vulkan (missing: Vulkan_LIBRARY) Call Stack (most recent call first): 2. 錯誤原因 minSdk版本不對&am…

18.Blender 渲染工程、打光方法及HDR貼圖導入

HDR環境 如何導入Blender的HDR環境圖 找到材質球信息 在右上角&#xff0c;點擊箭頭&#xff0c;展開詳細部分 點擊材質球&#xff0c;會出現下面一列材質球&#xff0c;將鼠標拖到第二個材質球&#xff0c;會顯示信息 courtyard.exr 右上角打開已渲染模式 左邊這里選擇世界…

動作識別 slowfast動作識別項目記錄

動作識別 slowfast動作識別項目記錄

如何在自己的服務器上快速搭建第一個網站(其一)

根據上篇文章相信很多人以及成功搭建服務器啦。今天我們講下如何在自己的服務器快速搭建第一個網站的一些重要配置&#xff0c;以及搭建網站的必備環境。干貨滿滿&#xff0c;希望大家能夠關注點贊收藏。 我會不定期更新一些實用的工具&#xff0c;歡迎大家私信評論喔&#xf…

12個網上賺錢野路子信息差,人人可做的賺錢小項目!

在這個多元化的時代&#xff0c;副業已經成為許多人增加收入、實現自我價值的重要途徑。今天&#xff0c;我們就來聊聊那些既有趣又能賺錢的副業項目&#xff0c;讓你的錢包鼓起來&#xff01; 1.文字創作 寫作不僅是情感的宣泄&#xff0c;更是財富的積累。無論是自媒體文、軟…

事件代理 淺談

事件代理是一種將事件處理委托給父元素或祖先元素來管理的技術。當子元素觸發特定事件時&#xff0c;該事件不會直接在子元素上進行處理&#xff0c;而是會冒泡到父元素或祖先元素&#xff0c;并在那里進行處理。這樣做的好處是可以減少事件處理函數的數量&#xff0c;提高性能…

VR智慧文旅:開啟“韻味”旅游季的新篇章

為了充分滿足游客的假日文化旅游需求&#xff0c;各地紛紛“解鎖”新花樣&#xff0c;沉浸式實景觀展震撼“出圈”。在數字化浪潮的推動下&#xff0c;文化旅游行業正經歷著變革&#xff0c;在萬物皆可沉浸的時代&#xff0c;VR智慧文旅燃起了不一樣的熱度。 許多業內人士認為&…

hdfs磁盤清理歷史數據

hdfs集群磁盤清理歷史數據流程如下&#xff1a; #可以查看web界面hdfs集群的磁盤使用率,并記錄下來,對比清理后的效果: 清理前 86.00% 194.24TB/225.85TB #統計warehouse目錄下的磁盤使用量(目前表都是建在該路徑下) hadoop fs -du -h /user/hive/warehouse #統計bak目錄下磁…

Tiff文件解析和PackBits解壓縮

實現了Tiff圖片文件格式的解析&#xff0c;對Tiff文件中的PackBits壓縮格式進行解壓縮&#xff0c;對Tiff文件中每一個Frame轉換成BufferedImage顯示。 Java語言實現&#xff0c;Eclipse下開發&#xff0c;AWT顯示圖片。 public static TIFF Parse(final byte[] bytes) throw…

Kubernetes 上搭建一個 Nginx 的 Pod,并確保傳入的 API 請求被均勻地分發到兩個 Java 業務 Pod 上

目錄 步驟一&#xff1a;創建兩個 Java 業務 Pod步驟二&#xff1a;創建一個 Nginx Pod步驟三&#xff1a;創建一個 Service步驟四&#xff1a;創建一個 Ingress注意事項 要在 Kubernetes 上搭建一個 Nginx 的 Pod&#xff0c;并確保傳入的 API 請求被均勻地分發到兩個 Java 業…

排序算法(Java版)

目錄 1、直接插入排序2、希爾排序3、直接選擇排序4、堆排序5、冒泡排序6、快速排序6.1 遞歸實現6.2 非遞歸實現 7、歸并排序7.1 遞歸實現7.2 非遞歸實現 8、性能分析 今天我們學習一種算法&#xff1a;排序算法&#xff08;本文的排序默認是從小到大順序&#xff09;&#xff0…

C++純C實現貪吃蛇小游戲

公眾號&#xff1a;編程驛站 #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <time.h>//描述蛇的節點信息 typedef struct SnakeNode {int x;int y; } Snode;//箱子&#xff1a;放置蛇的所有節點 Snode snakes[100]; //保存…

滲透思考題

一&#xff0c;嘗試登錄。 客戶端對密碼進行哈希處理并緩存密碼hash&#xff0c;丟棄實際的明文密碼&#xff0c;然后將用戶名發送到服務器&#xff0c;發起認證請求 密文存儲位置&#xff1a;數據庫文件位于C:WindowsSystem32configsam&#xff0c;同時掛載在注冊表中的HKLMSA…

C語言【文件操作 1】

文章目錄 1.為什么使用文件2.文件是什么&#xff1f;2.1程序文件2.2數據文件 3.二進制文件和文本文件4.文件的打開和關閉4.1流和標準流流標準流 4.2文件指針4.3文件的打開和關閉 結語 1.為什么使用文件 很簡單 長久的存儲數據 如果沒有文件&#xff0c;我們寫程序所產生的數據…

商米-android-使用NFC讀IC卡,身份證云解和IC卡同時兼容

商米介紹地址&#xff1a;https://www.sunmi.com/ 商米是一個提供手持PDA的一個很好的解決方案廠商&#xff0c; 也有其他的一些桌面設備。 其中商米提供的軟件服務中&#xff0c;比較特別的是 身份證云解功能。 此處重點說明一下&#xff0c;身份證云解功能。 以往市面上的身…

Vue學習JSON.stringify()將Object類型轉換成String類型

Vue學習JSON.stringify&#xff08;&#xff09;將Object類型轉換成String類型 一、前言1、基本用法2、復雜對象轉換3、過濾器函數4、序列化函數 一、前言 JSON.stringify() 是一個 JavaScript 函數&#xff0c;用于將 JavaScript 值轉換為 JSON 字符串。它接受一個 JavaScrip…

深入探索MySQL視圖

前言 在數據庫的世界里&#xff0c;MySQL視圖作為數據抽象的一把利劍&#xff0c;為我們提供了一種靈活而高效的方式來管理和查詢數據。它不僅能夠簡化復雜的查詢邏輯&#xff0c;還能在不改動底層數據結構的前提下&#xff0c;實現數據的定制化展示與訪問控制。本文旨在深入解…