■
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;
}
スイッチの動作確認テストプログラム
スイッチの動作確認テストプログラムです。
#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;
}
ラズベリーパイ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;
}
説明、動作の動画はこちら