Arduino IDE – Tips en tricks

arduino logo

Soft Autoreset met code

Het is mogelijk om een arduino te resetten met de code

Een mooi voorbeeld geeft deze code, je ziet dat de “setup” routine telkens weer aangehaald word:

Bron @ forum.arduino.cc

Een ander voorbeeld (werkt ook op de ATTiny):

Bron @ instructables.com


Huidige Datum en Tijd (van de computer) compileren in de code

In cd C++ taal van ade arduino kun je de computer tijd en datum gebruiken in de code bij compilatie, bijvoorbeeld handig als je een RTC wilt programmeren:

__TIME__  geeft 13:15:20  (24 uurs notatie)
__DATE__  geeft Jul 27 2015  (datum is afgekort in 3 letters in het Engels)

Hieronder heb ik een script gemaakt om de variabele van C++ om te zetten naareen  Jaar, Maand, Dag, Uur, Minuut en Seconde variabele:


En substring vinden in een string

Ik kwam deze functie tegen, het is in principe hetzelfde als de functie substring()  (standaard arduino IDE), maar deze werkt met chars, de functie geeft een 1 wanneer gevonden, zo is hij eenvoudig toe te passen in een IF loop.

Toepassing IF loop:

Ps. bovenstaande is achterhaald, en is hetzelfde als de  strstr functie van de Arduino IDE.


Minimale en Maximale waarde grens instellen

Wellicht heb je een waarde dat niet onder of boven een bepaalde grens mag komen, in principe werkt daarvoor onderstaande code:

Maar je kan ook de constrain functie daarvoor gebruiken:


Mappen van waarden

Het mappen van waarden, kun je het beste vergelijken al een “overzetverhouding”, handig voor het gebruik bij analoge poorten op de Arduino.

Het volgende stukje code map een getal tussen de 0 en 1023 op de ingang als 0 tot 180 op de uitgang (servo)


FLOAT splitten in 2 INT’s


Strings splitten op gevonden karakter

Hieronder een voorbeeld om een string te splitten op een gevonden karakter (,)

Output:


Strings splitten op gevonden karakter (method 2)

You can use this function as follows (with “;” as separator):


String / Chars etc.

Lengte
String lengte: Serial.println(mijnstring.length());
Char lengte: Serial.println(strlen(mijnstring));

String naar Int

int a = mystring.toInt()

String naar Char
Manier #1:  const char* mijnchar = mijnstring.c_str()

Manier #2:

of met vaste grootte

Int naar String

Kan: String(mijnint)

Of (bij decimalen): mijnfloat.toString();

Float naar string


Detect ODD or EVEN


Empty Serial buffer

It is probably worth mentioning that the poorly named Serial.flush() function does not empty the input buffer. It is only relevant when the Arduino is sending data and its purpose is to block the Arduino until all outgoing the data has been sent.

If you need to ensure the Serial input buffer is empty you can do so like this:

Bron: https://forum.arduino.cc/index.php?topic=396450.0


Delay of 62.5 ns

__asm__("nop\n\t"); // delay 1 cycle (62.5ns @ 16MHz)

__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t"); // delay 5 cycles


Using A6 and A7 on Arduino NANO

Analog pins A0~A5 are normal pins. You can refer to them as pins 14-19 as well, and they can be used normally as digital pins.
Analog pins A6 and A7 are weird. They can *only* be used for analogRead() – there aren’t any registers to write to for them like there are for other pins.

A6 and A7 are only inputs available to the mux in front of the ADC.  There is no digital hardware behind the pins.
Since the pull up is part of the digital latch, those two pins dont have pull ups (nor do they work as digital inputs.)

You can actually use A6 and A7 as ‘digital’ pins with a little bit of logic in your code: