Arduino Mega 2560 pins initialize HIGH at startup instead of LOW

Customer:

I’ve been working with Arduino platforms for 2-3 years and recently received an Arduino Mega 2560 board as a gift. When I started working with simple button examples, I noticed something strange. I wrote a program that should turn on an LED on pin 8 when pressing a START button (press once and the output turns on, no need to hold it) and turn off the LED when pressing a STOP button - basically an RS latch relay with button support. Everything works fine, but I soon discovered that when powering up the Arduino board, pin 8 stays HIGH when it should be LOW at startup. After pressing a button, everything is OK. I’ve tried many suggestions but haven’t been able to get pin 8 to be LOW at the beginning. I tested on other pins too but the same situation occurs. In the end I tried the simple button sketch from the Arduino tutorial, where I set a button on pin 2 to control an LED on pin 8. Same situation - all pins are HIGH at the beginning. The only sketch where everything works fine is the debounce sketch. I was planning to use Arduino to control a 3 kW motor and imagine what kind of chaos this behavior would cause if everything turns on immediately at startup.

Original message (Croatian)

cestitam na izradi ove stranice,ovakva objasnjenja i izbor primjera je nesto sam dugo cekao. radim sa arduino platformama 2-3 godine i sada mi se javio jedan problem. dobio sam na poklon arduino mega 2560 plocu i kada sam poceo raditi proste primjere sa tasterima primjetio sam nesto cudno. naime, napisao sam program koji treba da ukljuci LED na pin 8 pritiskom na taster START(znaci samo pritisnem taster i izlaz se ukljuci, nema potrebe za stalnim drzanjem) i da iskljuci tu diodu pritiskom na taster STOP. znaci napravio sam ukljucenje sa podrskom ili RS latch relej. sve radi dobro ali sam ubrzo otkrio da prilikom pokretanja platforme, tj stavljanja arduino ploce na napon, pin 8 ostane HIGH a trebao bi u pocetku da bude LOW. nakon pritiskanja tastera sve bude ok. isprobao sam milion prijedloga ali nisam uspio postici da u pocetku pin 8 bude LOW. probao sam i na ostalim pinovima ali ista situacija. na kraju sam ubacio jednostavan sketch pod nazivom button iz arduino tutorijala, gdje sam stavio da sa tasterom na pinu 2 palim LED na nekom pinu npr na pin 8. ista situacija, znaci svi pinovi su u pocetku u stanju HIGH. jedini sketch gdje sve bude ok je sketch naziva debounce. planirao sam napraviti pokretanje motora snage 3 kW sa arduino plocom i zamislite koliki haos bi mi napravio ovakav program gdje je sve ukljuceno odmah na pocetku

Originally submitted via email support on 6 December 2016. Migrated to the forum for community visibility.

Soldered Support:

On the ATmega2560 microcontroller all GPIO pins are in LOW state by default. It appears the bootloader has been configured to set pins to HIGH state. You can solve this in hardware by connecting the pin to ground through a pull-down resistor. Try using a 10k ohm resistor.

Original message (Croatian)

na ATmega2560 mikrokontroleru svi GPIO pinovi su default u LOW stanju, očito je u bootlčoaderu podešeno stanje pina HIGH.
Ovo možete rješiti i hardwareski, tako da isti pino preko pull-down otpornika spojite na gnd. Probajte s 10k ohm otpornikom.

Customer:

It seems this happens when I connect a 2 Relay Module board (it has 4 pins: VCC, GND, IN1 and IN2) to the Arduino. For example, today I made a program to control an LED with 2 buttons:

int ledPin = 5;
int buttonApin = 9;
int buttonBpin = 8;
byte leds = 0;

void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonApin, INPUT_PULLUP);
  pinMode(buttonBpin, INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(buttonApin) == LOW)
  {
    digitalWrite(ledPin, HIGH);
  }
  if (digitalRead(buttonBpin) == LOW)
  {
    digitalWrite(ledPin, LOW);
  }
}

When working with an LED everything is OK, but when I connect the relay board the relay turns on at Arduino startup. I’m powering the relay board from VCC and GND on the Arduino and pin 5 is connected to IN1. It seems like I would need to add another button between pin 5 and the IN1 input to get proper operation. So to control a relay with this board I would need START, STOP and START1 buttons, without which the circuit doesn’t work correctly.

Original message (Croatian)

izgleda da se ovo desava kada spojim 2 Relay Module plocu (ona ima 4 izvoda na sebi VCC, GND, IN1 i IN2) na Arduino. Na primjer, danas sam napravio program za uključenje LED sa 2 tastera:

int ledPin = 5;

int buttonApin = 9;

int buttonBpin = 8;

byte leds = 0;

void setup()

{

pinMode(ledPin, OUTPUT);

pinMode(buttonApin, INPUT_PULLUP);

pinMode(buttonBpin, INPUT_PULLUP);

}

void loop()

{

if (digitalRead(buttonApin) == LOW)

{

digitalWrite(ledPin, HIGH);

}

if (digitalRead(buttonBpin) == LOW)

{

digitalWrite(ledPin, LOW);

}

}

kada radim sa LED diodom sve je OK, međutim kada priključim relejnu ploču onda se pali relej pri pokretanju arduina. za napajanje relejne ploče sam koristio VCC i GND sa arduina a pin 5 je spojen na IN1. izgleda da bih trebao ubaciti još jedan taster između pina 5 i ulaza IN1 da bi dobio odgovarajući rad kola. znači, za kontrolu nekog releja sa ovom pločom bi mi trebali tasteri START, STOP i START1 bez kojeg kolo ne radi ispravno.

Soldered Support:

I suspect the LED also turns on during Arduino bootloader startup, but too quickly for you to notice. In any case, connect the LED/relay pin with a pull-down resistor. Also, it would be good to use SSR relays to avoid these types of situations.

Original message (Croatian)

pretpostavljam da se i LED dioda upali prilikom pokretanja Arduino bootloadera, međutim nedovoljno sporo da primjetite to.
Svakako povežite pin LED diode/releja s pull-down otpornikom. Također, ne bi bilo loše da koristite SSR releje kako biste izbjegli ovakve situacije.