国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer)

這篇具有很好參考價(jià)值的文章主要介紹了【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、SG90舵機(jī)開發(fā)
舵機(jī)基本介紹
二、Linux定時(shí)器

  • signal 函數(shù)
  • setitimer 函數(shù)原型
  • signal、setitimer函數(shù)API調(diào)用

三、舵機(jī) 軟件PWM實(shí)現(xiàn)

一、SG90舵機(jī)開發(fā)

舵機(jī)基本介紹

如下圖所示,最便宜的舵機(jī)sg90,常用三根或者四根接線,黃色為PWM信號(hào)控制用處:
垃圾桶項(xiàng)目開蓋用、智能小車的全比例轉(zhuǎn)向、攝像頭云臺(tái)、機(jī)械臂等
常見的有0-90°、0-180°、0-360°
【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer),全志H616,linux,驅(qū)動(dòng)開發(fā),計(jì)算機(jī)外設(shè),ubuntu
怎么控制轉(zhuǎn)角
向黃色信號(hào)線“灌入”PWM信號(hào)。
PWM波的頻率不能太高,50hz,即周期=1/頻率=1/50=0.02s,20ms左右數(shù)據(jù):
不同的PWM波形對(duì)應(yīng)不同的旋轉(zhuǎn)角度,以20ms為周期,50hz為頻率的PWM波
【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer),全志H616,linux,驅(qū)動(dòng)開發(fā),計(jì)算機(jī)外設(shè),ubuntu

二、Linux定時(shí)器

signal 函數(shù)

signal 函數(shù)是一個(gè)用于設(shè)置信號(hào)處理函數(shù)的C標(biāo)準(zhǔn)庫(kù)函數(shù),可用于捕獲和處理信號(hào)。信號(hào)是在UNIX和類UNIX操作系統(tǒng)中用于通知進(jìn)程發(fā)生了特定事件的一種異步通知機(jī)制。signal 函數(shù)的原型如下:

#include <signal.h>

void (*signal(int signum, void (*handler)(int)))(int);

參數(shù)說(shuō)明:

  • signum:要捕獲和處理的信號(hào)的編號(hào),它是一個(gè)整數(shù),如 SIGINT(中斷信號(hào))、SIGTERM(終止信號(hào))等。
  • handler:一個(gè)函數(shù)指針,指向你自己編寫的信號(hào)處理函數(shù),用于處理接收到的信號(hào)。

signal 函數(shù)允許你為指定的信號(hào)注冊(cè)一個(gè)自定義的處理函數(shù),該處理函數(shù)會(huì)在程序接收到相應(yīng)的信號(hào)時(shí)被調(diào)用。處理函數(shù)的原型如下:

void handler_function(int signum);

示例用法:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

// 自定義信號(hào)處理函數(shù)
void sigint_handler(int signum) {
    printf("Received SIGINT (Ctrl+C) signal. Exiting...\n");
    exit(0);
}

int main() {
    // 注冊(cè)自定義信號(hào)處理函數(shù),用于捕獲SIGINT信號(hào)(Ctrl+C)
    signal(SIGINT, sigint_handler);

    printf("Press Ctrl+C to trigger the custom signal handler.\n");

    while (1) {
        // 無(wú)限循環(huán)等待信號(hào)
    }

    return 0;
}

在上述示例中,signal 函數(shù)用于注冊(cè)一個(gè)自定義的信號(hào)處理函數(shù) sigint_handler,用于捕獲 SIGINT 信號(hào)(通常由Ctrl+C觸發(fā))。當(dāng)用戶按下Ctrl+C時(shí),程序會(huì)執(zhí)行自定義處理函數(shù),然后退出。這使你能夠在程序中捕獲和處理特定的信號(hào),以采取適當(dāng)?shù)男袆?dòng)。不同的信號(hào)有不同的用途,可以用于控制程序的行為。

setitimer 函數(shù)原型

分析:實(shí)現(xiàn)定時(shí)器,通過(guò)itimerval結(jié)構(gòu)體以及函數(shù)setitimer產(chǎn)生的信號(hào),系統(tǒng)隨之使用signal信號(hào)處理函數(shù)
來(lái)處理產(chǎn)生的定時(shí)信號(hào)。從而實(shí)現(xiàn)定時(shí)器。

