HC SR04 超音波距離センサーの距離測定プログラムです。

 

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig 29
#define Echo 28

float distanceMeasure(void)
{
struct timeval tv1;
struct timeval tv2;
long time1, time2;
float distance;

digitalWrite(Trig, LOW);//Trigを初期化
delayMicroseconds(2);
digitalWrite(Trig, HIGH);//Trigをhighに設定
delayMicroseconds(10);//10μsTrig立ち上げることでパルス波を発信する
digitalWrite(Trig, LOW);//TrigをLowに設定

while(!(digitalRead(Echo) == 1))//echoの立ち上がりを待つ(電波送信終了を待つ)
gettimeofday(&tv1, NULL);//現在の時刻を読み取る

while(!(digitalRead(Echo) == 0));//echoのたち下がりを待つ(電波受信を待つ)
gettimeofday(&tv2, NULL);//現在の時刻を読み取る

time1 = tv1.tv_sec * 1000000 + tv1.tv_usec;//開始時間を計算
time2 = tv2.tv_sec * 1000000 + tv2.tv_usec;//終了時間を計算
distance = (float)(time2 - time1) / 1000000 * 34000 / 2;//応答時間と音速(340m/s)から距離を計算
return distance;
}

int main(void){

float distance;

if(wiringPiSetup() == -1){ 
    return 1;
}

pinMode(Echo, INPUT);//Echoを入力に設定
pinMode(Trig, OUTPUT);//Trigを出力に設定

while(1){
    distance = distanceMeasure();
    printf("%0.1f cm\n",distance);//距離を出力
    delay(100);
}
return 0;
}

スイッチを用いたLEDの点灯制御

スイッチを用いたLEDの点灯制御プログラムです。

 

#include<wiringPi.h>
#include<stdio.h>

#define GPIO12 12
#define GPIO17 17
int main(void){
    int i;
    if(wiringPiSetupGpio()==-1) return 1;
    
    pinMode(GPIO12,INPUT);//GPIO12を入力に設定
    pinMode(GPIO17,OUTPUT);//GPIO17を出力に設定

    while(1){
        i=digitalRead(GPIO12);
        //printf("i=%d\n",i);
        if(i==0){
            digitalWrite(GPIO17,1);
            //printf("LED\n");
        }else{
            digitalWrite(GPIO17,0);
        }
    
    }
    
    return 0;
}

 

youtu.be

スイッチの動作確認テストプログラム

スイッチの動作確認テストプログラムです。

 

#include<wiringPi.h>
#include<stdio.h>

#define GPIO12 12
#define GPIO17 17
int main(void){
    int i;
    if(wiringPiSetupGpio()==-1) return 1;
    
    pinMode(GPIO12,INPUT);//GPIO12を入力に設定
    pinMode(GPIO17,OUTPUT);//GPIO17を出力に設定

    while(1){
        i=digitalRead(GPIO12);
        printf("i=%d\n",i);
        /*if(i==0){
            digitalWrite(GPIO17,1);
        }*/
        delay(1000);
        //digitalWrite(GPIO17,0);
    }
    
    return 0;
}

ラズベリーパイ4 C言語でサーボモーター制御 RaspberryPi SG90

ラズベリーパイでサーボモータの制御を行いました。

詳細は動画で説明していますので動画をご視聴ください。

 

#include<wiringPi.h>
#include<stdio.h>

#define GPIO12 12
int main(void){
    int i;
    
    if(wiringPiSetupGpio()==-1) return 1;
    
    //PIN設定
    pinMode(GPIO12, PWM_OUTPUT);//GPIO12をPWM出力に設定
    pwmSetMode(PWM_MODE_MS);//markspaceモードに設定(周波数を指定する場合はこのモードにする必要あり)
    
    //PWM周期の設定(SG90の周期20[ms](周波数50[Hz])と同じに設定する)→周期=19.2*10^6/(pwmSetClock*pwmSetRange)
    pwmSetRange(1000);//レンジを設定→pwmWrite関数で使用できる数字の決定(Duty比の分母となる値)→19.2*10^6[Hz]/1000=19.2*10^3
    pwmSetClock(384);//クロック数を設定 →19.2*10^3[Hz]/50[Hz]=384

    //サーボモータの回転実行
    for(i=0;i<5;i++){
    pwmWrite(GPIO12,25);//0度回転((0.5[ms]/20[ms])*1000=25)
    delay(1000);
    pwmWrite(GPIO12,120);//180度回転((2.4[ms]/20[ms])*1000=120)
    delay(1000);
    }
    
    https://youtu.be/BASaqK2NlUo
    
    return 0;
}

 

youtu.be

ラズベリーパイ4 PWMを用いたLEDの明るさ制御 C言語

wiringPiを使ったLEDの明るさ制御になります。

ソースコードは以下です。詳細は動画で説明しています。

 

#include<wiringPi.h>
#include<stdio.h>

#define GPIO12 12
int main(void){
    int i;
    
    if(wiringPiSetupGpio()==-1) return 1;
    
    pinMode(GPIO12, PWM_OUTPUT);//GPIO12をPWM出力に設定
    pwmSetMode(PWM_MODE_MS);//markspaceモードに設定
    pwmSetClock(400);//クロック数を設定
    pwmSetRange(1024);//レンジを設定


    for(i=0; i<1024; i=i+100){
    pwmWrite(GPIO12,i);
    delay(500);
    }
    pwmWrite(GPIO12,0);
    
    return 0;
}
 

説明、動作の動画はこちら

youtu.be