41
votes
Are global variables evil in Arduino?
They aren't evil per se, but they do tend to get overused where there is no good reason to use them.
There are plenty of times when global variables are advantageous. Especially since programming an ...
24
votes
Are global variables evil in Arduino?
It's very difficult to give a definitive answer without seeing your
actual code.
Global variables are not evil, and they often make sense in an embedded
environment where you typically do a lot of ...
18
votes
Accepted
Reading several rotary encoders
Library and schematics are at https://github.com/maxgerhardt/rotary-encoder-over-mcp23017.
To read a rotary encoder (i.e., detect state changes of the knob), there are two possible implementations:
...
17
votes
Accepted
Convert int to char[]
itoa is the best route:
int num = 1234;
char cstr[16];
itoa(num, cstr, 10);
-> "1234"
You can read more about using it here.
If you want more control over the format of the number (and don't ...
16
votes
Accepted
Arduino Countdown without using delay()
Background
The function millis () returns an unsigned long, which is the number of milliseconds since the processor was reset (until it overflows).
See: http://arduino.cc/en/Reference/Millis
...
16
votes
Accepted
Can I force Arduino not to be powered by USB?
The best way of doing this, if you want your USB connection to still work, is to remove the P-channel MOSFET T1 from the board.
You can't just disconnect the power from the USB port since that power ...
15
votes
What is the best technique to design a 20 push button circuit
For 20 buttons you can use a Keypad Matrix arrangement (plenty of examples online) where you would use only 9 pins (5 columns of 4 rows is 5+4 pins). It's slightly more involved that simple 1:1 ...
12
votes
Accepted
ArduinoUNO/MEGA, Is there a way to exceed 256 in analogWrite
Section 16, "16-bit Timer/Counter1 with PWM" of Atmel-8271J-AVR- ATmega-Datasheet_11/2015 describes using Timer/Counter-1 for 16-bit PWM, including sample code in both C and assembler. It might take a ...
12
votes
Accepted
16x2 LCD showing blocks under text
The row of white blocks is what you get before the screen's initialized. It's normal.
The shadow behind the characters is because you have the contrast turned up too high. Adjust it down a little.
12
votes
Accepted
What are these stray resistors on the Arduino Mega schematic?
Those are unused resistors in resistor arrays. The arrays have 4 resistors side by side in a single package. Not all of the elements are always needed, but they have to be in the schematic anyway ...
11
votes
Running Arduino mega on 5V power supply
The 6-12V range applies only to the onboard voltage regulator(if you provide power via Vin or the barrel jack). The Arduino itself runs on 5V and the regulator needs a bit headroom above that to do ...
10
votes
Accepted
Delay() and millis() functions don't work in cpp external files
The Arduino framework does some initializing for you before going into setup() and loop(), for example configuring Timer0 correctly for millis(), delay() and siblings. This is done in the main() ...
9
votes
ArduinoUNO/MEGA, Is there a way to exceed 256 in analogWrite
The simplest way is to change your value range to 0-255. You can't change analogWrite's range, since that is fixed in the core software.
analogWrite(5, val >> 2);
The >> 2 bit-shifts the ...
9
votes
Accepted
How to pass 'Serial' as an input argument in Arduino function?
The Serial object is the end of a chain of classes, each with a different set of functionality.
Print -> Stream -> HardwareSerial => [Serial]
Since you are reading from it the best class to ...
9
votes
My program is using too much memory
There are lots of repetitions in your code. This is something you should
generally avoid, not only because of memory usage, but also, and most
importantly, because of maintainability.
The most common ...
8
votes
Accepted
Can I make delayMicroseconds more accurate?
As explained in the previous answers, your actual problem is not the
accuracy of delayMicroseconds(), but rather the resolution of
micros().
However, to answer your actual question, there is a more ...
8
votes
Accepted
Confused between SPI and I2C for SSD1306 OLED
SCK and SCL are the same thing.
Serial ClocK
Serial CLock
They seem to be interchangeable. The fact you have SDA (Serial DAta) as opposed to separate SDI / SDO or MOSI / MISO pins means it's I2C.
...
8
votes
Accepted
What's the function of this transistor on Arduino Mega?
It's a P-channel MOSFET. It's job is to act as a "dropless" diode.
The principle is this:
MOSFETs have a built-in diode across them in reverse bias (an effect of the chemistry)
The P-channel MOSFET ...
8
votes
Accepted
Faster Arduino Mega
You should begin working with 3.3V. 5V is getting rarer and rarer as far as "real world" applications go.
Many devices that you have been using at 5V will also work at 3.3V (such as the MAX22500E). ...
7
votes
Accepted
How to Sort Elements of Array in Arduino Code?
As mentioned in the comments, qsort is a good option:
// qsort requires you to create a sort function
int sort_desc(const void *cmp1, const void *cmp2)
{
// Need to cast the void * to int *
int a ...
7
votes
Accepted
Testing Conditions on Port Bytes - ignoring certain bits?
You need to use boolean arithmetic. Use the AND operator (&) to combine the incoming value AND the "mask" value (the value of the bits you do care about) and see if it equals the mask bit:
byte ...
7
votes
Accepted
How to find out the maximum used stack space?
Knowing the stack size is pretty easy: the stack pointer is initially
set to RAMEND and goes down as the stack grows. Thus:
static inline size_t stack_size()
{
return RAMEND - SP;
}
should I ...
7
votes
How to find out the maximum used stack space?
Initialize the entire SRAM space from the top of the heap to the bottom of the stack, either during setup, or in a modified version of the Arduino-provided main() function, with some unlikely pattern, ...
6
votes
Arduino Mega + SIM808 GSM + GPS Module + Program Switch ON without pressing Push Button?
There is a simple way of power the module without pressing the button. There is pin call D9 at the bottom right corner of the module. Just power the pin by Arduino digital pin or 5v pin around 3, 4 ...
6
votes
Accepted
Using a lot of interrupts on a single Arduino
On a Uno, all of the digital and analog pins can trigger a pin-change interrupt. That gives you 20 inputs straight away. The Mega also has pin change interrupts but not on all its pins. The pins that ...
6
votes
Voltage on analog pin arduino when arduino turned off
All the GPIO pins have protection diodes in them. The are arranged, effectively, like this:
simulate this circuit – Schematic created using CircuitLab
The internals of the ATMega chip can be ...
6
votes
Accepted
How Arduino IDE works?
You can turn on verbose compiling.
This will show all the compiler commands used by Arduino IDE.
The ino file is converted to a .cpp file (which you can see in the verbose output). Basically the ...
6
votes
Accepted
Arduino Due vs Mega 2560
The 'R3' version boards and shields are compatible with 3.3V and 5V. For example the Ethernet Shield V1 version 'R3' can be used with the Due. The new Arduino Ethernet Shield 2 is also compatible with ...
6
votes
Are global variables evil in Arduino?
The main issue with global variables is code maintenance. When reading a line of code, it is easy to find declaration of variables passed as parameter or declared locally. It is not so easy to find ...
6
votes
What are these components in Arduino Mega Schematic?
The symbol indicates a pair of solder pads that can be bridged by the user using a blob of solder.
Here's something similar.
Figure 1. Source: CyberGibbons.
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
arduino-mega × 1818arduino-uno × 270
serial × 200
programming × 127
arduino-ide × 83
sensors × 80
interrupt × 76
c++ × 67
power × 63
motor × 54
spi × 54
shields × 50
esp8266 × 49
sd-card × 48
lcd × 47
timers × 45
pwm × 44
gsm × 44
i2c × 42
arduino-nano × 41
usb × 41
communication × 38
ethernet × 38
softwareserial × 36
servo × 34