setitimer 是一個(gè)UNIX系統(tǒng)上的系統(tǒng)調(diào)用函數(shù),用于設(shè)置和管理定時(shí)器。它通常用于定期觸發(fā)信號(hào)或執(zhí)行某些操作。setitimer 函數(shù)的原型如下:

#include <sys/time.h>

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

參數(shù)說(shuō)明:

  • which:指定要設(shè)置的定時(shí)器類型,可以是 ITIMER_REAL、ITIMER_VIRTUALITIMER_PROF 中的一個(gè)。
    • ITIMER_REAL:以實(shí)際時(shí)間計(jì)時(shí),通常用于實(shí)現(xiàn)定時(shí)器功能。
    • ITIMER_VIRTUAL:以進(jìn)程的虛擬時(shí)間(CPU時(shí)間)計(jì)時(shí)。
    • ITIMER_PROF:以進(jìn)程的虛擬時(shí)間和系統(tǒng)時(shí)間(CPU和墻鐘時(shí)間)計(jì)時(shí)。
  • new_value:一個(gè) struct itimerval 結(jié)構(gòu),用于指定新的定時(shí)器值。
  • old_value:一個(gè) struct itimerval 結(jié)構(gòu),用于存儲(chǔ)舊的定時(shí)器值(可選參數(shù))。

struct itimerval 結(jié)構(gòu)定義如下:

struct itimerval {
    struct timeval it_interval;  // 定時(shí)器重復(fù)的間隔時(shí)間
    struct timeval it_value;     // 定時(shí)器的初始值
};

setitimer 允許你設(shè)置定時(shí)器的初始值和重復(fù)間隔。一旦定時(shí)器啟動(dòng),它將在到期時(shí)觸發(fā)一個(gè)信號(hào),通常是 SIGALRM 信號(hào)。你可以捕獲這個(gè)信號(hào)并執(zhí)行相應(yīng)的操作。

示例用法:

#include <stdio.h>
#include <signal.h>
#include <sys/time.h>

void timer_handler(int signum) {
    // 定時(shí)器到期時(shí)觸發(fā)的處理函數(shù)
    printf("Timer expired! (Signum: %d)\n", signum);
}

int main() {
    struct itimerval timer;
    timer.it_value.tv_sec = 1;  // 初始定時(shí)器值為1秒
    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 2;  // 重復(fù)間隔為2秒
    timer.it_interval.tv_usec = 0;

    // 設(shè)置定時(shí)器并關(guān)聯(lián)處理函數(shù)
    signal(SIGALRM, timer_handler);
    setitimer(ITIMER_REAL, &timer, NULL);

    // 讓程序保持運(yùn)行
    while (1) {
    }

    return 0;
}

上述示例設(shè)置了一個(gè)每隔1秒觸發(fā)一次的定時(shí)器,并在定時(shí)器到期時(shí)觸發(fā) SIGALRM 信號(hào),執(zhí)行 timer_handler 處理函數(shù)。你可以根據(jù)需要修改定時(shí)器的初始值和重復(fù)間隔以實(shí)現(xiàn)不同的定時(shí)任務(wù)。

signal、setitimer函數(shù)API調(diào)用

/*該代碼實(shí)現(xiàn)的功能是: 1s后開啟定時(shí)器,然后每隔1s向終端打印hello。*/ 
#include <stdio.h> 
#include <sys/time.h> 
#include <stdlib.h> 
#include <signal.h> 
 
static int i; 
 
void signal_handler(int signum) 
{ 
    i++; 
    if (i == 2000){ 
    	printf("hello\n"); 
    	i = 0; 
    } 
}
 
int main() 
{ 
    struct itimerval itv; 
 
    //設(shè)定定時(shí)時(shí)間 
    itv.it_interval.tv_sec = 0; 
    itv.it_interval.tv_usec = 500;
    //設(shè)定開始生效,啟動(dòng)定時(shí)器的時(shí)間
    itv.it_value.tv_sec = 1;
    itv.it_value.tv_usec = 0;
    
    //設(shè)定定時(shí)方式 
    if (setitimer(ITIMER_REAL, &itv, NULL) == -1){ 
    	perror("error"); 
    	exit(-1); 
    }
 
    //信號(hào)處理 
    signal(SIGALRM, signal_handler); 
 
    while(1); 
 
    return 0; 
}

【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer),全志H616,linux,驅(qū)動(dòng)開發(fā),計(jì)算機(jī)外設(shè),ubuntu
這種方法需要注意的是,一個(gè)進(jìn)程只能創(chuàng)建一個(gè)定時(shí)器

