lwiringPiとOpenRTM-aistインストール済み
===コマンド=====
gcc kasoku.c -lwiringPi
===========
======エラー===========
kasoku.c: In function ‘main’:
kasoku.c:48:29: error: ‘rtc’ undeclared (first use in this function)
kasoku.c:48:29: note: each undeclared identifier is reported only once for each function it appears in
==========
======ソースコード========
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <linux/i2c-dev.h> // I2C用インクルード
#include <fcntl.h>
#include <sys/ioctl.h>
#include <wiringPi.h> // delay関数用にインクルード
void L3GD20_readData(int *gyrodata, int fd);
void L3GD20_write(unsigned char address, unsigned char data, int fd);
unsigned char L3GD20_read(unsigned char address, int fd);
void L3GD20_init(int fd);
int main(int argc, char **argv)
{
int i2c_fd; // デバイスファイル用ファイルディスクリプタ
// char *i2cFileName = "/dev/i2c-0"; // I2Cデバイスファイル名
char *i2cFileName = "/dev/i2c-1"; // RaspberryPiのリビジョンに合わせて変更
int i2cAddress = 0x6a; // L3GD20のI2Cアドレス
int gyroData[3]; // ジャイロ3軸(x,y,z)データ格納用
printf("i2c Gyro(L3GD20) test program\n");
delay(500);
// I2Cデバイスファイルをオープン
if ((i2c_fd = open(i2cFileName, O_RDWR)) < 0)
{
printf("Faild to open i2c port\n");
exit(1);
}
// L3GD20用にセット
if (ioctl(i2c_fd, I2C_SLAVE, i2cAddress) < 0)
{
printf("Unable to get bus access to talk to slave\n");
exit(1);
}
//デバイスイニシャライズ
L3GD20_init(i2c_fd);
// 1秒ごとに20回ジャイロデータを取得、表示
int i;
for(i=0; i<20; i++){
// デバイスからデータ取得
L3GD20_readData(gyroData, rtc);
// 取得したデータを校正して表示、1秒待ち
printf("x, y, z : %5.2f, %5.2f, %5.2f\n",(float)gyroData[0]*0.00875,(float)gyroData[1]*0.00875,(float)gyroData[2]*0.00875);
delay(1000);
}
return;
}
// L3GD20用 1バイト書き込みルーチン:addressで示すレジスタにdataを書き込む
void L3GD20_write(unsigned char address, unsigned char data, int fd)
{
unsigned char buf[2];
buf[0] = address;
buf[1] = data;
if((write(fd,buf,2))!=2){
printf("Error writing to i2c slave\n");
exit(1);}
return;
}
// L3GD20用 1バイト読み出しルーチン:addressで示すレジスタの値を読み出す
// 戻り値がレジスタ値
unsigned char L3GD20_read(unsigned char address, int fd)
{
unsigned char buf[1];
buf[0] = address;
if((write(fd,buf,1))!= 1){ // addressを一度書き込む所に注意
printf("Error writing to i2c slave\n");
exit(1);}
if(read(fd,buf,1)!=1){
printf("Error reading from i2c slave\n");
exit(1);}
return buf[0];
}
// L3GD20用 ジャイロデータ読み出しルーチン:整数値配列へのポインタを使ってデータを受け渡す
void L3GD20_readData(int *gyrodata, int fd)
{
unsigned char data[6];
// センサから3軸に対して2バイトずつデータを読み出す
int i;
for(i=0; i<6; i++){
data[i]=L3GD20_read(0x28+i,fd);
}
// 各数値を32bit幅の整数に整形する
// センサの数値精度が16bit・2の補数表現での出力のため、シフトで加工
gyrodata[0]=((int)data[1]<<24|(int)data[0]<<16)>>16;
gyrodata[1]=((int)data[3]<<24|(int)data[2]<<16)>>16;
gyrodata[2]=((int)data[5]<<24|(int)data[4]<<16)>>16;
return;
}
// L3GD20用 ジャイロデータイニシャライズルーチン
void L3GD20_init(int fd)
{
unsigned char Data;
printf("L3GD20 init seq. start\n");
// L3GD20 動作確認
// L3GD20の0x0fレジスタは常に0xd4にセットされているため動作確認ができる
Data = L3GD20_read(0x0f,fd);
if(Data != 0xd4){
printf("L3GD20 is not working\n");
exit(1);}
delay(10);
// レジスタへの書き込みチェックとイニシャライズを同時に行う
printf("read OK, Now writing check...\n");
// 0x20レジスタに0x0fを書き込むことで動作させる
L3GD20_write(0x20, 0x0f, fd);
// 0x20レジスタに実際に0x0fが書かれたか確認
Data = L3GD20_read(0x20,fd);
if(Data != 0x0f){
printf("Writing miss\n");
exit(1);
}
printf("Writing OK\n");
delay(10);
return;
}
===============
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>kasoku.c:48:29: error: ‘rtc’ undeclared (first use in this function)
エラーメッセージの通り、'rtc'ってのが見つからないからでしょう。
>//デバイスイニシャライズ
>L3GD20_init(i2c_fd);
> (中略)
>// デバイスからデータ取得
>L3GD20_readData(gyroData, rtc);
ってところからの推測では…
// デバイスからデータ取得
L3GD20_readData(gyroData, i2c_fd);
なんじゃないですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
テキストデータをそのままバイ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
str系関数を使わずに二つの文字...
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
間接操作のレベルとは
-
ftoa の作り方
-
絶対パスからのファイル名の切...
-
エンディアン:2バイトのデー...
-
C++のCreateFile関数で、ASCII...
-
型変換
-
c言語の問題の説明、各所ごとに
-
バイトスワップをやりたい
-
atoi( ) の反対をやりたい
-
c言語プログラミング実行時エラ...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報