🍓

Ras Piで7セグLEDでカウントダウンした話

に公開

書いた記事消えた!!!

書き直し
7セグLEDでカウントダウンした話

物理的に動かした。もっといい書き方は死ぬほどある。
とりあえず動いたやり方書きます。

4つのファイルを実行ファイルで実行しLEDを光らせました

ファイル詳細

光る(0)を司るファイル↓

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>


// 全てon
int allon() {
	
	int fd = 0;
	fd = open("/sys/class/gpio/gpio25/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio17/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio27/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio24/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio5/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio6/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio22/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio23/value", O_WRONLY);
	write(fd, "0", 2);
	close(fd);

}

カウントダウンしたんだけど長すぎるので割愛。
数字の形になるように光るところを調整したプログラミング。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>


int alloff() {

	int fd = 0;
	fd = open("/sys/class/gpio/gpio25/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio17/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio27/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio24/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio5/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio6/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio22/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


	fd = open("/sys/class/gpio/gpio23/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

}

int dottooff() {
	int fd = 0;
	fd = open("/sys/class/gpio/gpio23/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

}
int off0() {

	int fd = 0;

	fd = open("/sys/class/gpio/gpio25/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

	fd = open("/sys/class/gpio/gpio17/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

	fd = open("/sys/class/gpio/gpio27/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

	fd = open("/sys/class/gpio/gpio22/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

	fd = open("/sys/class/gpio/gpio6/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);

	fd = open("/sys/class/gpio/gpio5/value", O_WRONLY);
	write(fd, "1", 2);
	close(fd);


}

offになるように調整したプログラム。
上のコードの割愛した部分は部分的に光らせなくなるようなコードを書いた

gpio起動ファイル↓

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

void standby2(void) {
	int fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "27", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio27/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "17", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio17/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "24", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio24/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "25", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio25/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "5", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio5/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "6", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio6/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "23", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio23/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/export", O_WRONLY);
	write(fd, "22", 2);

	close(fd);

	fd = 0;
	fd = open("/sys/class/gpio/gpio22/direction", O_WRONLY);
	write(fd, "out", 3);

	close(fd);


}

gpio終了ファイル

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

void deleteFile2(void) {
	int fd = 0;
	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "27", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "17", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "24", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "25", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "5", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "6", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "23", 2);

	close(fd);

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	write(fd, "22", 2);

	close(fd);
}

実行ファイル
5つのファイル(.c,.h)を受け取り1~9までのカウントダウンをした

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include "onoff.h"


//プロトタイプ宣言
int standby2();
int deleteFile2();

int main() {
	int len = 0;
	int (*on[])(void) = {on0,on1,on2,on3,on4,on5,on6,on7,on8,on9,};
	int (*off[])(void) = { off0,off1,off2,off3,off4,off5,off6,off7,off8,off9 };

	len = sizeof(on) / sizeof(on[0]);
		
		standby2(); //起動準備、valueが全て1になる
	usleep(1000000);
	
	alloff(); //全off

	for (int i = 0; i < len; i++) {

		dottoon();
		usleep(2000000);
		dottooff();
		usleep(1000000);

		on[i]();
		usleep(2000000);
		off[i]();
		usleep(1000000);

	} //9回数字表示している

	deleteFile2();

	

}

for文を使ってonとoff関数をぐるぐる回してる。
usleepを使って表示時間や待機時間をコントロールしている。

こんな感じです

Discussion