三、舵機(jī) 軟件PWM實(shí)現(xiàn)

SG90編程實(shí)現(xiàn):鍵盤輸入不同的值,讓舵機(jī)轉(zhuǎn)動(dòng),軟件PWM實(shí)現(xiàn)

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

【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer),全志H616,linux,驅(qū)動(dòng)開發(fā),計(jì)算機(jī)外設(shè),ubuntu

轉(zhuǎn)圈圈文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745734.html

到了這里,關(guān)于【Orangepi Zero2 全志H616】驅(qū)動(dòng)舵機(jī)控制 / Linux定時(shí)器(signal、setitimer)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 全志H616開發(fā)(1)——平臺(tái)介紹

    全志H616開發(fā)(1)——平臺(tái)介紹

    一、特性 CPU 全志H616四核64位1.5GHz高性能Cortex-A53處理器 GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2、OpenCL2.0 運(yùn)行內(nèi)存 1GBDDR3(與GPU共享) 存儲(chǔ) TF卡插槽_課程配套硬件16G,測(cè)試128G可支持、2MBSPIFlash WIFI+藍(lán)牙 AW859A芯片、支持IEEE802.11a/b/g/n/ac、BT5.0 視頻輸出 MicroHDMI20a 電源 USBTypeC接口輸入 外設(shè)

    2024年01月17日
    瀏覽(20)
  • [ARM+Linux] 基于全志h616外設(shè)開發(fā)筆記

    [ARM+Linux] 基于全志h616外設(shè)開發(fā)筆記

    修改用戶密碼 配置網(wǎng)絡(luò) nmcli dev wifi? 命令掃描周圍WIFI熱點(diǎn) ? nmcli dev wifi connect ?xxx? password xxx 命令 連接WiFi 查看ip地址的指令: ifconfig ip addr show wlan0 SSH登錄 ????????這是企業(yè)開發(fā)調(diào)試必用方式,比串口來(lái)說(shuō)不用接線,前提是接入網(wǎng)絡(luò)并獲得板子IP 地址,且系統(tǒng)做了SSH的

    2023年04月21日
    瀏覽(19)
  • 全志H616交叉編譯工具鏈的安裝與使用

    全志H616交叉編譯工具鏈的安裝與使用

    交叉編譯是一個(gè)平臺(tái)生成另外一個(gè)平臺(tái)的可執(zhí)行代碼,同一體系結(jié)構(gòu)可以運(yùn)行不同的操縱系統(tǒng),同時(shí)不同的操作系統(tǒng)也可以在不同的體系中運(yùn)行。 例如我們?cè)赨buntu Linux上編寫orangepiZero2 的代碼編譯為a.out是在orangepiZero2上運(yùn)行并不是在Ubuntu Linux上運(yùn)行 那什么是編譯呢? 編譯是

    2024年02月13日
    瀏覽(23)
  • 扔掉你的開發(fā)板,跟我玩Mcore-全志h616

    扔掉你的開發(fā)板,跟我玩Mcore-全志h616

    本文轉(zhuǎn)載自WhyCan Forum(哇酷開發(fā)者社區(qū)): https://whycan.com/t_10024.html 作者@leefei 這是一個(gè)1.69寸觸摸小電視。使用全志H616芯片,板上硬件有mpu6050陀螺儀,USB轉(zhuǎn)ttl調(diào)試串口,一個(gè)USB接口,WIFI藍(lán)牙,一個(gè)喇叭,一個(gè)麥克風(fēng),當(dāng)然還有一個(gè)1.69寸觸摸手表屏。 下載固件: https://pan.baid

    2024年02月07日
    瀏覽(28)
  • 【嵌入式Linux項(xiàng)目】基于Linux的全志H616開發(fā)板智能家居項(xiàng)目(語(yǔ)音控制、人臉識(shí)別、安卓APP和PC端QT客戶端遠(yuǎn)程操控)有視頻功能展示

    【嵌入式Linux項(xiàng)目】基于Linux的全志H616開發(fā)板智能家居項(xiàng)目(語(yǔ)音控制、人臉識(shí)別、安卓APP和PC端QT客戶端遠(yuǎn)程操控)有視頻功能展示

    目錄 一、功能需求 二、開發(fā)環(huán)境 1、硬件: 2、軟件: 3、引腳分配: 三、關(guān)鍵點(diǎn) 1、設(shè)計(jì)模式之工廠模式 2、線程 3、wiringPi庫(kù)下的相關(guān)硬件操作函數(shù)調(diào)用 4、語(yǔ)音模塊的串口通信 5、攝像頭的實(shí)時(shí)監(jiān)控和拍照功能 6、人臉識(shí)別 7、qt程序跨平臺(tái)運(yùn)行(編譯成安卓APP) 四、編譯和

    2024年02月15日
    瀏覽(24)
  • OrangePi Zero2 TTL 連接示意圖

    OrangePi Zero2 TTL 連接示意圖

    OrangePi 目前最方便的就是使用調(diào)試串口線進(jìn)行PC與開發(fā)板進(jìn)行鏈接。 本人使用的型號(hào)為CH340模塊USB轉(zhuǎn)TTL刷機(jī)線,Windows下免驅(qū)。 黑線對(duì)GND接口,綠線對(duì)RX接口,白線對(duì)TX接口。

    2024年02月16日
    瀏覽(27)
  • 在全志H616核桃派上實(shí)現(xiàn)USB攝像頭的OpenCV顏色檢測(cè)

    在全志H616核桃派上實(shí)現(xiàn)USB攝像頭的OpenCV顏色檢測(cè)

    在給核桃派開發(fā)板用OpenCV讀取圖像并顯示到pyqt5的窗口上并加入顏色檢測(cè)功能,嘗試將圖像中所有藍(lán)色的東西都用一個(gè)框標(biāo)記出來(lái)。 按照慣例,先要介紹一下opencv中常用的hsv像素格式。顏色還是那個(gè)顏色,只是描述顏色用的參數(shù)變了。h代表色調(diào),s代表飽和度,v代表明度,比

    2024年01月23日
    瀏覽(19)
  • Orangepi Zero2——手機(jī)連接Linux與語(yǔ)音模塊串口通信

    Orangepi Zero2——手機(jī)連接Linux與語(yǔ)音模塊串口通信

    1、把手機(jī)接入開發(fā)板 2、安裝 adb 工具,在終端輸入 adb 安裝指令: 3、dmesg 能查看到手機(jī)接入的信息,但是輸入adb devices會(huì)出現(xiàn)提醒 4、配置文件,以支持USB設(shè)備的熱拔插,支持UDEV的機(jī)制 在/etc/udev/rules.d 文件夾下創(chuàng)建規(guī)則文件 cd /etc/udev/rules.d/ sudo vim 51-android.rules 在文件中添加

    2024年02月09日
    瀏覽(25)
  • 【OrangePi Zero2 智能家居】智能家居項(xiàng)目的軟件實(shí)現(xiàn)

    【OrangePi Zero2 智能家居】智能家居項(xiàng)目的軟件實(shí)現(xiàn)

    一、項(xiàng)目整體設(shè)計(jì) 二、項(xiàng)目代碼的前期準(zhǔn)備 三、實(shí)現(xiàn)語(yǔ)音監(jiān)聽接口 四、實(shí)現(xiàn)socket監(jiān)聽接口 五、實(shí)現(xiàn)煙霧報(bào)警監(jiān)聽接口 六、實(shí)現(xiàn)設(shè)備節(jié)點(diǎn)代碼 七、實(shí)現(xiàn)接收消息處理接口 整體的軟件框架大致如下: 整個(gè)項(xiàng)目開啟4個(gè)監(jiān)聽線程, 分別是: 語(yǔ)音監(jiān)聽線程:用于監(jiān)聽語(yǔ)音指令,

    2024年02月22日
    瀏覽(32)
  • 花費(fèi)200元,我用全志H616和雪糕棒手搓了一臺(tái)可UI交互的視覺循跡小車

    花費(fèi)200元,我用全志H616和雪糕棒手搓了一臺(tái)可UI交互的視覺循跡小車

    常見的視覺循跡小車都具備有路徑識(shí)別、軌跡跟蹤、轉(zhuǎn)向避障、自主決策等基本功能,如果不采用紅外避障的方案,那么想要完全滿足以上這些功能,攝像頭、電機(jī)、傳感器這類關(guān)鍵部件缺一不可,由此一來(lái)小車成本也就難以控制了。 但如果,有這樣一款視覺循跡小車,它可

    2024年02月21日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包