Hi,
I'm currently building drinking game using Arduino. Everything works as intended on the Uno, but now i soldered everything on the Pro Mini and now it keeps resetting. In the setup function I send a HIGH signal to pin 9, 10 and 12 for 4 sec, one after another. By doing this I activate the relays, which leads to the pumps going on. The first time I ran the programm on the pro mini, the first pump pumped for 4 sec as intended, but when it turned on the second pump, the arduino reset and it was stuck in a loop doing resets every few seconds. After that, I put 2 capacitors between the VCC and the GRD pin, which fixed the problem. Next I pressed the button to send a HIGH signal to pin 13, but then the arduino reset again and it was stuck in a reset loop again. How do I deal with this problem, it probably has something to do with the voltage regulator on the pro mini. Do I need more capacitors and if yes, where do i have to put them.
Thx in advance.
Fabian
PS. Sry for the bad schematic, I used a color code for some pins because it would be to hard to connect them by lines
PPS. The Code is german but I hope u get the gist of it
PPPS. I'm not allowed to upload the PDF of my Schematic because I'm a new user. I don't know if the Screenshot I took helps at all
The Code:
include <arduino-timer.h>
//pitch.h
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
//pitch.h end
//Pins
int A0_Pin = A0;
int A1_Pin = A1;
int A2_Pin = A2;
int A3_Pin = A3;
int A4_Pin = A4;
int Rdy_LED = 2;
int Stp_LED = 3;
int Prost_LED = 4;
int Berenzen_LED = 5;
int Jaeger_LED = 6;
int Tequila_LED = 7;
int Ex_LED = 8;
int Berenzen_Pump = 9;
int Jaeger_Pump = 10;
int Tequila_Pump = 12;
int buzzer = 11;
int Knopf = 13;
//Variablen
int Status = 0;
int LEDBlock = 0;
int lux_Grenze = 200;
int A0_Start;
int A1_Start;
int A2_Start;
int A3_Start;
int A4_Start;
int Berenzen_Time=0;
int Jaeger_Time=0;
int Tequila_Time=0;
long Dauer;
long TimerStart;
int Noten[]={NOTE_A5, NOTE_G6};
int Noteni = 0;
int blinken = 0;
//LED Blink
int P_LED_i = 0;
int B_LED_i = 0;
int J_LED_i = 0;
int T_LED_i = 0;
int E_LED_i = 0;
auto timer_LED = timer_create_default();
auto timer_Pump = timer_create_default();
///////////////////////////////////////////////////////////////////////////
///////////////////////////////LED Blink//////////////////////////////////
///////////////////////////////////////////////////////////////////////////
bool toggle_P_LED(void *) {
digitalWrite(Prost_LED, !digitalRead(Prost_LED));
if(P_LED_i >=10)
{
digitalWrite(Prost_LED, LOW);
StartLuxSetzen();
Status = 0;
LEDBlock = 0;
digitalWrite(Rdy_LED, HIGH);
digitalWrite(Stp_LED, LOW);
P_LED_i = 0;
return false;
}
P_LED_i++;
return true;
}
bool toggle_B_LED(void *) {
digitalWrite(Berenzen_LED, !digitalRead(Berenzen_LED));
if(Status == 0)
{
digitalWrite(Berenzen_LED, LOW);
B_LED_i = 0;
LEDBlock = 0;
return false;
}
B_LED_i++;
return true;
}
bool toggle_J_LED(void *) {
digitalWrite(Jaeger_LED, !digitalRead(Jaeger_LED));
if(Status == 0)
{
digitalWrite(Jaeger_LED, LOW);
J_LED_i = 0;
LEDBlock = 0;
return false;
}
J_LED_i++;
return true;
}
bool toggle_T_LED(void *) {
digitalWrite(Tequila_LED, !digitalRead(Tequila_LED));
if(Status == 0)
{
digitalWrite(Tequila_LED, LOW);
T_LED_i = 0;
LEDBlock = 0;
return false;
}
T_LED_i++;
return true;
}
bool toggle_E_LED(void *) {
digitalWrite(Ex_LED, !digitalRead(Ex_LED));
digitalWrite(Rdy_LED, !digitalRead(Rdy_LED));
digitalWrite(Stp_LED, !digitalRead(Stp_LED));
if(Noteni>=2)
{
Noteni = 0;
}
tone(buzzer, Noten[Noteni]);
if(E_LED_i >=20)
{
digitalWrite(Ex_LED, LOW);
E_LED_i = 0;
StartLuxSetzen();
Status = 0;
LEDBlock = 0;
noTone(buzzer);
digitalWrite(Rdy_LED, HIGH);
digitalWrite(Stp_LED, LOW);
return false;
}
E_LED_i++;
Noteni++;
return true;
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////LED Blink END///////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////Auffuellen//////////////////////////////////
///////////////////////////////////////////////////////////////////////////
bool toggle_B_Pump (void * )
{
digitalWrite(Berenzen_Pump, LOW);
StartLuxSetzen();
Status = 0;
digitalWrite(Rdy_LED, HIGH);
digitalWrite(Stp_LED, LOW);
return false;
}
bool toggle_J_Pump (void * )
{
digitalWrite(Jaeger_Pump, LOW);
StartLuxSetzen();
Status = 0;
digitalWrite(Rdy_LED, HIGH);
digitalWrite(Stp_LED, LOW);
return false;
}
bool toggle_T_Pump (void * )
{
digitalWrite(Tequila_Pump, LOW);
StartLuxSetzen();
Status = 0;
digitalWrite(Rdy_LED, HIGH);
digitalWrite(Stp_LED, LOW);
return false;
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////Auffuellen END//////////////////////////////
///////////////////////////////////////////////////////////////////////////
void setup() {
pinMode(Rdy_LED, OUTPUT);
pinMode(Stp_LED, OUTPUT);
pinMode(Prost_LED, OUTPUT);
pinMode(Berenzen_LED, OUTPUT);
pinMode(Jaeger_LED, OUTPUT);
pinMode(Tequila_LED, OUTPUT);
pinMode(Ex_LED, OUTPUT);
pinMode(Berenzen_Pump, OUTPUT);
pinMode(Jaeger_Pump, OUTPUT);
pinMode(Tequila_Pump, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(Knopf, INPUT);
Serial.begin(9600);
A0_Start = analogRead(A0_Pin);
A1_Start = analogRead(A1_Pin);
A2_Start = analogRead(A2_Pin);
A3_Start = analogRead(A3_Pin);
A4_Start = analogRead(A4_Pin);
digitalWrite(Stp_LED, HIGH);
Status = 0;
LEDBlock = 0;
digitalWrite(Berenzen_Pump, HIGH);
delay(4000);
digitalWrite(Berenzen_Pump, LOW);
digitalWrite(Jaeger_Pump, HIGH);
delay(4000);
digitalWrite(Jaeger_Pump, LOW);
digitalWrite(Tequila_Pump, HIGH);
delay(4000);
digitalWrite(Tequila_Pump, LOW);
digitalWrite(Berenzen_LED, HIGH);
while(Berenzen_Time == 0)
{
if(digitalRead(Knopf)==HIGH)
{
TimerStart = millis();
while(digitalRead(Knopf)==HIGH)
{
digitalWrite(Berenzen_Pump, HIGH);
}
Dauer = millis() - TimerStart;
digitalWrite(Berenzen_Pump, LOW);
Berenzen_Time = Dauer;
}
}
digitalWrite(Berenzen_LED, LOW);
digitalWrite(Jaeger_LED, HIGH);
while(Jaeger_Time == 0)
{
if(digitalRead(Knopf)==HIGH)
{
TimerStart = millis();
while(digitalRead(Knopf)==HIGH)
{
digitalWrite(Jaeger_Pump, HIGH);
}
Dauer = millis() - TimerStart;
digitalWrite(Jaeger_Pump, LOW);
Jaeger_Time = Dauer;
}
}
digitalWrite(Jaeger_LED, LOW);
digitalWrite(Tequila_LED, HIGH);
while(Tequila_Time == 0)
{
if(digitalRead(Knopf)==HIGH)
{
TimerStart = millis();
while(digitalRead(Knopf)==HIGH)
{
digitalWrite(Tequila_Pump, HIGH);
}
Dauer = millis() - TimerStart;
digitalWrite(Tequila_Pump, LOW);
Tequila_Time = Dauer;
}
}
digitalWrite(Tequila_LED, LOW);
digitalWrite(Stp_LED, LOW);
digitalWrite(Rdy_LED, HIGH);
}
void loop()
{
timer_LED.tick();
timer_Pump.tick();
if(Status == 0)
{
if(analogRead(A0_Pin)> (A0_Start + lux_Grenze))
{
Status = 1;
}
if(analogRead(A1_Pin)> (A1_Start + lux_Grenze))
{
Status = 2;
}
if(analogRead(A2_Pin)> (A2_Start + lux_Grenze))
{
Status = 3;
}
if(analogRead(A3_Pin)> (A3_Start + lux_Grenze))
{
Status = 4;
}
if(analogRead(A4_Pin)> (A4_Start + lux_Grenze))
{
Status = 5;
}
}
Execute(Status);
}
void StartLuxSetzen()
{
A0_Start = analogRead(A0_Pin);
A1_Start = analogRead(A1_Pin);
A2_Start = analogRead(A2_Pin);
A3_Start = analogRead(A3_Pin);
A4_Start = analogRead(A4_Pin);
}
void Execute (int Strafe)
{
switch(Strafe)
{
case 1:
if(LEDBlock == 0)
{
digitalWrite(Rdy_LED, LOW);
digitalWrite(Stp_LED, HIGH);
LEDBlock = 1;
timer_LED.every(500, toggle_P_LED);
}
break;
case 2:
if(LEDBlock == 0)
{
digitalWrite(Rdy_LED, LOW);
digitalWrite(Stp_LED, HIGH);
LEDBlock = 1;
timer_LED.every(500, toggle_B_LED);
}
if(digitalRead(Knopf) == HIGH)
{
digitalWrite(Berenzen_Pump, HIGH);
timer_Pump.every(Berenzen_Time, toggle_B_Pump);
}
break;
case 3:
if(LEDBlock == 0)
{
digitalWrite(Rdy_LED, LOW);
digitalWrite(Stp_LED, HIGH);
LEDBlock = 1;
timer_LED.every(500, toggle_J_LED);
}
if(digitalRead(Knopf) == HIGH)
{
digitalWrite(Jaeger_Pump, HIGH);
timer_Pump.every(Jaeger_Time, toggle_J_Pump);
}
break;
case 4:
if(LEDBlock == 0)
{
digitalWrite(Rdy_LED, LOW);
digitalWrite(Stp_LED, HIGH);
LEDBlock = 1;
timer_LED.every(500, toggle_T_LED);
}
if(digitalRead(Knopf) == HIGH)
{
digitalWrite(Tequila_Pump, HIGH);
timer_Pump.every(Tequila_Time, toggle_T_Pump);
}
break;
case 5:
if(LEDBlock == 0)
{
digitalWrite(Rdy_LED, LOW);
digitalWrite(Stp_LED, HIGH);
LEDBlock = 1;
timer_LED.every(500, toggle_E_LED);
}
break;
default:
break;
}
}
