Arduino - Genuino
Indice
Info generiche
- Links utili
Usare i pin LOW come GND?
Leggendo uno schema elettrico sul pdf che ci ha passato Stefano ho trovato un circuito a mio avviso un po' strano dove il pin 13 di arduino impostato come output, quando è settato LOW funziona come pin GND. Incuriosito ho replicato il circuito e in effetti funziona, perchè in sostanza quello che conta è la differenza di potenziale. Però mi sono documentato e ho scoperto che in teoria sarebbe possibile usare sempre i pin output di arduino settati LOW come ground ma il punto è: conviene farlo? a quanto pare è meglio di no. Infatti questi pin possono sopportare una corrente inversa al massimo di 30-40mA, un po' pochino... quindi, a meno di non voler sfruttare questa possiblità per pilotare dei semplici led (l'esempio sul libro faceva proprio questo), è sempre meglio ricorrere alla GND migliore possibile a disposizione, cioè il pin apposito. Qui trovate i dettagli:
http://arduino.cc/forum/index.php/topic,19044.0.html—EnricoCNC
Arduino Fio + Xbee
Arduino Leonardo
Tipi di variabili in Arduino
Tratto dal tutorial Sparkfun: Introduction to data types in the Arduino
- boolean (8 bit)- simple logical true/false.
- byte (8 bit)- unsigned number from 0-255.
- char (8 bit)- signed number from -128 to 127. The compiler will attempt to interpret this data type as a character in some circumstances, which may yield unexpected results.
- unsigned char (8 bit)- same as ‘byte’; if this is what you’re after you should use ‘byte’ instead, for reasons of clarity.
- word (16 bit)- unsigned number from 0-65535.
- unsigned int (16 bit)- the same as ‘word’. Use ‘word’ for clarity and brevity.
- int (16 bit)- signed number from -32768 to 32767. This is most commonly what you see used for general purpose variables in Arduino example code provided with the IDE.
- unsigned long (32 bit)- unsigned number from 0-4,294,967,295. The most common usage of this is to store the result of the millis() function, which returns the number of milliseconds the current code has been running.
- long (32 bit)- signed number from -2,147,483,648 to 2,147,483,647.
- float (32 bit)- signed number from -3.4028235E38 to 3.4028235E38. Floating point on the Arduino is not native; the compiler has to jump through hoops to make it work. If you can avoid it, you should. I’ll touch on it later; a more thorough tutorial on the general use of decimal point math in the Arduino will follow at a later date.
Le funzioni
https://www.arduino.cc/en/Reference/FunctionDeclaration
Le Union
Le union sono utili per convertire variabili grosse in piu' bytes o ricavarle da dati seriali.
Esempio:float snelheid;
union u_tag {
byte b[4];
float fval;
} u;
u.b[0] = snelheidArray[0];
u.b[1] = snelheidArray[1];
u.b[2] = snelheidArray[2];
u.b[3] = snelheidArray[3];
snelheid = u.fval;
Gli Interrupt
a volte capita di voler far stare arduino in "ascolto" di un evento che può verificarsi casualmente, ma che è difficile captare perchè in quel frangente potrebbero essere in esecuzione altre funzioni. E' possibile gestire agevolmente questi eventi servendosi degli interrupt, ovvero delle "interrupt service routine". Si impostano cioè degli eventi che se accadono su determinati pin (tipicamente un paio, il 2 e il 3), interrompono quello che sta facendo arduino e mandano in esecuzione immediatamente una certa funzione pre-impostata.
Mi sembra una funzione molto utile che che finora non era uscita. Io la userò per "acchiappare" gli impulsi dei sensori di velocità del vento e della pioggia per calcolarne le intensità. Le funzioni attaccate al pin dell'interrupt hanno alcune limitazioni, in particolare al loro interno non funzionano i delay e i valori restituiti da millis() non incrementano. Inoltre le variabili usate al loro interno vanno definite come "volatile" il che se ho ben capito significa che vengono scritte e lette direttamente dalla ram e non su altri registri (il motivo è che durante l'interrupt arduino esce dal loop).