Arduino Sketches und libraries
Arduino Sketches und libraries
Hallo Zusammen,
fein das hier immerwieder an dem Ruderweg Sketch gebaut wird....
Zu den Problemen mit verschiedenen Arduino Projekten, welche u.U. verschiedene Versionen einer Bibliothek benötigen, habe ich mir folgendes angewöhnt. Vielleicht hilft es ja dem Einen oder Anderen beim Lösen von Kompiler Problemen:
Die "speziellen" Bibliotheken werden nicht über die IDE installiert, sondern im Sketchverzeichnis, also im gleichen Ordner wie das *.ino File abgelegt (hierher kopiert).
Diese "speziellen" Bibliotheken werden dann über "spezielleBibliothek.h" im Sketch/ino File eingebunden, wichtig sind hier die " " statt dem <>!
Beim allerersten Kompilieren (sofort nach dem Start der IDE) eines Sketches zeigen sich dann z.B. folgende Kompiler Meldungen (mit Datei/Voreinstellungen: Ausführliche Ausgabe während Kompilieren aktiviert):
...
Detecting libraries used...
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\ADXL345.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\I2Cdev.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\utility\twi.c" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.cpp" -o "nul"
...
Hier sieht man genau, welche Bibliotheken verwendet werden (Pfade) !
Hier der entsprechende Auszug aus der Version 5.2 meines Sketches "RC_ANGLE_THROW_KeypadShield_5.ino"
Code:
/*
STATUS OK
Version */
int ino_version = 52;
long ino_date = 171230;
/*
Kompiliert unter Arduino 1.8.5
1. Unter Verwendung der mit Arduino 1.8.5 mitglieferten libraries:
Wire
...\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.cpp
...\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.h
LiquidCrystal:
...\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.cpp
...\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.h
EEPROM:
...\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src\
2. Zusaetzliche Libraries (https://www.i2cdevlib.com) im Sketch Verzeichnis:
ADXL345.cpp
ADXL345.h
I2Cdev.cpp
I2Cdev.h
3. Verwendete Hardware, die bei mir funktioniert
3.1 LCD KeypadShield
3.2 Arduino UNO R3
3.3 ADXL345 BreakoutBoard, GY-291
-Fixes: Help Screen kommt nun zuverlaessiger, switch/case statt if/else
-Fixes: SerialDebug Schnittstelle, Ausgabe "Initialize Serial Port..." wird nun ausgegeben
-Verbesserung: Button RIGHT zeigt HELP Screen an
-Verbesserung: Ausgabe der Version und Datum
-Erweitert: Wert CHORD wird mit Button SELECT im EEPROM gespeichert
-Maximalwert CHORD 999mm begrenzt
-Ausgabe der Prefixe ANG und THR reduzuiert, damit konfigurierter Wert CHRORD angezeigt werden kann
-Sensor2 (rechter Sensor): Orientierung angepasst, Sensor um 180Grad gegenüber Sensor1 gedreht eingesetzt wird
-Code Review, Vereinfachung der Programmstruktur, LCD Ausgabe und Aktion in einem switch/case/.../default vereint
-Sensor Kalibrierung: offset und gain angepasst
-Libraries in das Sketch Verzeichnis verschoben, wo auch das RC_ANGLE_THROW_KeypadShield_*.ino liegt,
(dann #include "ADXL345.h" statt #include <ADXL345.h>!)
*/
/*******************************************************************************************/
// fuer den Betrieb von zwei ADXL Sensoren an einem Arduino eignet sich diese Library, zusammen mit I2Cdev
// https://www.i2cdevlib.com
// https://www.i2cdevlib.com/usage
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include <Wire.h>
// https://www.i2cdevlib.com/usage
// I2Cdev and ADXL345 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "ADXL345.h"
ADXL345 adxl1(0x53); // Default I2C Adresse, mit Pin SDO nicht beschaltet, interner PullDown
ADXL345 adxl2(0x1D); // Zweite I2C Adresse, mit Pin SDO an VCC
/*******************************************************************************************/
//Fuer das LCD KeyPad-Shield
#include <LiquidCrystal.h> // für das LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
/*******************************************************************************************/
//Fuer das speichern von Werten
#include <EEPROM.h>
/*******************************************************************************************/
...
Und hier die Verzeichnisstruktur meines Sketch Verzeichnisses:
Das Verzeichnis libraries im Sketch Verzeichnis ist leer.
Möchte man den Code des Sektches nicht ändern, so muss man die Bibliotheken in diesem libraries Verzeichnis ablegen.
Ich starte neue Projekt immer mit einem leeren libraries Verzeichnis. Mein Verzeichnis sieht dann folgendermaßen aus:
Zum Aktivieren des gerade benötigten Verzeichnis bennennt man es in "libraries" um.
Zum Deaktivieren des gerade nicht benötigten Verzeichnis bennennt man es in "libraries_<Projektname>" um.
Grüße
Eckehard