Forum: Mikrocontroller und Digitale Elektronik Arduino Sketch in AS7- Arduino Bibliothek einfügen funktioniert nicht


von Andre (Gast)


Lesenswert?

Hallo,

ich habe versucht, einen Arduino Sketch in Atmel Studio 7 zu 
importieren.
1
/*Begining of Auto generated code by Atmel studio */
2
#include <Arduino.h>
3
4
/*End of auto generated code by Atmel studio */
5
6
#include "Wire.h" 
7
#include "LiquidCrystal_I2C.h"
8
#include <avr/io.h>
9
#include <avr/interrupt.h>
10
//Beginning of Auto generated function prototypes by Atmel Studio
11
//End of Auto generated function prototypes by Atmel Studio
12
13
LiquidCrystal_I2C lcd(0x26,20,4);
14
15
16
void setup() {
17
  // put your setup code here, to run once:
18
19
}
20
21
void loop() {
22
  // put your main code here, to run repeatedly:
23
  lcd.setCursor(1,1);
24
}

Wenn ich versuche das Programm zu kompilieren, funktioniert es solange 
ich die Zeilen
1
LiquidCrystal_I2C lcd(0x26,20,4);
und
1
lcd.setCursor(1,1);
nicht drin habe.
Füge ich die beiden Zeilen hinzu, bricht er mit folgenden Fehlern ab:
recipe for target 'import_test.elf' failed
undefined reference to `LiquidCrystal_I2C::LiquidCrystal_I2C(unsigned 
char, unsigned char, unsigned char)'
undefined reference to `LiquidCrystal_I2C::setCursor(unsigned char, 
unsigned char)'

Weiß jemand eine Lösung dafür?

Bei der Suche nach einer Lösung bin ich immer wieder auf den Hinweis 
gestoßen, dass dem Projekt noch Datein hinzugefügt werden müssen.
Wenn ja, wo und welche müßten hinzugefügt werden?

Wobei mir AS7 die Funktionen aus der Bibliothek zur 
Autovervollständigung vorschlägt, also muss der doch irgendwie Zugriff 
darauf haben?

Für Hilfe wäre ich sehr dankbar!

MfG Andre

von Stefan F. (Gast)


Lesenswert?

Finde erstmal heraus, in welchen Dateien sich die gesuchten Methoden 
befinden.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

nach eigener Erfahrung ist das aus irgendwelchen Gründen nicht dafür 
gemacht fremde Libs zuverwenden. Scheinbar kann es die verschiedensten 
Pfade nicht auflösen und stolpert über sich selbst. Man kann nur die 
Standard Libs verwenden die die Arduino IDE mitbringt. Was praktisch 
nutzlos ist.

Ein nackter Import kann pinMode etc. verwenden. Kompiliert alles.
Inkludiert man zum Bsp.
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
kommt man am Besten man gibt in den Projekteigenschaften die Pfade zu 
den Lib Ordnern an. Oder man kopiert alle Klassendateien in den 
Projektordner. Was auch mühsam ist. Dazu kann man auch in AS im Solution 
Explorer mit Rechtsklick auf den Projektnamen klicken und mittels Add > 
Existing Item > die Dateien hinzufügen.

Hat man das geschafft werden diese nicht mehr angemeckert. Dafür fehlt 
dann plötzlich angeblich die pin_arduino.h, die ja eigentlich keine 
Probleme machen sollte, weil pinMode diese vorher schon verwenden 
konnte. Kurzum, es bleibt ein Krampf. Wohlgemerkt reden wir hier über 
einen rudimenären "Support" rein von Atmel Studio. Du wirst nicht 
glücklich werden.

Die einzigste Möglichkeit sehe ich in der Verwendung von 
https://www.visualmicro.com/. Nach paar Tagen kostet das etwas Geld.

Ich habe das für mich schon lange aufgegeben und programmiere entweder 
in der Arduino IDE mit allen Komfort die diese bietet. Oder ich 
verzichte auf Arduino und programmiere in Atmel Studio "nackt".

Was du vielleicht noch probieren kannst ist "Visual Studio Code" mit 
entsprechenden Plugins.

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Andre schrieb:
> Für Hilfe wäre ich sehr dankbar!

Wenn du deinen Sketch postest (oder einen Link dazu) den du
konvertieren willst kann ich versuchen einen Fehler zu finden.
Aufgrund deiner sehr spärlichen Infos ist aber keine Fehlersuche
möglich. Zu viele Randbedingungen sind einfach unbekannt.

von Andre (Gast)


Angehängte Dateien:

Lesenswert?

Nach vielen Testprojekten hab ich ich es hinbekommen. Veits Tip war Gold 
wert, danke dafür.

Falls noch jemand damit Probleme hat, hab ich mal meine Vorgehensweise 
zusammen gefasst. Allerdings musste ich nach dem Prinzip try&error 
vorgehen, sollte ich was falsch geschrieben haben, bitte verbessern.

Atmel Studio erzeugt zwei Projekte, das ArduinoCore Projekt und das 
eigentliche User Projekt.
Aus dem Core Projekt wird eine Bibliothek erzeugt und diese dann vom 
User Projekt genutzt.
Daraus folgt, dass alle Dateien der externen Arduino Bibliotheken in das 
ArduinoCore Projekt eingebunden werden müssen.

Meine Vorgehensweiseweise war, dass ich alle Bibliotheksordener wie 
Wire, LiquidCrystal_I2C usw in den Projektordner kopiert habe in dem 
auch der Sketch ist.
Dann erst aus dem Sketch in Atmel Studio ein Projekt erzeugen.
Damit sind dem Compiler schonmal die ganzen Header-Files bekannt. Sollte 
noch was fehlen, im Solution Explorer unter ArduinoCore->include einen 
Ordner mit dem Bibliotheksnamen anlegen und da mit Rechtsklick auf den 
Order->"add existing item" die .h Datei hinzufügen.
Als Tip, im Unterordnern wie utility sind auch noch Header Dateien 
versteckt, da kann man länger dran suchen.

Dann fehlten bei mir immer die .cpp und .c Dateien. Diese müssen im 
Solution Explorer noch per Hand hinzugefüget werden. Dazu Rechtklick auf 
ArduinoCore->src->core und mit "add existing item" die .cpp und .c 
Datein hinufügen.

Solange in dem ArduinoCore Projekt noch was fehlt, kann die Bibliothek 
(libArduinoCore.a) nicht generiert werden. Das erkennt man an einem 
gelben Ausrufezeichen unter ->Projektnamen->libraries->ArduinoCore.

Im Anhang ein Bild des "fertigen" Explorers

MG Andre

von Stefan F. (Gast)


Lesenswert?

Ich finde super, dass du dir die Mühe gemacht hast, den Lösungsweg 
detailliert aufzuschreiben. Das hilft bestimmt irgendwann auch anderen 
weiter.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

ich staune das es doch noch geklappt hat. Mühsam aber immerhin. Ich 
hatte das gestern alles im User Projekt ausprobiert. Danke fürs 
mitmachen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.