Programiranje za arduino

Programsko okolje in jezik Arduino je nastal na osnovi odprtokodnih razvojnih orodij – na platformi za programiranje mikrokontrolerjev Wiring, osnova za razvojno okolje pa je bil Processing.

http://www.arduino.cc/
http://wiring.org.co/
http://www.processing.org/

Osnovna paradigma je odprtokodnost, kar pomeni da se vseskozi ohranja filozofija dostopnosti izvorne programske kode in tudi samega hardverja – samoizgradnje naprav. Razširjenost platforme je pripomogla, da je nastalo veliko število razvojnih centrov, ki nudijo dodatne sestavne dele in širijo filozofijo prostega dostopa do znanja. Tudi mi bomo seveda to paradigmo ohranjali.

Za začetek potrebujemo nameščeno programsko opremo, ki jo dobimo na osnovnem naslovu:

http://arduino.cc/en/Main/Software

Za uporabo arduina kot MIDI sekvencer (Musical Instrument Digital Interface) bomo potrebovali še nekatere programčke:

– MIDI Yoke je softverski prenosnik MIDI podatkov med računalniškimi programi – http://www.midiox.com/myoke.htm
– Serial MIDI je programček, ki pretvori MIDI podatke iz USB serijskega priključka iz arduina za uporabo za MIDI programe –  http://spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html
– ali pa Hairless MIDI je softverski pretvornik MIDI podatkov iz USB priključka – http://projectgus.github.com/hairless-midiserial/

Za druge uporabe – na primer branje podatkov iz arduina – lahko uporabimo že nekatere druge programe, ki so namenjeni interaktivni multimediji:

– Pure Data (in 3D grafično okolje GEM)
– Max/ MSP
– itd.

Bistven del platforme arduino je bolj človeški pristop k programiranju mikrokontrolerja. Programiranje je namreč prenešeno na človeku bližjo – višjo programsko raven, kot je bilo to pred tem. Včasih se je sicer potrebno spustiti nižje, vendar ne prav pogosto. Ob ukazu za zapis programa v mikrokontrolerjev pomnilnik se višjejezični program pretvori/ kompilira v strojni jezik.

Programiranje na platformi arduino poteka zelo podobno kot pri večini sodobnih programskih jezikov (c++, php, java,…). Osnovne funkcionalnosti so zajete (osnovne knjižnice) in se z njimi ni potrebno ukvarjati. Včasih potrebujemo kakšne dodatne funkcionalnosti, ki so pogosto zajete v dodatnih knjižnicah. Te potem vključimo s funkcijo “include()”.

Osnovni elementi programa za arduino so:
– komentar
– vključitev morebitnih dodatnih knjižnic
– definicije globalnih konstant in spremenljivk
– osnovna setup() funkcija, v kateri določimo osnovne in začetne pogoje
– osnovna loop() funkcija, v kateri se ciklično izvaja program

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// komentar v tej obliki mora biti v eni sami liniji, vrstici
 
/*
 - Cirkulino = Arduino Sequencer - rotary LED chaser with some randomization
 - tale komentar je lahko v več vrsticah
*/
 
// vključitev dodatne knjižnice
// add interrupt interval library
#include 
 
// definiraj globalno konstanto - je ne moremo spreminjati ali ponovno definirati
// a global constant - cannot be changed or redefined
#define CHANNEL 6
 
// define the number of LEDs
#define NUM_PINS 8
 
// define arduino pin to read the potentiometer for setting the speed
#define SPEED 14 // speed adjustment - analog pin A0
 
// definiraj globalno spremenljivko dostopno vsem funkcijam
// define a global variable to be accessible by all functions
bool midi = false; // initial logical, boolean value - true or false
 
int pulse = 20; // in ms - integer type variable, celoštevilčni tip spremenljivke 
 
// prva funkcija, ki se izvede - nastavitve; void pomeni da funkcija ne vrne nobene vrednosti
// first function performed on arduino power-up; void meand that the function returns nothing
 
void setup() {
  // pinMode(arduino_pin, INPUT) je ena od funkcij definiranih s programsko platformo arduino
  // define DIO pin number CHANNEL as input (for reading the position/ value of a switch)
  pinMode(CHANNEL, INPUT); // INPUT or OUTPUT
 
  // now we switch on the pull up resistor in atmel microcontroller (20Kohms) - so we just need the switch to be connected to ground
  // digitalWrite(arduino_pin HIGH) je ena od funkcij definiranih s programsko platformo arduino
  digitalWrite(CHANNEL, HIGH); // HIGH: switch on the pull up resistor, LOW: switch off the pullup resistor
 
  // start serial communication on dedicated default arduino pins (pin 0 and pin1)
  if(midi)   Serial.begin(31250);  //  Set MIDI baud rate
  else       Serial.begin(57600);  // set faster baud rate for Serial to MIDI software
 
}
 
// osnovna funkcija neprestanega izvajanja programskih opravil; vedno "void" - ker je najbolj osnovna funkcija
// basic function which is used to constantly perform whatever is defined; always "void" - the most basic function
 
void loop() {
    // define a local variable to be changed in this function and at each loop only
    int ledpin=0; // initial value
 
    // go through each LED - 0 to 7 = 8 LEDs
    while (ledpin < NUM_PINS){
 
      // read settings of potentiometers at each step
      // read potentiometer at pin defined as SPEED
      // analogRead(arduino_pin) je ena od funkcij definiranih s programsko platformo arduino
      seq_speed = analogRead(SPEED); // 10 bit value
 
      // do something else on each sequence step
 
   }
 
   // do something else on each sequence completed
 
}

Obširnejši pregled programiranja v okolju arduino:
arduino_notebook_v1-1