Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Arduinon ohjelmointiSami-Petteri [email protected]
1. helmikuuta 2016
Arduinon ohjelmointi31. tammikuuta 2016
2
Ohjelman rakenne
#include <math . h> / / Matemaattisia funktioita
const i n t l edPin = 13; / / Merkkivaloi n t sensorPin = 4; / / Anturi bensatankissa
void setup ( ) / / Suoritetaan vain kerran alussa
/ / I/O-porttien alustuspinMode ( ledPin , OUTPUT) ;pinMode ( sensorPin , INPUT) ;
void loop ( ) / / Suoritetaan kerta toisensa perään
/ / analogRead palauttaa arvon välillä [0, 1023].i n t gasLevel = analogRead ( sensorPin ) ;i n t ledOn = gasLevel < 300; / / LED sytytetään kun tankki lähes tyhjäd i g i t a l W r i t e ( ledPin , ledOn ) ;
Arduinon ohjelmointi31. tammikuuta 2016
3
Funktiot
I "Maaginen laatikko"I Voi ottaa vastaan määrätyn tyyppisiä muuttujia (parametrit)I Tekee sisäisesti jotakinI Voi palauttaa määrätyn tyyppisen paluuarvon. (tai void, jos
ei mitään)
Arduinon ohjelmointi31. tammikuuta 2016
4
Funktiot
int laskeYhteen(int numero1 , int numero2)
return numero1 + numero2;
int a = laskeYhteen (1, 2); //a==3
I Parametrien muokkaus funktion sisällä ei vaikutaalkuperäisiin muuttujiin!
Arduinon ohjelmointi31. tammikuuta 2016
5
Muuttujat
I <tyyppi> <nimi> = <arvo>;I Jokainen muuttuja on jonkin tyyppinen (kokonaisluku,
kirjain, ...)I Vrt. esim Python, missä muuttujalla on vain nimi ja arvo
I Mikäli muuttujalle ei luomishetkellä anneta arvoa, se voiolla mitä tahansa
I int muuttuja;I Muuttujan arvon ei voida olettaa olevan nolla!
Arduinon ohjelmointi31. tammikuuta 2016
6
Muuttujien näkyvyys
int koira = 1;
void setup()
int kissa = koira + 2; // Toimii
void loop()
kissa = koira + 2; //Ei toimi, kissa näkyy//vain setup-funktiossa
Arduinon ohjelmointi31. tammikuuta 2016
7
Globaali vs lokaali muuttujaGlobaali (esimerkissä koira)
I Voidaan käyttää kaikkialla ohjelmassaI Hyviä kun samaa muuttujaa käytetään kaikkialla
ohjelmassa. Esim. Arduinoon kytketyn ledin pinninumeroI Vältä mikäli mahdollista. Hankala tutkia mitkä kaikki
ohjelman osat vaikuttavat muuttujaan.
Lokaali (esimerkissä kissa)
I Voi käyttää vain niiden aaltosulkeiden välissä jossamääritetty
I Laitteen tarvitsee säilöä tieto ainoastaan pienessä osassaohjelmaa→ tehokkaampaa
I Vaikeampi tehdä mokia
Arduinon ohjelmointi31. tammikuuta 2016
8
Muuttujatyypit
I Kieli on vahvasti tyypitettyI Jokaisen muuttujan tyyppi on siis määritelty
luomisvaiheessaI Tyyppi määrää:
I Millaisia arvoja muuttuja voi sisältääI Mitä muuttujalla voi tehdäI Paljonko muuttuja vie tilaa ohjelman muistissa
Arduinon ohjelmointi31. tammikuuta 2016
9
MuuttujatyyppejäI voidI boolean (0, 1, true, false)I char (’a’, -128, 127)I int (-32768 ... 32767)’I long (-2147483648 ... 2147483647)I unsigned char (0 .. 255)I byte (0 .. 255)I unsigned int (0 .. 65536)I word (0 .. 65536)I unsigned long (0 .. 4294967295)I float (-3.4028e+38 to 3.4028e+38)I double (toistaiseksi sama kuin float)I jne.
Arduinon ohjelmointi31. tammikuuta 2016
10
Muuttujatyypit
I Kokonaisluku (int, long) int muuttuja = -4;I Liukuluku (float, double) float muuttuja = 4.0;
I Arduinon tämän hetkisessä toteutuksessa float ja doublekäytännössä sama asia
I merkki (char) char muuttuja = ’a’;I Vain ASCII-järjestelmän merkitI Aakkoset ja numerot löytyvät, ääkköset eivät
I Totuusarvo (boolean) boolean muuttuja = true;I Tosi (true) tai epätosi (false)I false = 0, true jotakin muuta
Arduinon ohjelmointi31. tammikuuta 2016
11
Muuttujatyypit
Lukuja voi merkata myös erilaisissa lukujärjestelmissä.Kannattaa myös huomata, että laskutoimituksissakin luvuilla onjokin tyyppi.
I 123 (kokonaisluku)I 0267 (oktaali)I 0b10100011 (binääri)I 0xA3 (heksadesimaali)I 7U (unsigned)I 11L (long)I 15UL (unsigned long)I 12.3 (liukuluku)I 3.4e3 (3.4 ∗ 103)
Arduinon ohjelmointi31. tammikuuta 2016
12
Muuttujatyypit
int kokonaisluku = 2;float muuttuja1 = 3/ kokonaisluku; // 1float muuttuja2 = 3.0/2.0; // 1.5float muuttuja3 = 3.0/( float)kokonaisluku; // 1.5
I (tyyppi)muuttuja-notaatio muuntaa muuttujan tyypinI Muunnos isommasta tyypistä pienempään saattaa
aiheuttaa ongelmia (long→ int)
Arduinon ohjelmointi31. tammikuuta 2016
13
Under-/overflow
I Mikäli muuttujan arvo menee muuttujatyypin alueen yli,"pyörähtää muuttuja yli"
byte c = 0; // c = 0--c; // c = 255c = c + 1; // c = 0
Arduinon ohjelmointi31. tammikuuta 2016
14
Mikä tyyppi pitäisi valita?
I Pienin mahdollinen joka sovellutukseen kelpaaI unsigned-etuliite, mikäli negatiivisia arvoja ei tarvita
I Enemmän tilaa "positiivisella"puolellaI const-etuliite, mikäli muuttujan arvoa ei tarvitse ohjelman
ajon aikana muuttaaI Esim kytkentäpinnien numerot
Arduinon ohjelmointi31. tammikuuta 2016
15
Tärkeimpiä operaattoreita
summa 1+2 3erotus 1-2 -1tulo 1*2 2osamäärä 1/2 0.5jakojäännös 5%3 2
Arduinon ohjelmointi31. tammikuuta 2016
16
Tärkeimpiä operaattoreita
I Muutama oikotie onneen muuttujien kanssa
summa a+=2 a = a+2erotus a-=2 a = a-2tulo a*=2 a = a*2osamäärä a/=2 a = a/2kasvata yhdellä a++ a = a+1vähennä yhdellä a−− a = a-1
Arduinon ohjelmointi31. tammikuuta 2016
17
TaulukotI Hyvä väline esimerkiksi useamman ledin nastanumeroiden
säilömiseen.
int led_pin [3] = 3, 5, 6;// led_pin [0] on nyt 3// led_pin [1] v a s t a a v a s t i 5
I Taulukon jäseniä kutsutaan alkioksi.I Alkioon pääsee käsiksi syntaksilla nimi[alkio]I Indeksointi alkaa nollasta
led_pin [1] = 2;// led_pin vastaa nyt määritelmää 3 , 2 , 6
Arduinon ohjelmointi31. tammikuuta 2016
18
Teksti
I C-kielessä ei erillistä muuttujatyyppiä tekstille, vainmerkeille (char)
I Merkkijonot esitetään char-taulukkona
char materiaali [] = "puu";// materiaali-muuttuja vastaa nyt// määritelmää ’ p ’, ’u ’, ’u ’, ’\0 ’
I Merkkijonon lopussa ns. nollatavuI Kertoo apufunktioille merkkijonon loppukohdanI Kolmen merkin merkkijonon tallentamiseen tarvitaan siis
neljä merkkiä!
Arduinon ohjelmointi31. tammikuuta 2016
19
Merkkijonojen käsittely
Merkkijonojen käsittelyyn on olemassa apufunktioitaI strcpy
I Kopioi osa merkkijonosta toiseen merkkijonoonI strcat
I Yhdistä kaksi merkkijonoa toisiinsaI strcmp
I Vertaile kahta merkkijonoa toisiinsaI itoa ja atoi
I Muunna kokonaisluku merkkijonoksi tai toisin päin
Arduinon ohjelmointi31. tammikuuta 2016
20
Vaikeaa?
I Merkkijonojen käsittely hieman hankalaa C-kielessäI Apuun tulee Arduinon olento nimeltä StringI Kuluttaa kuitenkin muistia enemmän kuin c-tyyliset
merkkijonot – käytä vain jos on tarvetta
String merkkijono = "elaimiaon" + 3 + "kpl";// m e r k k i j o n o on nyt muotoa " elaimia on 3 kpl "
Arduinon ohjelmointi31. tammikuuta 2016
21
String muuntaminen
I Jotkut funktiot palauttavat tai vaativat c-tyylisiämerkkitaulukoita
I String kuitenkin vain piilottaa merkkitaulukon taakseen.→muuntaminen onnistuu
String koirateksti = "koira";koirateksti.c_str() // vastaa c-tyylistä merkkijonoa.
// Vain lukemiseen,// ei muokkaamiseen
char merkkijono [] = "kissa";String kissateksti = String(merkkijono);
Arduinon ohjelmointi31. tammikuuta 2016
22
Ehtolauseet
if (false)
// Tee jotakin jos ehto on tosielse
// Hyppää tänne jos ehto epätosi
Arduinon ohjelmointi31. tammikuuta 2016
23
Ehtolauseet
I Mikäli ehto on tosi, suoritetaan kyseessä oleva lohko
// Tässä ehto ei ole tosi, eli lohkoa ei suoriteta// vaan siirrytään eteenpäinif (false)
// Tee jotakin jos ehto on tosi
Arduinon ohjelmointi31. tammikuuta 2016
24
EhtolauseetI Mikäli lohkoa ei suoritettu, suoritetaan else-lohko.
I tai ei mitään, jos else-lohkoa ei ole
// Tässä ehto ei ole tosi, eli lohkoa ei suoriteta// vaan siirrytään eteenpäinif (false)
// Tee jotakin jos ehto on tosielse
// Tämä lohko suoritetaan, koska edellisen// lohkon ehto oli epätosi
Arduinon ohjelmointi31. tammikuuta 2016
25
Näitä voi myös yhdistää
boolean kissat_kivoja = false;boolean linnut_kivoja = false;
if (linnut_kivoja)
//Eivät ole, eli tänne ei päädytäelse if (kissat_kivoja) //epätosi
//Eivät ole, eli tännekään ei päädytäelse
//Päädytään siis tänne
Arduinon ohjelmointi31. tammikuuta 2016
26
Mielekkäitä totuuksia – Vertailu
a == b a yhtä suuri kuin ba != b a eri suuruinen kuin ba < b a pienempi kuin ba > b a suurempi kuin ba <= b a pienempi tai yhtäsuuri kuin ba >= b a suurempi tai yhtäsuuri kuin bI true jos ehto täyttyyI false (0) jos ehto ei täyty
Arduinon ohjelmointi31. tammikuuta 2016
27
IF-lauseissa on jo jotain järkeä
int kissat = 2;int koirat = 3;
if (koirat < kissat) //epätosi
//koirat ovat huonompia kuin kissatelse
//koirat ovat parempia kuin kissat
Arduinon ohjelmointi31. tammikuuta 2016
28
Totuuksien yhdistäminen
Mitä jos halutaankin tutkia, ovatko koirat parempia kuin kissatJA ovatko linnut huonompia kuin kissat
Arduinon ohjelmointi31. tammikuuta 2016
29
Boolen logiikka
a && b a ja b molemmat tosia (and)a || b a tai b on tosi (or)!a a on epätosi (not)I true jos ehto toteutuu, muuten false
Arduinon ohjelmointi31. tammikuuta 2016
30
Boolen logiikka
IF-lauseessa voi käyttää sulkuja kuten matematiikassa
int linnut = 1;int kissat = 2;int koirat = 3;
if ( (koirat > kissat) && (linnut < kissat) )
//koirat ovat parempia kuin kissat//ja//linnut ovat huonompia kuin kissat
Arduinon ohjelmointi31. tammikuuta 2016
31
Boolen logiikka
int linnut = 1;int kissat = 2;int koirat = 3;
if ( true && true )
//koirat ovat parempia kuin kissat//ja//linnut ovat huonompia kuin kissat
Arduinon ohjelmointi31. tammikuuta 2016
32
Boolen logiikka
int linnut = 1;int kissat = 2;int koirat = 3;
if ( true )
//koirat ovat parempia kuin kissat//ja//linnut ovat huonompia kuin kissat
Arduinon ohjelmointi31. tammikuuta 2016
33
Helpot asiat mokata!
I Varoitus! a=b ja a==b ovat eri asioita!I a=b; sijoita b:n arvo a:hanI a==b; tarkista ovatko a ja b saman arvoiset
I C-tyylisiä merkkijonoja ei voi vertailla ==-operaattoreilla
Arduinon ohjelmointi31. tammikuuta 2016
34
Silmukat
I Silmukoita käytetään kun samankaltaisia asioita pitäätehdä useita kertoja peräkkäin.
I Silmukoita käytetään kun samankaltaisia asioita pitäätehdä useita kertoja peräkkäin.
I Silmukoita käytetään kun samankaltaisia asioita pitäätehdä useita kertoja peräkkäin.
Arduinon ohjelmointi31. tammikuuta 2016
35
While
while (ehto)
//Tee jotakin niin kauan kuin ehto//on tosi
Arduinon ohjelmointi31. tammikuuta 2016
36
For
for (alkuarvo; ehto; askel)
//Tee jotakin niin kauan kuin ehto//on tosi
Arduinon ohjelmointi31. tammikuuta 2016
37
For esimerkki
int ledpin [3] = 3, 5, 6;
void setup()
for (int i=0; i<3; i++) //i=0, 1, 2
pinMode(ledpin[i], OUTPUT);
Arduinon ohjelmointi31. tammikuuta 2016
38
For vs while
I Oikeastaan for-silmukan voi ajatella hienompana versionawhile-silmukasta
I alkuarvo on vain lause joka ajetaan ennen while-silmukkaaI ehto on while-silmukan ehtoI askel on lause joka sijoitetaan viimeiseksi while-silmukan
sisälle.
Arduinon ohjelmointi31. tammikuuta 2016
39
For vs while
int ledpin [3] = 3, 5, 6;
void setup()
int i=0;while (i<3)
pinMode(ledpin[i], OUTPUT);
i++;
Arduinon ohjelmointi31. tammikuuta 2016
40
Break ja continue
I Silmukoiden kulkuun voidaan vaikuttaa myös kahdellakomennolla:
I breakI Lopeta silmukan suoritus heti ja siirry siitä ulos
I continueI Hyppää takaisin silmukan alkuun.I For-silmukassa kuitenkin suoritetaan askel-vaihe. Täten
vertaus whileen ei ole aivan täysin toimiva.
Arduinon ohjelmointi31. tammikuuta 2016
41
Break ja continue
int i=0;
while (true)
Serial.println(i);
i++;if (i < 3)
continue;break;
Arduinon ohjelmointi31. tammikuuta 2016
42
Arduinon pääpiirteet
I Flash-muistia 32 kilotavua, josta 0,5 KB varattu Arduinonbootloaderille
I Tähän tilaan ohjelman pitää siis mahtuaI 2 kilotavua SRAM-muistia
I Käyttömuisti. Esim muuttujat asuvat täälläI Tieto häviää kun virrat katkeavat
I 1 kilotavu EEPROM-muistiaI Muisti joka ei häviä virtojen katketessaI Esimerkiksi laitteen asetusten säilöminenI Vrt. tietokoneen kovalevy
I Arduinon kirjastot piilottavat AVR-C:n paljon helpompaanmuotoon.
Arduinon ohjelmointi31. tammikuuta 2016
43
Arduino
Arduinon ohjelmointi31. tammikuuta 2016
44
digitalRead
I Lukee pinnin tilanI LOW, pinni kytketty maahan (GND)I HIGH, pinni kytketty jännitteeseen. (3-5 volttia)
void setup()
pinMode(3, INPUT);
void loop()
byte arvo = digitalRead (3);
Arduinon ohjelmointi31. tammikuuta 2016
45
Ylös-/Alasvetovastukset
I Mikäli pinniä ei ole kytketty mihinkään, sanotaan että sekelluu
I digitalWrite palauttaa satunnaisesti HIGH tai LOWI Ratkaisuna alasvetovastus
I Kytketään pinni vastuksella (n. 10KΩ) GND:henI Pinnin arvo on nyt LOW kunnes se kytketään myös +5V:iin
I Ylösvetovastus lähes sama asia:I Kytketään pinni vastuksella (n. 10KΩ) +5V:iinI Pinnin arvo on nyt HIGH kunnes se kytketään myös
GND:iin
Arduinon ohjelmointi31. tammikuuta 2016
46
INPUT_PULLUP
I Arduinosta löytyy sisäänrakennettuna ylösvetovastusI Aktivoidaan määrittämällä pinnin modeksi INPUT_PULLUP
void setup()
pinMode(3, INPUT_PULLUP);
void loop()
byte arvo = digitalRead (3);
Arduinon ohjelmointi31. tammikuuta 2016
47
digitalWriteI Asettaa pinnin arvon LOW tai HIGH.
I LOW, "pois päältä"I HIGH, "päällä"
Esimerkiksi ledin vilkutus
void setup()
pinMode (13, OUTPUT);void loop()
digitalWrite (13, HIGH); //LED päällädelay (1000); //Odota sekuntidigitalWrite (13, LOW); //LED pois päältädelay (1000); //Odota sekunti
Arduinon ohjelmointi31. tammikuuta 2016
48
analogReadI analogReadilla voidaan lukea pinnin jänniteI Onnistuu vain pinneistä jotka on nimetty A0, A1...
I Kyseisten pinnien takana on 10-bittinenanalogidigitaalimuuntaja (AD)
I Arvo 0-5V väliltä saadaan siis lukuna väliltä 0-1023. (2,5Vsiis vastaisi lukua 512)
I (Kyseisiä pinnejä voi käyttää myös digitaaliseen I/O:hon)
void setup ( )
pinMode (A1 , INPUT) ;
void loop ( )
i n t arvo = analogRead (A1) ;
Arduinon ohjelmointi31. tammikuuta 2016
49
analogWriteI Arduinossa ei ole DA-muunninta→ analoginen ulostulo
pitää tehdä "keinotekoisesti"I PWM, eli Arduino kytkee pinniä nopeasti 0V ja 5V välillä.
(kanttiaalto)I "Teho"määräytyy kauanko pinniä pidetään HIGH- ja
kauanko LOW-tilassaI Esimerkiksi LEDien himmentämisessä ja normaalien
moottorien tehon säädössä riittäväI Vain tildellä (∼) merkittyjä pinnejä voi käyttää
void setup() pinMode(3, OUTPUT);
void loop() //Ledi palaa "puolella teholla"
analogWrite (3, 127);
Arduinon ohjelmointi31. tammikuuta 2016
50
Muut
I millis()I aika Arduinon käynnistyksestä millisekunneissa
I map()I muuttujan arvovälin muuntaminen toiselle välilleI esim. [0, 1023]→ [0, 256]
I min(), max(), abs(), sin(), cos()...I random()
I satunnaislukujaI Servo
I kirjasto Servomoottorin liikutteluunI ...
Arduinon ohjelmointi31. tammikuuta 2016
51
Arduino IDE
I Kaikki Arduinon ohjelmointiin tarvittavaI KoodieditoriI KääntäjäI Koodin lataus ArduinolleI Sarjaportin kuuntelu
Arduinon ohjelmointi31. tammikuuta 2016
52
Ohjelma laitteelle
Arduinon ohjelmointi31. tammikuuta 2016
53
Muistin loppuminen
I Mikäli itse ohjelmakoodi on liian iso, saat virheviestinI Mikäli jossakin kohtaa käyttömuisti loppuu, todennäköisesti
vain tapahtuu kummallisia asioita. (laite ei toimi kutenpitää, tai ei toimi lainkaan, ...)
I Vältä globaaleja muuttujiaI Helpointa rajoitukseen on törmätä säilömällä iso määrä
tekstinpätkiäI Esimerkiksi LCD-näytön käyttöliittymän tekstit voisivat olla
ongelmaI PROGMEM. Tallenna data flash-muistiin.I Pienissä projekteissa tuskin tulee kuitenkaan vastaan
Arduinon ohjelmointi31. tammikuuta 2016
54
Ohjelman debuggaus: sarjaportti
I Arduino osaa USB:n kautta emuloida sarjaporttiaI Helpoin tapa tietää mitä Arduinossa tapahtuuI Kun ohjelma ei toimi kuten sen pitäisi, kannattaa
sarjaporttiin tulostaa eri muuttujien arvoja ja tutkia, ettäovatko lukemat järkeviä
I Tekstin tulostaminen ennen ja jälkeen jonkin ohjelmanosan auttaa selvittämään, jääkö ohjelma jumiin johonkinkohtaan.
I Huom! jos käytät sarjaporttia, pinnejä 0 ja 1 ei voi enääkäyttää muuhun!
Arduinon ohjelmointi31. tammikuuta 2016
55
Ohjelman debuggaus: sarjaportti
int nappi = 3;
void setup() Serial.begin (9600);pinMode(nappi , INPUT);
void loop() byte napinTila = digitalRead(nappi);Serial.println(napinTila);delay (1);
Arduinon ohjelmointi31. tammikuuta 2016
56
Ohjelman debuggaus: sarjaportti
Arduinon ohjelmointi31. tammikuuta 2016
57
Ohjelman debuggaus: sarjaportti
Arduinon ohjelmointi31. tammikuuta 2016
58
Ohjelman debuggaus: kumiankka
Arduinon ohjelmointi31. tammikuuta 2016
59
Vinkit ohjelmointiin: funktiot
I Yksi toiminto, yksi funktioI Yksi ongelma, monta "aliongelmaa"I Voi käyttää myös ryhmän työnjakoon
EsimerkiksiI Ongelma: Aja robotti pisteeseen x
I Missä ollaan nytI Miten pisteeseen x pääseeI Miten robotin saa liikkumaan
Arduinon ohjelmointi31. tammikuuta 2016
60
Enum
enum OhjelmanTila kysyy_nimea ,sanoo_moi
;OhjelmanTila tila = kysyy_nimea;
void loop()
String nimi;
if (tila == kysyy_nimea)nimi = kysy_nimi ();
if (tila == sanoo_moi)sano_moi(nimi);
Arduinon ohjelmointi31. tammikuuta 2016
61
Vinkit ohjelmointiin: SisennysI Joissakin kielissä (Python) sisennyksellä on väliä ohjelman
toiminnan kannalta – Arduinon kielessä ei.I Sisentämällä koodi kuitenkin on paljon helpompilukuista ja
virheet helpompia huomata
//Ei siis näin. Hankala lukea ja helppo laittaa//kaarisulkuja vääriin paikkoihinvoid loop()if (anturi > raja)sulje_venttiili1 ();sulje_venttiili2 ();
Arduinon ohjelmointi31. tammikuuta 2016
62
Vinkit ohjelmointiin: Manuaalien lukeminen
I Arduinon sivuilla hyvät ohjeet useimpien funktioidenkäyttöön
I Kertovat yleensä myös missä mitäkin kannattaa käyttää jamilloin mennään metsään
I Muista että useimmat asiat toimivat C:ssä samalla tavallaI Joihinkin osiin löytyy hyviä ja helppoja oppaita, joihinkin
hieman teknisiä ja joihinkin huonosti mitäänI Google yleensä osaa auttaa kun kirjoittaa ongelman
englanniksi ja osien tapauksessa liittää tunnistekoodin
Arduinon ohjelmointi31. tammikuuta 2016
63
Vinkit ohjelmointiin: Google
I Lähes kaikki kääntäjän ilmoittamat virheet googlautuvathyvin.
I Maailmassa tehty paljon asioita jo ennestään: how to * witharduino/c
I Englannin kielellä parhaat hakutuloksetI Ehkä tärkeimpiä asioita oppia!
Arduinon ohjelmointi31. tammikuuta 2016
64
Versionhallinta
I "Tää toimi vielä eilen, mut sit tein jotakin ja nyt mikään eienää toimi"
I Helpottaa kun useampi ihminen haluaa koodata samaaprojektia
I GitI Githubin student-ohjelmassa saa muutaman privarepon
ilmaiseksi
Arduinon ohjelmointi31. tammikuuta 2016
65
Arduinon tekstieditori
I Arduinon asetuksista voi valita käyttöön ulkopuolisentekstieditorin jos kokee tarpeelliseksi. Kääntäminen jaupload toimivat edelleen ohjelman kautta.
I Inotool jos pitää komentorivistä
Arduinon ohjelmointi31. tammikuuta 2016
66
Linkkejä
I https://www.arduino.cc/en/Tutorial/HomePageI https://www.arduino.cc/en/Reference/HomePageI http://cslibrary.stanford.edu/101/EssentialC.pdfI https://github.com/liffiton/Arduino-Cheat-SheetI http://tronixstuff.com/I http://www.asciitable.com/I http://www.atmel.com/images/
atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf