プログラムというよりかは回路についてのアドバイスなのですが、トランジスタなんかを使わなくても、IOピンをLOWにすれば0V(GNDにつないだのとと同じような状態)になるため、大きな電流を流さないならなくても問題はないと思います。ほかに理由があるなら別ですが。4桁の7セグメントLEDを動かすプログラムなら今作っているので、参考になるかは分かりませんがどうぞ。
const int com[] = {19, 13, 3, 4, 2};
const int anode[] = {7, 5, 8, 10, 11, 9, 6, 12};
int DataSave; // LEDcon4で使う数値計算用
int Data1; // 現在のCdsセルのデータ格納
int Data2; // 過去ののCdsセルのデータ格納
int count; // 今までに回転した回数を記録する
unsigned long Time; // プログラムがスタートしてからの時間を格納する
int TimeD1; //
int TimeD2; //
int mm = 376; // 円周
int RPS; //RPS(一秒間に回転する回数の格納用)
const int number[] = { // LED点灯パターンを2進数で記録
0b11111100, //0
0b01100000, //1
0b11011010, //2
0b11110010, //3
0b01100110, //4
0b10110110, //5
0b10111110, //6
0b11100100, //7
0b11111110, //8
0b11110110, //9
};
void setup() { //
for(int i = 0;i <= 13;i++){
pinMode(i, OUTPUT);
}
pinMode(19, OUTPUT);
for(int i = 14;i <= 17;i++){
pinMode(i, INPUT);
}
for(int i = 0; i <= 5; i++){
digitalWrite(com[i], HIGH);
}
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Data1 = analogRead(4);
if(Data1 < 700 && Data2 > 700){
count++;
Time = millis();
TimeD2 = TimeD1 - Time;
TimeD1 = Time;
}
RPS = 1000 / TimeD2;
Serial.println(analogRead(4));
LEDcon4(abs(RPS % 10000), false, false, false, 2);
/* LEDcon4(count, false, false, false, 2);*/
Data2 = Data1;
}
void LEDcon4 (int Input, bool option , bool option1, bool option2, int comen){
DataSave = Input;
for (int i = 3; i >= 0; i--){
digitalWrite(com[i], LOW);
if(i == 3 - comen){
LEDcon(DataSave % 10,true);
}
else
{
LEDcon(DataSave % 10,false);
}
delay(1);
ClearSeg();
digitalWrite(com[i], HIGH);
DataSave = DataSave / 10;
}
digitalWrite(com[4], LOW);
if (option == true){
digitalWrite(anode[0],HIGH);
}
if (option1 == true){
digitalWrite(anode[1],HIGH);
}
if (option2 == true){
digitalWrite(anode[2],HIGH);
}
delay(1);
digitalWrite(anode[0],LOW);
digitalWrite(anode[1],LOW);
digitalWrite(anode[2],LOW);
digitalWrite(com[4], HIGH);
}
void LEDcon (int a,bool come){
for (int b = 0; b <= 7; b++){
digitalWrite(anode[7 - b], number[a] & (1 << b) ? HIGH : LOW);
}
if (come == true){
digitalWrite(anode[7],HIGH);
}
}
void ClearSeg (){
for (int b = 0; b <= 7; b++){
digitalWrite(anode[7 - b], LOW);
}
}