^^Programmare Arduino.

 Arduino.

 

Arduino una un Linguaggio C/C++ ridotto,

in piu' ha 5 istruzioni specifiche per usare gli I/O del suo processore-microcontrollore.

I comandi specifici di I/O sono 5:

  1. pinMode( nr_pin, direzione );           configura pin per IN o OUT
                   0-13    INPUT o OUTPUT
     
  2. digitalWrite( nr_pin, stato );             accende/spegne pin di uscita
                       0-13    HIGH o LOW
     
  3. int x = digitalRead( nr_pin );            legge stato  pin
               0 o 1,  HIGH o LOW
     
  4. analogWrite( nr, valore_pwm );         onda quadra
         3 5 6 9 10 11     0-255
     
  5. int x = analogRead( nr_pin );            legge stato  pin
               0-1023        A0-A5

 

pin uscita digitale

può assumere solo 2 valori di tensione rispetto a GND

per questo motivo non è possibile collegare direttamente un relè o un motore, che richiedono qualche 100mA, ma si devono utilizzare transistor o MOSFET di pilotaggio.

Quando la corrente che attraversa il pin è eccessiva, si corre il rischio di danno irrimediabile.

I 6 pin"segreti" di Arduino

Arduino UNO ha ben venti pin digitali. Avete capito bene: venti, non quattordici come trovate
stampigliato sulla scheda. I sei pin «segreti» non sono altro che gli ingressi analogici contrassegnati con le sigle da A0 ad A5. I pin analogici corrispondono ai numeri: 14, 15, 16, 17, 18 e 19. Quando utilizzate uno di questi pin come «digitale», non potete utilizzarlo anche come ingresso analogico. Per configurare i pin non dovete fare altro che dichiararne l'utilizzo con pinMode.

analogWrite( numero_pin, valore_pwm );

nome trae in inganno, perché non produce un segnale analogico, ma un’onda quadra variabile (cioè un segnale PWM)!
Arduino legge segnali analogici ma non può produrli.

Per usare una luminosta' percentuale 0-100, comodo usare

int pwm = map(lum, 0,100, 0,255);
map restituisce float, che viene converto in int.

int x = analogRead( nr_pin );

Non è necessario dichiarare gli ingressi analogici con PinMode.

Il valore minimo di segnale leggibile è pari a 5V/1024 e cioè 0,0048 V, cioè circa 5 millivolt.

Range of parameters

therefore the input range needs to be converted to fit into the smaller output range.

In order to convert this value, use a function called map():

outputValue = map(sensorValue, 0, 1023, 0, 255);

Intro

All Arduino boards are programmable in C and C++ .

Arduino IDE permette la scrittura dei programmi e la programmazione della scheda.

  1. yt  minicorso arduino. Uso: cella di carico bilancia pesa arnie api
    1. amazon ELEGOO Advanced Starter Kit Arduino
    2. sensore temperatura e umidita' DHT11

Arduino IDE-v2

  1. docs.arduino.cc/software/ide-v2
  2. https://search.arduino.cc/search?tab=reference&q=how+to+use+arduino+ide
  3. L’IDE di Arduino è scritto in Java ed è basato su Processing (www.processing.org).

bootloader

programma residente nella Boot Program Section della flash.

Il bootloader viene attivato quando arriva un particolare codice dalla porta seriale:

attende il nuovo sketch e come arriva, lo scrive nell’Application Program Section della flash.

Il bootloader può riscrivere anche se stesso!

Memory. Memory in computing systems.

  1. https://docs.arduino.cc/learn/programming/memory-guide
  2. https://www.arduino.cc/reference/en/language/variables/utilities/progmem/

Occupazione dell'array dev_id[10][8]  di 80 byte

byte dev_id[10][8]

Sketch uses 6268 bytes (19%) of program storage space. Maximum is 32256 bytes.
Global variables use 820 bytes (40%) of dynamic memory, leaving 1228 bytes for local variables. Maximum is 2048 bytes.

const byte dev_id[10][8]

Sketch uses 6268 bytes (19%) of program storage space. Maximum is 32256 bytes.
Global variables use 820 bytes (40%) of dynamic memory, leaving 1228 bytes for local variables. Maximum is 2048 bytes.

const byte dev_id[10][8] PROGMEM

Sketch uses 6268 bytes (19%) of program storage space. Maximum is 32256 bytes.
Global variables use 740 bytes (36%) of dynamic memory, leaving 1308 bytes for local variables. Maximum is 2048 bytes.

Conclu

Il programma con PROGMEM legge i valori della variabile contrassegnata direttamente dal programma nella FLASH, senza averli copiati in RAM;

vantaggio: risparmio RAM;

svantaggio: leggere FLASH e' piu' lento.

Programmi esempio

https://docs.arduino.cc/built-in-examples/digital/Button

https://docs.arduino.cc/built-in-examples/digital/Debounce

>> State Change Detection (Edge Detection) for pushbuttons

 

momentary switch  ≡  button  ≡  push_button  ≡  toggle switch

 

Communication

 

Software that can access the computer serial port.

Ex Processing and Max/MSP

Arduino C++

 

Arduino uses C++

D: CC++ Aeduino ha array bidimensionali?

R:

As explained in the "sticky" at the top of Programming part of the forum, the Arduino uses C++.

es: It is not an "Arduino" language, that somehow fails to handle arrays, due to some sort of incompetence.

  1. https://www.tutorialspoint.com/arduino/arduino_multi_dimensional_arrays.htm
  2. https://forum.arduino.cc/t/how-to-initialize-or-declare-a-multidimensional-array/214582
    1. And a side note: A link to my C reference book 26 which is now online!
    2. PaulS is right. The response is blunt, but it is correct. I hear your frustration, trying to contribute, but then being bluntly corrected. But you and anyone who wants to succeed will do well to take criticism in stride, especially when it is accurate.

      Keep contributing, but don't resist good peer review and beware the #define!

 

Links

  1. Linguaggio C C++.

  2. Led. Comportamento rettificatore, e caratteristica volt-ampere.

 

REPL read-evaluate-print loop

For most MicroPython boards you can access the MicroPython REPL (read-evaluate-print loop) over their USB serial connections.