-
Notifications
You must be signed in to change notification settings - Fork 0
/
WoddenWifiHeartBox.ino
401 lines (326 loc) · 11.4 KB
/
WoddenWifiHeartBox.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h> // include library for real-time clock module
#include <EEPROM.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino resetpin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int maxLength = 63;
int motorPin = 5;
int ledPin = 2;
int switchPin = 12; // digital input pin for magnetic switch
int buttonPin = 27;
bool runProt1 = false;
int waitTime = 3600000000;//3600000000//10*1000000
RTC_DS1307 rtc; // create object for real-time clock module
char *stringMorningBank[] = {"Buenos dias mi amor <3, te amo", "OOOLLLAAAA BounGioRnO", "Pov: hoy tendras una mana bonita", "Ojala sea sabado hoy", "BONISHAAAAAAA, primer mensaje del dia :)", "teee quierroooo y amo, gud morning", "Buenos dias Rafaela - 'la caja de madera 2023'", "WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOW buenos dias ;p", "un nuevo dia bonito para la mas bonita"};
char *stringBank[] = {"te amo","Hola Mi amor!!!!! Te amo mucho, espero que tu dia te este llendo hermoso hoy :)",
"Olaaaa sabes, creo que tu eres la mas hermosa de este mundo",
"MIII RAFIIIIIIIIIIIIII....... Teamo jeje",
"Que le dijo un enamorado al otro? . . . TEAMOMAS... ja ja ja. no enserio, te amo mas",
"HEyeyYyYyYyy, no se cuando vas a leer esto... PEROOOOO espero que tu dia sea hermoso hoy",
"Today is a good day :)",
"Amor, eres mi amor JAJAJAJAJA",
"ERROR ERROR ERROR: jk no hay ningun error, jeje TE AMO",
"Historia 1: Sabes cuando primero te vi en nuestro primer date, recuerdo que lo que primero me di cuenta era de lo pequenita que eras jejeje",
"Creo que despues de escribir todas estos mensajes voy a aver escrito mas que un essay jejeje, Pof tu nobio es un English Major",
"Se que esto te pueda parecer un toque cringie, pero enverdad eres mi mundo entero (^^)'",
"'(^^)'-[<3] !",
"OLAAAAAA",
"OLAAAAA espero que hoy tengas un dia hermoso :)",
"Oyeee, pero si no es mi nobia la mas sexc, intelligente, hermosa, prechiosa, carinosa, amadora, suave, rica, hermosa, preciosa, y prefecta ;) wachu up too?",
"Knock Knock, buenos DIAS BONISHAAA!!!!!!!!!!",
"qUE ORA ES? hmmmmmmm SON LAS TE AMO EN PUNTO ;0",
"SABES te amo mucho, Y espero que este mensaje te haga el dia hoy :D!!!!!!",
"IlobeuMore<3",
"bONISHAAA bonishaaaa, te amo :))))",
"*Historia 1* Jejeje sabias que cuando primero te conosi en nuestro primer date, lo que primero me di cuenta es de lo pequene que eras jejeje",
"AMORRRRRRRR BESAMEEE",
"olaaaAAA bonisha!!! Si vees esto llamame :)",
"*CUPON 1* UN SOLO USO: Mandame este numero en txt 1223443ASDWRERF343",
"*cOOL FACT* Buenossss diasss prechiosa, sabias que yo te amo mas ;)... no?! bueno ahora sabes jeje",
"Ding Dong! Es un mensaje: Espero que hoy tengas un dia hermoso :3",
"WOOOOOOOOOOOOOOOF... perdon, Coco queria que te mandare eso.. se supone que dice OLA? who knows jeje",
"BONISAHAasasdhsdiufhwieufdywyefdghhjd, llamame ;)",
"*Historia 2* Ya conoses esta, pero yo trate de verte a los labios como millll veces en nuestras primeras dates para ver si me besabas JAJAJAAJ",
"DIIINGGGDONGGGG ES TU BONISHO MANDANOTE UN BESO!!! SUERTE HOYYYY",
"Ola amor :) Nose que pasa hoy, pero siento que este mensaje va a salir cuando mas nessesites. You got this <3 te amo",
"*CUPON 2* MANDAME UN TEXTO QUE DICE 'JAJAJA GANE' y vamos a salir al restaurante de tuy choice, yo invito ;)",
"*Cupon TRESSS* Secreto jejejeje, ;0 mandame una foto de este mensaje si lo haces rapido ganas una sorpresa especial",
"*Historia 3* No te voy a mentir, tu comida es divina, de verdad divina y me enamora... PERO tu hot chocolate sabe a agua JEJEJE TE AMO AMOR",
"OLAAAAAAAAAAAAAAAAAAAAA, HOY ES TU DIA D ELA SUERTE! HAVE FUNNNN",
"Ola bonisha, te extrano :)",
"Te amo <3",
"*Historia 4* sabes, tienes suerte que no pueda poner emojies aqui, sino WOw, lo llenaria con emojies jeje",
"pob tu nobio te programo esto para decirte que te quiero y ama mucho, mandale una foto de ti, te extrana probablemente",
"*Historia 5* Esta es para que no te olvides que te tiraste dos pedos la primera noche que dormimos juntos, la primera jejeje",
"Espero que este mensaje salga bien porque TE AMOOOOOOOOOOOOOO",
"FELIZZZZZ DIAAAAAAAAAAAAAAAAA WOOOWWWWW",
"Pob, llamame si quieres que ponga mas mensajes jejejej",
"*CUPON 4* foto sexc gratis cuando quiera jejeje ;)",
"RAFIIIIIIIIIII, te amo jejeje espero que tengas un hermoso dia",
"Besame",
"te adoro",
"mi hermosa",
"te amo MASSSS",
"BONISHAAA ATRAPE A COCO AQUI MIRA *WROOOOFWROOOF*...ronca, send help",
"Pob estoy atrapado aqui, te amo, help, jejeje jkjk",
"abrazme ",
"TAMQNEEMYQBYAPTLNAQNQD",
"Sabias que te estoy escribiendo todo esto Enero 1, jejeje te amo amor y siempre te amare",
"OLAAAAA BELLLAAAAAA dame un bethzo :3",
"<Te amo mas3",
"<<<<<<<33333333333333",
"Quiero decirte que te amo ",
"OLAAAA MI REINA, TEN UN HERMOSO DIA",
"I love you more :)<3"};
void setup()
{
Serial.begin(115200);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
//Wire.begin(21, 22);
delay(4000);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
// Clear the buffer.
display.clearDisplay();
displayMessage("");
delay(2000);
display.clearDisplay();
delay(2000);
pinMode(motorPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT); // set digital input pin for magnetic switch as input
//pinMode(buttonPin, INPUT);
//attachInterrupt(digitalPinToInterrupt(buttonPin), buttonInterruptHandler2, CHANGE);
firstTurnTest(8900);
turnLedOn();
delay(200);
turnLedOff();
// Initialize real-time clock module
//Wire.begin(18, 19);
}
void loop() {
// Check if the box is closed
bool isClosed = digitalRead(switchPin);
Serial.println(isClosed);
// if(runProt1 == true){
// receivedMessage();
// chooseMsg();
// runProt1 = false;
// }
while(!isClosed){
isClosed = digitalRead(switchPin);
turnLedOn();
delay(2000);
turnLedOff();
delay(1000);
displayMessage("hola! porfavor cierrame :)");
Serial.println(isClosed);
Serial.println("DENTRO DE LOOOOPP");///////////////////////
}
turnLedOn();
delay(200);
turnLedOff();
delay(100);
turnLedOn();
delay(200);
turnLedOff();
delay(100);
turnLedOn();
delay(200);
turnLedOff();
delay(100);
Serial.print("EXITED BOX");//////////////////////////////////////
// Get the current time from the real-time clock module
DateTime now = rtc.now();
Serial.println(now.hour());
// Check if it is currently between 11pm and 11am
if (now.hour() < 11 || now.hour() >= 23) {//now.hour() < 11 || now.hour() >= 23
// Go to deep sleep and do not do anything
Serial.println("DENTRO DE relojWait");///////////////////////
display.setCursor(0, 5);
display.println("");//63
display.display();
ESP.deepSleep(waitTime);
}else{
if(now.hour() <= 12 && now.hour() >= 10){
displayAndCheckMorning(now.day());
}
// Generate a random number between 0 and 100
int r = random(0, 100);
// If the random number is less than 25, enter "received message mode"
if (r < 10) {
// Turn on the motor for 7 seconds
Serial.println("DENTRO DE recievbed message ");///////////////////////
EEPROM.write(199, now.day());
receivedMessage();
chooseMsg();
displayMessage("Ningun mensaje por ahora, vuelve luego!");
ESP.deepSleep(waitTime);
}else{//missed
// if(now.hour() > 21 || now.hour() < 24){//emergencyR
// emergencyR(now.day());
// }
displayMessage("Ningun mensaje por ahora, vuelve luego!");
Serial.println("DENTRO DE esperafinal ");///////////////////////
delay(100);
ESP.deepSleep(waitTime);
}
}//else
}//loop
void emergencyR(int dayy){
if( EEPROM.read(199) != dayy){
receivedMessage();
chooseMsg();
}
return;
}
void displayAndCheckMorning(int dayy){//now.day()
if( EEPROM.read(200) != dayy){
EEPROM.write(200, dayy);
receivedMessage();
morningRoutine();
return;
}else{
return;
}
}//displayAndCheckMorning
void morningRoutine(){
String msg = "";
int r = random(0,10);
displayMessage(stringMorningBank[r]);
delay(40000);
displayMessage(msg);
}//morningRoutine
void receivedMessage(){
unsigned long startTime = millis();
unsigned long currentMillis = startTime;
turnLedOn();
while(digitalRead(switchPin)){
currentMillis = millis();
if( (currentMillis - startTime) >= 120000){
turnMotorOn();
delay(8900);
turnMotorOff();
}else{
startTime = currentMillis;
}//timeLoop
}//while
turnLedOn();
delay(100);
turnLedOff();
delay(100);
turnLedOn();
delay(50);
turnLedOff();
}
void turnMotorOn(){
digitalWrite(motorPin, HIGH);
}//turnMotorOn
void turnMotorOff(){
digitalWrite(motorPin, LOW);
}//turnMotorOff
void turnLedOn(){
digitalWrite(ledPin, HIGH);
}//turnLedOn
void turnLedOff(){
digitalWrite(ledPin, LOW);
}//turnLedOff
void firstTurnTest(int timeMilli){
turnMotorOn();
delay(timeMilli);
turnMotorOff();
}
void displayMessage(String msg){
display.setTextSize(1);//AT SIZE 2 UPTO J, AT SIZE 1 3 T
display.setTextColor(WHITE);
display.setCursor(0, 5);
int lengthh = msg.length();
String message = "";
if (lengthh > maxLength){
int amounts = (lengthh/63) - 1;
int count = 0;
for(int i = 0; i < amounts; i++){
count = i;
message = msg.substring(63*i, (63 + (63*i)) );
display.clearDisplay();
display.println(message);//63
display.display();
delay(6000);
display.setCursor(0, 5);
}
message = msg.substring((63 + (63*count)) );
display.clearDisplay();
display.setCursor(0, 5);
display.println(message);//63
display.display();
delay(6000);
}else{
display.clearDisplay();
display.println(msg);
display.display();
}
}
void chooseMsg(){
int r = chooseNum();
insertToMem(r);
displayMessage(stringBank[r]);
delay(40000);
}
int chooseNum(){
int num = random(1,60);
clearProt();
for(int i = 0; i < 512; i++){
if(EEPROM.read(i) == num){
return num = chooseNum();
}
}//for
return num;
}//chooseNum
void clearProt(){
int count = 0;
for(int i = 0; i < 512; i++){
int red = EEPROM.read(i);
if(red != 0){
count = count + 1;
}
}
if(count >= 59){
eraseEEPROM();
}
}//clearProt
void insertToMem(int num){
for(int i = 0; i < 512; i++){
int red = EEPROM.read(i);
if(red == 0){
}else{
EEPROM.write(i, num);
return;
}
}
}
void buttonInterruptHandler() {
receivedMessage();
chooseMsg();
}
void buttonInterruptHandler2() {
runProt1 = true;
loop();
}
void eraseEEPROM(){
for (int i = 0; i < 512; i++) {
EEPROM.write(i, 0);
}
EEPROM.commit();
delay(500);
}