-
Notifications
You must be signed in to change notification settings - Fork 1
/
spongebob.ino
134 lines (123 loc) · 2.77 KB
/
spongebob.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <ESP32Servo.h>
#include <M5Core2.h>
Servo myservo1;
Servo myservo2;
#define TFT_GREY 0x5AEB
RTC_TimeTypeDef RTCtime;
RTC_TimeTypeDef RTCtime_Now;
uint32_t init_time;
char timeStrbuff[64];
int flag=1;
int p1=0,p2=0;
int servoPin1 = 14; //Right 180->Down , 0->Up
int servoPin2 = 13; //Left 0->Down , 180->Down
void setup() {
// Allow allocation of all timers
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
myservo1.setPeriodHertz(50);
myservo1.attach(servoPin1, 500, 2400);
myservo2.setPeriodHertz(50);
myservo2.attach(servoPin2, 500, 2400);
M5.begin();
M5.Lcd.setBrightness(10);
}
void loop() {
time_show();
M5.Lcd.drawJpgFile(SD, "/a3.jpg");
cheer_up();
M5.Lcd.drawJpgFile(SD, "/a4.jpg");
dance();
cheer_up();
dance();
}
void time_show(){
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextColor(TFT_YELLOW, TFT_BLACK);
init_time=millis();
M5.Lcd.setTextSize(4);
M5.Lcd.setCursor(60,20);
if(flag==1){
M5.Lcd.println("Work Time");
flag=0;
}
else{
M5.Lcd.println("Lunch Time");
flag=1;
}
M5.Lcd.setTextSize(3);
while(millis()-init_time<6000){
M5.Lcd.setCursor(0,140);
M5.Rtc.GetTime(&RTCtime_Now);
sprintf(timeStrbuff,"Time: %02d:%02d:%02d",
RTCtime_Now.Hours,RTCtime_Now.Minutes,RTCtime_Now.Seconds);
M5.Lcd.println(timeStrbuff);
}
}
void init_servo(){
myservo2.write(90);
myservo1.write(90);
delay(1000);
}
void cheer_up(){
init_servo();
for (p1= 90,p2=90; p1<=180; p1+= 1,p2-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p2= 0,p1=180; p2<=90; p2+= 1,p1-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p1= 90,p2=90; p1<=180; p1+= 1,p2-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p2= 0,p1=180; p2<=90; p2+= 1,p1-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
}
void dance(){
myservo2.write(90);
myservo1.write(180);
delay(1000);
for (p1= 180,p2=90; p2>0; p1-= 1,p2-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p2= 0,p1=90; p2<=90; p2+= 1,p1+=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p1= 180,p2=90; p2>0; p1-= 1,p2-=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
for (p2= 0,p1=90; p2<=90; p2+= 1,p1+=1) {
myservo1.write(p1);
delay(5);
myservo2.write(p2);
delay(5);
}
}
static uint8_t conv2d(const char* p) {
uint8_t v = 0;
if ('0' <= *p && *p <= '9')
v = *p - '0';
return 10 * v + *++p - '0';
}