机器人五级模板
包含:
- 1位4位数码管
- 8×88\times88×8点阵
- 按键(已消抖)
- 电位器
- 发光二极管
- 交通灯
模板:
typedef int ll;
class DisplayDigit4 {
private:
typedef int ll;
ll dpin;
ll cpin;
ll lpin;
byte num[12] = {0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6, 0x01, 0x00};
public:
void Display(ll w, ll x, ll y, ll z) {
ll d[] = {w, x, y, z};
for (ll digit = 0; digit < 4; ++digit) {
byte val = 0;
bitSet(val, digit);
if (d[digit] == -1) {
val = 0;
d[digit] = 0;
}
shiftOut(dpin, cpin, MSBFIRST, val);
shiftOut(dpin, cpin, LSBFIRST, ~d[digit]);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
delay(2);
}
}
void clear() {
Display(-1, -1, -1, -1);
}
DisplayDigit4(ll Dpin, ll Cpin, ll Lpin) {
dpin = Dpin;
cpin = Cpin;
lpin = Lpin;
pinMode(dpin, OUTPUT);
pinMode(cpin, OUTPUT);
pinMode(lpin, OUTPUT);
clear();
}
void DisplayNum(ll n, bool has0 = false) {
ll top = 0, s[10] = {};
if (n == -1) {
for (ll i = 0; i < 4; ++i) s[top++] = -1;
} else if (n == 0) {
s[top++] = 0;
s[top++] = -1;
s[top++] = -1;
s[top++] = -1;
} else if (has0) {
for (ll i = 1; i <= 4; ++i) {
s[top++] = n % 10;
n /= 10;
}
} else {
for (ll i = 1; i <= 4; ++i) {
s[top++] = n % 10;
n /= 10;
}
for (ll i = 3; i >= 1; --i) {
if (s[top - 1] != 0) break;
s[--top] = -1;
}
top = 4;
}
for (ll digit = 0; digit < 4 && top; ++digit) {
byte val = 0;
bitSet(val, digit);
if (s[top - 1] == -1) {
val = 0;
s[top - 1] = 11;
}
shiftOut(dpin, cpin, MSBFIRST, val);
shiftOut(dpin, cpin, LSBFIRST, ~num[s[--top]]);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
delay(2);
}
}
};
class DisplayDigit1 {
private:
typedef int ll;
ll dpin;
ll cpin;
ll lpin;
byte num[12] = {0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6, 0x01, 0x00};
public:
void Display(ll x) {
if (x == -1) {
shiftOut(dpin, cpin, LSBFIRST, 0xff);
} else {
shiftOut(dpin, cpin, LSBFIRST, ~x);
}
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
}
void clear() {
Display(-1);
}
DisplayDigit1(ll Dpin, ll Cpin, ll Lpin) {
dpin = Dpin;
cpin = Cpin;
lpin = Lpin;
pinMode(dpin, OUTPUT);
pinMode(cpin, OUTPUT);
pinMode(lpin, OUTPUT);
clear();
}
void DisplayNum(ll n) {
if (n == -1) {
shiftOut(dpin, cpin, LSBFIRST, 0xff);
} else {
shiftOut(dpin, cpin, LSBFIRST, ~num[n]);
}
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
}
};
class DotMatrix {
private:
typedef int ll;
typedef bool(*func_bool_void)(void);
ll dpin;
ll cpin;
ll lpin;
public:
void Display(ll pic[]) {
byte dataRow;
byte dataCol;
for (ll i = 0; i < 8; ++i) {
dataRow = 1 << i;
dataCol = ~pic[i];
shiftOut(dpin, cpin, LSBFIRST, dataCol);
shiftOut(dpin, cpin, MSBFIRST, dataRow);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
}
}
void clear() {
ll n[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
Display(n);
}
DotMatrix(ll Dpin, ll Cpin, ll Lpin) {
dpin = Dpin;
cpin = Cpin;
lpin = Lpin;
pinMode(dpin, OUTPUT);
pinMode(cpin, OUTPUT);
pinMode(lpin, OUTPUT);
}
void DotScanDisplay(func_bool_void wait) {
byte dataRow;
byte dataCol;
for (ll i = 0; i < 8; ++i) {
dataRow = 1 << i;
for (ll j = 0; j < 8; ++j) {
dataCol = 1 << j;
shiftOut(dpin, cpin, LSBFIRST, ~dataCol);
shiftOut(dpin, cpin, MSBFIRST, dataRow);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
if (!wait()) {
return;
}
}
}
}
void RowScanDisplay(func_bool_void wait) {
byte dataRow;
byte dataCol;
for (ll i = 0; i < 8; ++i) {
dataRow = 1 << i;
dataCol = 0xff;
shiftOut(dpin, cpin, LSBFIRST, ~dataCol);
shiftOut(dpin, cpin, MSBFIRST, dataRow);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
if (!wait()) {
return;
}
}
}
void ColScanDisplay(func_bool_void wait) {
byte dataRow;
byte dataCol;
for (ll i = 0; i < 8; ++i) {
dataCol = 1 << i;
dataRow = 0xff;
shiftOut(dpin, cpin, LSBFIRST, ~dataCol);
shiftOut(dpin, cpin, MSBFIRST, dataRow);
digitalWrite(lpin, HIGH);
digitalWrite(lpin, LOW);
if (!wait()) {
return;
}
}
}
};
class Button {
private:
typedef int ll;
ll pin;
ll LBtn = 0;
ll Btn = 0;
unsigned long long BtnTime = 0;
const ll BtnDelayTime = 10;
typedef void (*func_void_bool)(bool);
public:
Button(ll p) {
pin = p;
pinMode(pin, INPUT);
}
void GetState(func_void_bool calc) {
ll val = !digitalRead(pin);
if (val != LBtn) {
BtnTime = millis();
LBtn = val;
}
if (millis() - BtnTime >= BtnDelayTime) {
if (val != Btn) {
Btn = val;
calc(val == LOW);
}
}
LBtn = val;
}
ll GetState() {
return !digitalRead(pin);
}
};
class pot {
private:
typedef int ll;
ll pin;
public:
pot(ll pin): pin(pin) {};
ll GetAngle() {
return analogRead(pin);
}
};
class led {
private:
typedef int ll;
ll pin;
public:
led(ll Pin) {
pin = Pin;
pinMode(pin, OUTPUT);
}
void TurnOn() {
digitalWrite(pin, HIGH);
}
void TurnOff() {
digitalWrite(pin, LOW);
}
void TurnTo(ll state) {
digitalWrite(pin, state);
}
};
class traffic {
private:
typedef int ll;
ll redpin;
ll yellowpin;
ll greenpin;
public:
traffic(ll r, ll y, ll g) {
redpin = r;
yellowpin = y;
greenpin = g;
pinMode(redpin, OUTPUT);
pinMode(yellowpin, OUTPUT);
pinMode(greenpin, OUTPUT);
}
void Turn(ll rstate, ll ystate, ll gstate) {
digitalWrite(redpin, rstate);
digitalWrite(yellowpin, ystate);
digitalWrite(greenpin, gstate);
}
};
namespace pin {
const ll lpin = 15;
const ll cpin = 12;
const ll dpin = 14;
}
using namespace pin;
void setup() {
Serial.begin(115200);
}
void loop() {
}
看到这里,就给一个赞吧

1640

被折叠的 条评论
为什么被折叠?



