这是我使用的全局变量
int cartoon = 0;
float l;
int vt = 0;
int a1t = 0;
float a1l;
int a2t = 0;
float a2l;
int intervala2 = 1000;
int intervala1 = 1000;
int interval = 1000;
boolean va;
float r = 120;
float v = 0;
boolean t1 = true;
float pi = 3.1415926;
int count1 = 0;
int count2 = 0;
int x1 = 0;
int x2 = 240;
int astate = 1;
boolean lastva;
int onlyone = 0;
int laststate;
boolean fix;
float a1[240];
3.这是屏幕和Arduino的基本设置
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
gfx->begin();
gfx->fillScreen(WHITE);
pinMode(A0,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
startstage1();
startstage2();
// analogReference(INTERNAL);
4.这是代码的主要部分,它将重复运行。稍后将介绍所涉及的功能或过程。
void loop() {
// put your main code here, to run repeatedly:
// startstage1();
// startstage2();
if (cartoon == 0){
startstage1();
startstage2();
cartoon = 1;
}
else{
// // ------------------------------------------
gfx->drawLine(0, 40, 40, 40, BLUE);
gfx->drawLine(40, 0, 40, 40, BLUE);
gfx->drawLine(40, 40, 240, 40, BLUE);
gfx->drawLine(0, 150, 240, 150, BLUE);
firststage();
stateshow();
if (laststate == 1){
currentmeasure1one();
}
if (laststate == 2){
currentmeasure1two();
}
if (laststate == 3){
currentmeasure1three();
}
if (laststate == 4){
voltagemeasure();
}
}
//------------------------------------------
}
//--------------------------------------
5.此电流和电压部分的初始显示作为初始显示与其他部分略有不同。
if (onlyone == 0){
lastva = amvolchange();
onlyone = 1;
if (amvolchange() == true){
laststate = 4;
// gfx->setCursor(0, 0);
// gfx->setTextColor(WHITE, WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("A");
gfx->setCursor(0, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("V");
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("50V");
}
else{
if (currentstatechange() == 2){
laststate = 2;
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
gfx->setCursor(142, 10);
gfx->setTextColor(RED, RED);
gfx->setTextSize(3,3,3);
gfx->println("100mA");
}
if (currentstatechange() == 1){
laststate = 1;
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("10A");
}
if (currentstatechange() == 3){
laststate = 3;
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("1mA");
}
// gfx->setCursor(0, 0);
// gfx->setTextColor(WHITE, WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("V");
gfx->setCursor(0, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("A");
}
}
}
6.这是 电流部分和电压部分的主要显示。它由几个程序组成。
void stateshow(){
if (lastva != amvolchange() || currentstatechange() != laststate){
Serial.println(currentstatechange());
Serial.println(laststate);
Serial.println("----------------------------------------");
lastva = amvolchange();
if (amvolchange() == true){
if (laststate != 4){
gfx->fillScreen(WHITE);
int a1[240];
for (int i = 0;i < 240;i++){
a1[i] = 0.0;
}
}
// gfx->setCursor(0, 0);
// gfx->setTextColor(WHITE, WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("A");
gfx->setCursor(0, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("V");
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
// if (laststate == 1){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10A");
// }
// if (laststate == 2){
// gfx->setCursor(142, 10);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(3,3,3);
// gfx->println("100mA");
// }
// if (laststate == 3){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("1mA");
// }
// if (laststate == 4){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10V");
// }
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("50V");
laststate = 4;
}
else{
gfx->fillScreen(WHITE);
int a1[240];
for (int i = 0;i < 240;i++){
a1[i] = 0.0;
}
// gfx->setCursor(0, 0);
// gfx->setTextColor(WHITE, WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("V");
gfx->setCursor(0, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("A");
if (currentstatechange() == 1){
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
// if (laststate == 1){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10A");
// }
// if (laststate == 2){
// gfx->setCursor(142, 10);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(3,3,3);
// gfx->println("100mA");
// }
// if (laststate == 3){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("1mA");
// }
// if (laststate == 4){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10V");
// }
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("10A");
laststate =1;
}
if (currentstatechange() == 2){
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
// if (laststate == 1){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10A");
// }
// if (laststate == 2){
// gfx->setCursor(142, 10);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(3,3,3);
// gfx->println("100mA");
// }
// if (laststate == 3){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("1mA");
// }
// if (laststate == 4){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10V");
// }
gfx->setCursor(142, 10);
gfx->setTextColor(RED, RED);
gfx->setTextSize(3,3,3);
gfx->println("100mA");
laststate= 2;
}
if (currentstatechange() == 3){
gfx->setCursor(52, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("MAX:");
// if (laststate == 1){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10A");
// }
// if (laststate == 2){
// gfx->setCursor(142, 10);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(3,3,3);
// gfx->println("100mA");
// }
// if (laststate == 3){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("1mA");
// }
// if (laststate == 4){
// gfx->setCursor(152, 0);
// gfx->setTextColor(WHITE,WHITE);
// gfx->setTextSize(4,4,4);
// gfx->println("10V");
// }
gfx->setCursor(152, 0);
gfx->setTextColor(RED, RED);
gfx->setTextSize(4,4,4);
gfx->println("1mA");
laststate= 3;
}
}
}
}
//----------------------------------------------
}
//--------------------------------------
7.这是初始动画。
void startstage1(){
while (count1 < 48){
Serial.println("NO");
gfx->drawLine(120+r*cos(pi+v), 120+r*sin(pi+v), 120+r*cos(-pi/2+v), 120+r*sin(-pi/2+v), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(-pi/2+v), 120+r*sin(-pi/2+v), 120+r*cos(v), 120+r*sin(v), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(v), 120+r*sin(v), 120+r*cos(pi/2+v), 120+r*sin(pi/2+v), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(pi/2+v), 120+r*sin(pi/2+v), 120+r*cos(pi+v), 120+r*sin(pi+v), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(pi+v+pi/4), 120+r*sin(pi+v+pi/4), 120+r*cos(-pi/2+v+pi/4), 120+r*sin(-pi/2+v+pi/4), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(-pi/2+v+pi/4), 120+r*sin(-pi/2+v+pi/4), 120+r*cos(v+pi/4), 120+r*sin(v+pi/4), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(v+pi/4), 120+r*sin(v+pi/4), 120+r*cos(pi/2+v+pi/4), 120+r*sin(pi/2+v+pi/4), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(pi/2+v+pi/4), 120+r*sin(pi/2+v+pi/4), 120+r*cos(pi+v+pi/4), 120+r*sin(pi+v+pi/4), BLUE);
if (t1 == true){
delay(500);
}
gfx->drawLine(120+r*cos(pi+v), 120+r*sin(pi+v), 120+r*cos(-pi/2+v), 120+r*sin(-pi/2+v), WHITE);
gfx->drawLine(120+r*cos(-pi/2+v), 120+r*sin(-pi/2+v), 120+r*cos(v), 120+r*sin(v), WHITE);
gfx->drawLine(120+r*cos(v), 120+r*sin(v), 120+r*cos(pi/2+v), 120+r*sin(pi/2+v), WHITE);
gfx->drawLine(120+r*cos(pi/2+v), 120+r*sin(pi/2+v), 120+r*cos(pi+v), 120+r*sin(pi+v), WHITE);
gfx->drawLine(120+r*cos(pi+v+pi/4), 120+r*sin(pi+v+pi/4), 120+r*cos(-pi/2+v+pi/4), 120+r*sin(-pi/2+v+pi/4), WHITE);
gfx->drawLine(120+r*cos(-pi/2+v+pi/4), 120+r*sin(-pi/2+v+pi/4), 120+r*cos(v+pi/4), 120+r*sin(v+pi/4), WHITE);
gfx->drawLine(120+r*cos(v+pi/4), 120+r*sin(v+pi/4), 120+r*cos(pi/2+v+pi/4), 120+r*sin(pi/2+v+pi/4), WHITE);
gfx->drawLine(120+r*cos(pi/2+v+pi/4), 120+r*sin(pi/2+v+pi/4), 120+r*cos(pi+v+pi/4), 120+r*sin(pi+v+pi/4), WHITE);
t1 = false;
r = r - 5;
v = v + 0.3;
Serial.println("YES");
count1 = count1 + 1;
Serial.println(count1);
}
}
void startstage2(){
if (count1 >= 48){
gfx->setCursor(60, 60);
gfx->setTextColor(RED, RED);
gfx->setTextSize(3,3,3);
gfx->println("ShaFeng");
gfx->setCursor(60, 120);
gfx->setTextColor(YELLOW, YELLOW);
gfx->setTextSize(3,3,3);
gfx->println("VeriMake");
delay(5000);
gfx->setCursor(60, 60);
gfx->setTextColor(WHITE, WHITE);
gfx->setTextSize(3,3,3);
gfx->println("ShaFeng");
gfx->setCursor(60, 120);
gfx->setTextColor(WHITE, WHITE);
gfx->setTextSize(3,3,3);
gfx->println("VeriMake");
}
}
int currentstatechange() {
int statecheck = 0;
int flag;
flag = digitalRead(3);
if (flag == 1){
fix = false;
}
if (fix == false){
if (flag == 0){
statecheck = 1;
}
delay(50);
if (flag == 0){
statecheck = 2;
}
if (statecheck == 2){
if (astate == 3){
astate = 1;
fix = true;
}
else{
astate = astate + 1;
fix = true;
}
}
}
return astate;
}
8.这是检测您是否更改为电压部分或电流部分。
boolean amvolchange() {
if (digitalRead(2) == 0){
va= true;
}
else{
va = false;
}
return va;
}
//void finalcon(){
// if (amvolchange() == true){
// voltagemeasyre();
// }
// else{
// if (astate == 1){
// currentmeasure1one();
// }
// if (astate == 2){
// currentmeasure1two();
// }
// if (astate == 3){
// currentmeasure1three();
// }
// }
//}
9.这是电流部分三个档位的显示。它将用于代码的主要部分。
void currentmeasure1one(){
float amone;
float c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-a1[i]/10*110, WHITE);
}
amone = analogRead(A0);
c = ((amone*(4.69/1024.0)/10.0)*10.0);
for (int i = 0;i < 239;i++){
a1[i] = a1[i+1];
}
a1[239] = c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-a1[i]/10*110, RED);
}
if (intervala1 == 1000){
if (a1t == 0){
gfx->setCursor(30, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
a1t = 1;
}
if (a1t == 1){
gfx->setCursor(30, 170);
gfx->setTextColor(WHITE,WHITE);
gfx->setTextSize(5,5,5);
gfx->println(a1l);
gfx->setCursor(30, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
a1l = c;
gfx->setCursor(200, 170);
gfx->setTextColor(RED,RED);
gfx->setTextSize(5,5,5);
gfx->println("A");
intervala1 = 0;
// unit : A
}
}
intervala1 = intervala1 + 100;
}
void currentmeasure1three(){
float amthree;
float c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/10*110), WHITE);
}
amthree = analogRead(A0);
c = ((amthree*(5.0/1024.0)*1000));
for (int i = 0;i < 239;i++){
a1[i] = a1[i+1];
}
a1[239] = c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/10*110), RED);
}
gfx->setCursor(80, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
delay(500);
gfx->setCursor(80, 170);
gfx->setTextColor(WHITE,WHITE);
gfx->setTextSize(5,5,5);
gfx->println(c);
gfx->setCursor(200, 170);
gfx->setTextColor(WHITE,WHITE);
gfx->setTextSize(5,5,5);
gfx->println("uA");
// unit : uA
}
void currentmeasure1two(){
float amtwo;
float c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/100*110), WHITE);
}
amtwo = analogRead(A0);
c = ((amtwo*(5.0/1024.0)*100));
for (int i = 0;i < 239;i++){
a1[i] = a1[i+1];
}
a1[239] = c;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/100*110), RED);
}
if (intervala2 == 1000){
if (a2t == 0){
gfx->setCursor(30, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
a2t = 1;
}
if (a2t == 1){
gfx->setCursor(30, 170);
gfx->setTextColor(WHITE,WHITE);
gfx->setTextSize(5,5,5);
gfx->println(a2l);
gfx->setCursor(30, 170);
gfx->setTextColor(RED,RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
a2l = c;
gfx->setCursor(160, 170);
gfx->setTextColor(RED,RED);
gfx->setTextSize(5,5,5);
gfx->println("mA");
intervala2 = 0;}}
intervala2 = intervala2 + 100;
// unit : mA
}
10.这是电压的显示 , 它用于主要部分。
void voltagemeasure(){
float c;
int volt;
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/50*110), WHITE);
}
volt = analogRead(A0);
c = volt*(4.69/1024.0)*10.01;
for (int i = 0;i < 239;i++){
a1[i] = a1[i+1];
}
a1[239] = c;
// for (int i = 0;i < 240;i++){
// Serial.println(c4[i]);
// }
for (int i = 0;i < 240;i++){
gfx->drawPixel(i+1,150-int(a1[i]/50*110), RED);
}
if (interval == 1000){
if(vt == 0){
gfx->setCursor(30, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
vt = 1;}
if (vt == 1){
gfx->setCursor(30, 170);
gfx->setTextColor(WHITE,WHITE);
gfx->setTextSize(5,5,5);
gfx->println(l);
gfx->setCursor(30, 170);
gfx->setTextColor(RED, RED);
gfx->setTextSize(5,5,5);
gfx->println(c);
l = c;
gfx->setCursor(200, 170);
gfx->setTextColor(RED,RED);
gfx->setTextSize(5,5,5);
gfx->println("V");
interval = 0;
}
}
interval = interval + 100;
// unit : V
}