risorse | sviluppare per arduino con scite
L'editor fornito dall'IDE di Arduino non offre particolari agevolazioni per la scrittura di codice sorgente, tanto che l'ambiente permette di utilizzarne uno esterno (vedi voce Use External Editor del menu ). In questa modalità tuttavia l'autonomia non è completa: se lo sketch può essere lavorato con l'editor di testo preferito, la compilazione e l'upload del firmware deve avvenire comunque attraverso l'IDE.
A partire dalla versione 1.5.2, l'IDE di Arduino offre un'interfaccia a linea di comando attraverso la quale un programma esterno può richiedere la compilazione di uno sketch o il suo caricamento sulla scheda. Le regole d'uso sono riportate sul sito ufficiale.
Questi appunti mostrano come interfacciare SciTE all'IDE di Arduino per compilare e fare l'upload del programma nella scheda direttamente dalla finestra dell'editor.
Nota 1: gli esperimenti sono stati condotti con Arduino IDE 1.6.5 e SciTE 3.7.1 su Ubuntu 14.04 64 bit.
Nota 2: per la corretta compilazione degli sketch, la toolchain di Arduino richiede che il codice sorgente sia salvato in un file con estensione *.ino all'interno di una cartella con lo stesso nome del file.
Nota 3: i due comandi principali dell'IDE di Arduino, Verify e Upload, sono stati mappati per analogia nei comandi Compile (Ctrl+F7) e Build (F7) di SciTE rispettivamente.
Prima di eseguire un qualunque comando è necessario specificare il percorso al programma dell'IDE di Arduino, il tipo di scheda Arduino con cui si intende lavorare, nonché la porta USB alla quale questa è connessa. A tal scopo sono state definite tre variabili:
arduino.program=/path/to/the/arduino/ide/executable arduino.board=package:architecture:board arduino.port=/path/to/the/usb/port
Fare riferimento alla documentazione ufficiale per il formato e il significato dei parametri. Segue un esempio reale di configurazione dalla quale si evince che si sta utilizzando una scheda originale Arduino Uno collegata alla prima porta USB del computer:
# # arduino sketches support # arduino.program=/opt/arduino-1.6.5-r5/arduino arduino.board=arduino:avr:uno arduino.port=/dev/ttyACM0
Segue la definizione del comando di accesso all'interfaccia:
arduino.command=$(arduino.program) --board $(arduino.board) --port $(arduino.port)
Si procede con la definizione del nuovo tipo di file Arduino Sketch (*.ino), includendolo nella categoria “All Source” e nell'elenco dei tipi di file disponibili della maschera Open File:
# arduino file type file.patterns.arduino=*.ino *source.patterns.arduino=$(file.patterns.arduino); filter.arduino=Arduino Sketch (*.ino)|$(file.patterns.arduino)| *filter.arduino=$(filter.arduino)
Si passa a definire il supporto per l'evidenziazione della sintassi dichiarando di voler utilizzare il parser del linguaggio C++ — gli sketch Arduino sono di fatto dei frammenti di programma C++ — e specificando quali sono i nomi di funzione che si vogliono enfatizzati:
# arduino syntax highlight lexer.$(file.patterns.arduino)=cpp # arduino keywords and library function names arduino.library.keywords=pinMode \ digitalWrite \ digitalRead \ analogReference \ analogRead \ analogWrite \ analogReadResolution \ analogWriteResolution \ tone \ noTone \ shiftOut \ shiftIn \ pulseIn \ millis \ micros \ delay \ delayMicroseconds \ min \ max \ abs \ constrain \ map \ pow \ sqrt \ sin \ cos \ tan \ isAlphaNumeric \ isAlpha \ isAscii \ isWhitespace \ isControl \ isDigit \ isGraph \ isLowerCase \ isPrintable \ isPunct \ isSpace \ isUpperCase \ isHexadecimal \ randomSeed \ random \ lowByte \ highByte \ bitRead \ bitWrite \ bitSet \ bitClear \ bit \ attachInterrupt \ detatchInterrupt \ interrupts \ noInterrupts \ Serial \ Stream arduino.lcd.keywords=begin \ clear \ home \ setCursor \ write \ print \ cursor \ noCursor \ blink \ noBlink \ display \ noDisplay \ scrollDisplayLeft \ scrollDisplayRight \ autoscroll \ noAutoscroll \ leftToRight \ rightToLeft \ createChar arduino.wire.keywords=begin \ requestFrom \ beginTransmission \ endTransmission \ write \ available \ read \ onReceive \ onRequest keywords.$(file.patterns.arduino)=$(keywordclass.cpp) keywords2.$(file.patterns.arduino)=$(keywordclass2.cpp) \ $(arduino.library.keywords) \ $(arduino.lcd.keywords) \ $(arduino.wire.keywords)
La configurazione precedente presuppone che la variabile keywordclass.cpp contenga l'elenco delle parole chiave del C++, mentre la variabile keywordclass2.cpp contenga i nomi delle funzioni della libreria standard del linguaggio:
# list of c++ keywords keywordclass.cpp=alignas \ alignof \ and \ and_eq \ ... xor \ xor_eq # list of c/c++ library function names keywordclass2.cpp=abort \ abs \ acos \ ... vscanf \ vsscanf keywords2.$(file.patterns.cpp)=$(keywordclass2.cpp)
Entrambe le variabili possono essere lasciate vuote o non essere dichiarate affatto, nel qual caso verrebbero evidenziati solo i nomi specificati nelle variabili arduino.*.keywords, perdendo di fatto un po' del potere espressivo disponibile in SciTE. È da tener conto che l'evidenziazione delle parole chiave e delle chiamate a funzione avviene solamente se sono stati definiti gli stili appropriati:
# style for the C++ "keywords"-class words style.cpp.5=... # style for the C++ "keywords2"-class words style.cpp.16=...
Essendo gli sketch di Arduino dei frammenti di C++ veri e propri, conviene sfruttare l'aiuto che SciTE può fornire circa la parametrizzazione delle funzioni della libreria standard del linguaggio, se disponibile:
# arduino api specs api.$(file.patterns.arduino)=$(SciteUserHome)/.scite/api/cpp.api
Resta da specificare la corrispondenza tra i comandi di SciTE e quelli dell'IDE Arduino:
# arduino commands if PLAT_UNIX command.compile.$(file.patterns.arduino)=$(arduino.command) --verify $(FilePath) command.build.$(file.patterns.arduino)=$(arduino.command) --upload $(FilePath)
Pagina modificata il 05/12/2016