零件表
5 V nano
3 位電壓表
2 位數字顯示
TB6612FNG 電機控制板
n20 電機
10 K 編碼器(線性可變電阻)
電源供應
#include "Timer.h"
Timer t;
int anaPin = 6;
int pwmVal = 0;
int gndPin1=7,gndPin2=6;
int pins[]={A5,A4,A3,A2,A1,8,5,4};
int currentScore=0;
long res=0;
void setup() {
pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT);
digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, LOW);
pinMode(gndPin1,OUTPUT); pinMode(gndPin2,OUTPUT);
digitalWrite(gndPin1, LOW); digitalWrite(gndPin2, LOW);
for(int a=0;a<8;a++){
pinMode(pins[a],OUTPUT);
}
attachInterrupt(0, cnt, RISING);
t.every(5000, count);
}
void loop() {
t.update();
int sensorValue = analogRead(anaPin);
pwmVal = sensorValue/4; // convert from 0-1024 to 0-255
analogWrite(9, pwmVal);
if(currentScore<10){
digitalWrite(gndPin2,HIGH);
show(currentScore);
delay(200);
digitalWrite(gndPin2,LOW);
}else{
for(int b=0;b<20;b++){
digitalWrite(gndPin1,HIGH);
show((int)currentScore/10);
delay(5);
digitalWrite(gndPin1,LOW);
digitalWrite(gndPin2,HIGH);
show(currentScore%10);
delay(5);
digitalWrite(gndPin2,LOW);
}
}
}
void cnt(){
res++;
}
void count(){
currentScore = res / 5;
res = 0;
}
void show(int num){
for(int a=0;a<8;a++){
digitalWrite(pins[a], LOW);
}
switch(num){
case 0:
digitalWrite(pins[0],HIGH);
digitalWrite(pins[3],HIGH);
digitalWrite(pins[2],HIGH);
digitalWrite(pins[5],HIGH);
digitalWrite(pins[7],HIGH);
digitalWrite(pins[6],HIGH);
break;
case 1:
digitalWrite(pins[0],HIGH);
digitalWrite(pins[6],HIGH);
break;
case 2:
digitalWrite(pins[7],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[2],HIGH);
digitalWrite(pins[3],HIGH);
break;
case 3:
digitalWrite(pins[7],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[3],HIGH);
digitalWrite(pins[0],HIGH);
break;
case 4:
digitalWrite(pins[5],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[0],HIGH);
break;
case 5:
digitalWrite(pins[7],HIGH);
digitalWrite(pins[5],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[0],HIGH);
digitalWrite(pins[3],HIGH);
break;
case 6:
digitalWrite(pins[7],HIGH);
digitalWrite(pins[5],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[2],HIGH);
digitalWrite(pins[3],HIGH);
digitalWrite(pins[0],HIGH);
break;
case 7:
digitalWrite(pins[7],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[0],HIGH);
break;
case 8:
digitalWrite(pins[0],HIGH);
digitalWrite(pins[2],HIGH);
digitalWrite(pins[3],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[5],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[7],HIGH);
break;
case 9:
digitalWrite(pins[0],HIGH);
digitalWrite(pins[3],HIGH);
digitalWrite(pins[4],HIGH);
digitalWrite(pins[5],HIGH);
digitalWrite(pins[6],HIGH);
digitalWrite(pins[7],HIGH);
break;
default:
digitalWrite(pins[1],HIGH);
break;
}
}