Hallo ich habe ein großes Problem!
Ich muss eine Library für mein Maturaprojekt erstellen.
Nachdem ich mich in der Arduino Umgebung nur wenig auskenne bin ich mit
dieser Fehlermeldung komplett überfordert. Kann mir jemand helfen ?
M:\LightTomograph\lightTomographLibrary\lightTomographLibrary.ino: In
member function 'void LightTomograph::init(float)':
M:\LightTomograph\lightTomographLibrary\lightTomographLibrary.ino:45:36:
warning: ISO C++ forbids comparison between pointer and integer
[-fpermissive]
} else if (Serial.available() == "true"){
^
c:\temp\ccQNgKTZ.ltrans0.ltrans.o: In function `main':
C:\Program Files
(x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined
reference to `setup'
C:\Program Files
(x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined
reference to `loop'
collect2.exe: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.
Hier noch das selbst geschriebene Programm(bitte keine blöden Kommentare
wenn der Fehler eindeutig ist, wie gesagt ich kenn mich nicht gut aus):
#include <Stepper.h>
#include "WConstants.h"
#endif
class LightTomograph{
#endif
public:
LightTomograph();
int AngleByStep(double MotorAngle, int Translation);
int Steps(int MustHaveAngle, int AngleByStep);
int PicByStep(int Steps, int HowManyPICs);
boolean PicReady(int HowManyPics, boolean Funktion);
void SetMotorLinksoderRechts(int pinPWM_A,int pinPWM_B,int
pinDir_A ,int pinDir_B ,int schritte_def,boolean PicReady());
void init(float initial);
};
void LightTomograph::init(float initial)
{
int HowManyPICs;
double MotorAngle;
int MustHaveAngle;
int Translation;
boolean Funktion;
if (Serial.available() == 1){
HowManyPICs = Serial.read();
}else if (Serial.available() == 2){
MotorAngle = Serial.read();
}else if (Serial.available() == 3){
MustHaveAngle = Serial.read();
}else if (Serial.available() == 4){
Translation = Serial.read();
} else if (Serial.available() == "true"){
Funktion = Serial.readString();
}
int AngleByStepValue = AngleByStep(MotorAngle, Translation);
int StepsValue= Steps( MustHaveAngle, AngleByStepValue);
int PicByStepValue = PicByStep(StepsValue,HowManyPICs);
boolean PicReadyValue = PicReady( HowManyPICs, Funktion);
}
int LightTomograph:: AngleByStep( double motorAngle, int translation){
int anglebyStep;
anglebyStep = motorAngle/translation;
return anglebyStep;
}
int LightTomograph:: Steps(int mustHaveAngle,int angleByStep){
int Step;
Step = mustHaveAngle/ angleByStep;
return Step;
}
int LightTomograph:: PicByStep(int Steps, int HowManySteps){
int picByStep = Steps/HowManySteps;
return picByStep;
}
boolean LightTomograph:: PicReady(int howManyPics, boolean funktion){
boolean Ready;
int pic = 0;
if (funktion == true && pic <= howManyPics ){
pic ++;
return Ready = true;
}else{
return Ready = false;
}
}
void LightTomograph::SetMotorLinksoderRechts(int pinPWM_A,int
pinPWM_B,int pinDir_A ,int pinDir_B ,int schritte_def,boolean
PicReady()){
boolean Ready=PicReady();
#include <Stepper.h>
Stepper motor(schritte_def, pinDir_A, pinDir_B);
void setup();
motor.setSpeed(40);
digitalWrite(pinPWM_A,HIGH);
digitalWrite(pinPWM_B,HIGH);
Serial.begin(9600);
void loop();
if (Ready == true){
while (Serial.available() >0 ) {
String abfrage = Serial.readString() ;
if(abfrage == "links"){
motor.step(1);
}
else if(abfrage == "rechts"){
motor.step(-1);
}
}
}
}
Die Definitionen für die Funktionen setup und loop fehlen, nebst
eventuellen weiteren Fehlern. Eigentlich ist die Fehlermeldung da
ziemlich präzise und spezifisch. Wie hast du es denn hinbekommen, den
Code zu schreiben? Oder ist das Copy/Paste?
Aus der Funktion kommt ein integer zurück, vermutlich eine 1 oder eine 0
für true oder false, auf was du Prüfst ist ein Charakter Array, Probier
die Zeile mal so aus:
else if (Serial.available() == true)
oder
else if (Serial.available() == 1)
Da liegt leider noch deutlich mehr im Argen.
Schritt 1: Frag dich bei jeder der folgenden Programmzeilen, was du
damit genau bezwecken möchtest:
1
if(Serial.available()==1){
2
HowManyPICs=Serial.read();
3
}elseif(Serial.available()==2){
4
MotorAngle=Serial.read();
5
}elseif(Serial.available()==3){
6
MustHaveAngle=Serial.read();
7
}elseif(Serial.available()==4){
8
Translation=Serial.read();
9
}elseif(Serial.available()=="true"){
10
Funktion=Serial.readString();
11
}
Schritt 2: Lies dir die Dokumentation von Serial.available und
Serial.read durch und vergleiche das Gelesene mit dem Ergebnis von
Schritt 1.
Tipp: Es gibt auch die Funktionen Serial.parseInt und Serial.parseFloat,
die du gewinnbringend in deinem Code anwenden kannst.
nein ich hab den Code selber geschrieben das Problem ist wenn ich die
loob und die setup hineinschreibe kommt eine neue Fehlermeldung das ich
das nicht hineinschreiben darf...
das steht deswegen drin weil er gesagt hat er weiß nicht was Motor,
stepper ist und dann hab ich versucht das include unten
hineinzuschreiben und dann hat er es erkannt
Das Problem ist das, dass ich von Matlab diese Variablen über die
Serielle Schnittstellen also zum Seriellen Monitor übertragen will.
Und diese will ich dann als Variablen definieren. Deswegen hab ich das
so gemacht. Ich hab auch keine Ahnung gehabt ob das funktioniert aber
ich wüsste auch nicht wie ich es anders schreiben soll, wie gesagt ich
hab mit Arduino noch nicht viel gemacht.
Yalu X. schrieb:> Schritt 1: Frag dich bei jeder der folgenden Programmzeilen, was du> damit genau bezwecken möchtest:
... und schreibe es als Kommentar dazu.
if (Serial.available() == 1){
HowManyPICs = Serial.read();
//Erste Zeile vom Seriellen monitor auslesen und den Betrag als
HowManyPics Variable speichern, als Beispiel steht im Seriellen Monitor
als erstes 5 drin, dann soll 5 in die Variable gespeichert werden!
}else if (Serial.available() == 2){
MotorAngle = Serial.read();
//zweite Zeile auslesen und Betrag in der Variable speichern
}else if (Serial.available() == 3){
MustHaveAngle = Serial.read();
//dritte Zeite auslesen und in der Varable speichern
}else if (Serial.available() == 4){
//vierte Zeile auslesen und in Varable speichern
Translation = Serial.read();
} else if (Serial.available() == 5){
Funktion = Serial.readString();
// fünfte und letzte Variable speichern. Wenn i dieser Variable
true steht kann sich der Motor um eines weiter bewegen.
Ich weiß ja nicht ob ich so den jeweiligen wert in der Zeile bekomme?
Wenn Du nicht mal "setup" und "loop" kennst, Grundkonzepte von
Arduino-Programmierung....
Mir scheint, Du versuchst da was zu programmieren und hast keine Ahnung
von Programmieren und Dich auch nicht ein bisschen mit der Arduino Doku
beschäftigt.
Du wirst von einem Fehler in den nächsten laufen, wenn Du Dich nicht ein
bisschen mit beidem beschäftigst BEVOR Du jemandem im Projekt eine
Library ablieferst.
Für Arduino gibt es sicher 10.000 Tutorials im Web.
Ich hab gesagt die blöden Kommentare kann man sich sparen OK! Wenn man
keine Hilfe geben möchte ist mir das egal ich muss das machen, Lust hab
ich ja selber keine also entweder Helfen oder Klappe halten. Wie soll
man bitte sich alles selbst beibringen! Manchmal versucht man halt etwas
und schaut ob es funktioniert...tut mir echt leid das ich um Hilfe bitte
!!
Und noch etwas, ich weiß was Loop und Setup ist aber das ist doch
komplett was anderes wenn man das in einer Library schreibt!! Und genau
weil es 10.00 Tutorials gibt ist es so schwer etwas zu finden was einem
helfen kann. Und noch mal ich hab mir das nicht freiwillig ausgesucht!
alexandra schrieb:> Ich hab gesagt die blöden Kommentare kann man sich sparen OK! Wenn man> keine Hilfe geben möchte ist mir das egal ich muss das machen, Lust hab> ich ja selber keine also entweder Helfen oder Klappe halten. Wie soll> man bitte sich alles selbst beibringen! Manchmal versucht man halt etwas> und schaut ob es funktioniert...tut mir echt leid das ich um Hilfe bitte> !!
Blöde Kommentare gibt es dann, wenn man sich selber nicht anstrengt.
Wenn Du vorher nichtmal ein Arduino Tutorial durcharbeitest und dann
hier fragst, dann lässt Du Dir alles vorkauen.
Bisschen was musst schon selber machen, sonst bist eigentlich im Studium
falsch. Wahrscheinlich auch im Berufsleben. Kommt da nämlich häufiger
vor, dass man etwas tun muss, was man sich nicht ausgesucht hat.
alexandra schrieb:> Ich hab gesagt die blöden Kommentare kann man sich sparen OK!
Ich sehe hier keinen einzigen blöden Kommentar?! Im Gegenteil, alle
Kommentare waren bisher ausgesprochen hilfreich. Inklusive derer,
erstmal die Grundlagen zu lernen.
alexandra schrieb:> Lust hab ich ja selber keine
Das merkt man allerdings. Kann es sein, dass das Dein eigendliches
Problem ist?
alexandra schrieb:> Wie soll man bitte sich alles selbst beibringen!
Interesse haben! Interesse haben! Interesse haben!
Wenn dir die Tutorials im Inernet zu viel sind (was ich sogar verstehen
kann), dann würde ich vorschlagen, ein gutes Buch zu kaufen und dies
durchzuarbeiten.
Das kann mal 30-40€ kosten, hat aber den Vorteil, dass es i.d.R.
strukturierter und von einem (oder wenigen) Autor(en) ist. Durch
letzteres ist schon mal der Schreib- und Programmierstil einheitlich und
schafft keine zusätzlichen Verwirrungen.
Nur so als Tipp und hat mir persönlich schon öfters geholfen - aber
jeder lernt halt anders.
C:\Program Files
(x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined
reference to `setup'
C:\Program Files
(x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined
reference to `loop'
Diese Fehlermeldung kommt bei jeden Programm egal ob selbst geschrieben
oder von einem Tutorial. Und nochmal bei einer Library baucht man
keine!! Kann mir jetzt wer sagen warum sie kommt?
Unter der Annahme, dass alexandra der/die alexandra aus dem ersten
Beitrag ist:
alexandra schrieb:> Lust hab> ich ja selber keine
Das merkt man. Was du hier für einen Dreck hinrotzt.
alexandra schrieb:> Ich hab gesagt die blöden Kommentare kann man sich sparen OK! Wenn> man> keine Hilfe geben möchte ist mir das egal ich muss das machen, Lust hab> ich ja selber keine also entweder Helfen oder Klappe halten. Wie soll> man bitte sich alles selbst beibringen! Manchmal versucht man halt etwas> und schaut ob es funktioniert...tut mir echt leid das ich um Hilfe bitte> !!
Du bist schon zu faul, hier mal ordentliche Beiträge zu schreiben,
wirfst hier irgendeinen Müll hin, motzt die Forenteilnehmer an und
erwartest dann noch, dass die Leute genau tun, was du verlangst.
Von der geistigen Reife her würde ich dein Alter auf maximal 15
schätzen. Da denkt man noch, dass so ein Verhalten angemessen wäre.
Gewöhn dich lieber früher daran, dass es das nicht ist.
alexandra schrieb:> Und nochmal bei einer Library baucht man> keine!! Kann mir jetzt wer sagen warum sie kommt?
Weil die Funktionen einfach in dem Programm fehlen.
Bei Arduino heisst das zwar Library, es sind aber nur einfach weitere
Dateien die Code enthalten. Und die kann man nicht einzeln übersetzen,
der Linker möchte ein main, setup und loop sehen. Zu der 'Library' muss
also noch ein Testprogramm mit setup() und loop() dazu.
https://www.arduino.cc/en/Hacking/LibraryTutorial
Ich verstehe nicht, wie man ein Projekt mit Programmierung annehmen
kann, wenn man so gut wie keine Programmierkenntnisse und auch keine
Lust hat.
Programmieren lernt man nicht in 2 Tagen.
Kommunikation über Zeichenketten erfordert zu allererst mal ein
Protokoll.
Meine Güte, dein Code...
Mhm, das wird jetzt was dauern:
1) Grundstruktur passt irgendwie nicht. Das würde nämlich so aussehen
(Stichworte Include-Guard, Präprozessor...):
1
#ifndef LightTomograph_h // INCLUDE GUARD BEGIN
2
#define LightTomograph_h
3
4
5
#if ARDUINO >= 100
6
#include"Arduino.h"
7
#else
8
#include"WProgram.h"
9
#include"pins_arduino.h"
10
#include<Stepper.h>
11
#include"WConstants.h"
12
#endif
13
classLightTomograph{// Klassendefinition
14
public:
15
LightTomograph();// Konstruktur
16
~LightTomograph();// Destruktor
17
};
18
19
#endif // INCLUDE GUARD ENDE
2) Dann kommen all deine Funktions-Deklaration hinzu:
Die Includes innerhalb einer Funktion sind nicht sonderlich elegant.
4) Loop und Setup
Hast du aus einem Beispiel kopiert ohne es verstanden zu haben!
Du deklarierst innerhalb der Funktion SetMotorLinksoderRechts loop und
Setup, was ansich schon nicht geht. Und weiter fehlt die
Implementierung.
Das ganze könnte am Schluss etwa so aussehen (habe noch nie Arduino
gehabt, also verzeih die Fehler):
// Empfangene Daten verarbeiten (gemäss Protokoll) BEISPIEL
116
// Daten[0] beinhaltet das Kommando (links, rechts...)
117
// Daten[1] beinhaltet Anzahl Schritte
118
switch(Daten[0])
119
{
120
case0:
121
// Kommando 1 = 0
122
SetMotorLinksoderRechts(true,Daten[1]);
123
break;
124
125
case1:
126
// Kommando 2 = 1
127
SetMotorLinksoderRechts(false,Daten[1]);
128
break;
129
130
case2:
131
break;
132
133
default:
134
// Im Fehlerfall
135
break;
136
}
137
}
Da fehlt jetzt jegliche Logik, da ich dein Problem oder deine
Aufgabenstellung nicht komplett kenne.
BTW:
Wenn ich dich wäre, und mich so eine Aufgabe weder interessiert noch ich
mich dafür im Minimum begeistern kann, dann würde ich mit dem Dozenten
über eine neue Aufgabe sprechen!
Oder halt den Finger aus dem A... nehmen und halt etwas machen, da nicht
alles einfach vom Himmel fällt und immer jedem passt.
Patrick B. schrieb:> Das ganze könnte am Schluss etwa so aussehen (habe noch nie Arduino> gehabt, also verzeih die Fehler):
Nicht vergessen, dass der obere Teil die .h Datei ist und der untere die
.cpp.
Peter D. schrieb:> Ich verstehe nicht, wie man ein Projekt mit Programmierung annehmen> kann, wenn man so gut wie keine Programmierkenntnisse und auch keine> Lust hat.
Weil das heute so üblich ist. Leider.
Der Billigst-Anbieter bekommt den Job.
Erstens möchte ich mich bedanken bei denjenigen die einfach kommentarlos
Antworten geben können, ich mein nur mal als Frage:
Warum Fragen Menschen?... Damit Sie schlecht gemacht werden? Oder gesagt
bekommen was für ein faules A.loch sie sind
ist ja mal sehr nett.. das mit den billigsten Anbieter ergibt wieder
mal richtig sinn in meinen fall weil.. das Projekt von unserer Schule
aus ist! Bzw mit diesem Code ist weder meine Aufgabe beendet noch hab
ich jetzt alles, in den, wie ihr so nett gesagt habt Arsch geschoben
bekommen. Ich wolle nur mal ca. wissen, wie ich das mit einem Code
machen soll, weil es ja so wie ich es gemacht hab nicht gegangen ist.
Und warum nicht weil ich unter anderen keine cpp. bzw h dabei hatte und
der gleichen..allein diese Information hätte mir eine Menge geholfen,
natürlich ist mir klar das man das nicht gleich sieht, weil in den
Internetseiten immer nur gestanden ist, dass man eine machen soll aber
nicht was und wie genau. Bzw hab ich das nie herauslesen können. Aber
das ist jetzt auch nicht das auf was ich hinaus möchte. Ich habe weder
von euch verlangt das ihr mir alles vorschreiben solltet noch sowas in
der Richtung.
Das mit der Reife werde ich jetzt mal klarstellen. Wer jemanden egal
was für eine Fragestellung der jenige hat, egal wie dumm diese Frege
auch sein mag kritisiert oder fertigmacht, Behauptungen von wegen Faul,
Dumm oder so etwas der gleichen macht. Wer ist dann Geistig nicht ganz
ausgereift? Ich sprech jetzt nicht die an die mir Helfen wollten.
Noch etwas ich glaube im Vergleich zu meinen anderen Klassenkameraden
die jetzt ihre Ferien schön faul am Strand liegen und sich einen
feuchten Dreck um ihre Arbeiten kümmern, bin Ich die 40h die Woche
arbeitet in ihren Ferien und kein Geld in den Arsch geschoben bekommt,
weder Faul noch Unreif! Ja dann war der Code halt misst ok, es hat doch
jeder mal angefangen oder ? Das ist kein Grund gleich durchzudrehen noch
dazu ohne die Vorgeschichte zu kennen. Ich habe in diesen Projekt viele
Aufgaben für die, die es Wissen wollen. Ich bin keine Programmiererin,
ich bin für die Hardware zuständig ok nur leider beinhaltet die auch ein
paar Software Codes unter anderem auch Arduino. Also spart euch das mit
der geistigen Reife! Was ich meine mit.. Ich hab auch keine Lust.. Wer
hat schon Lust jeden Tag um 5Uhr aufstehen und 10 Stunden am Computer
sitzen wenn man eigentlich Ferien hätte?.. und sich dann für irgendwas
rechtfertigen muss? Noch dazu haben wir noch genügend Zeit ich bin halt
ungeduldig, noch dazu hab ich mich stundenlang damit beschäftigt bevor
ich auch nur ansatzweiße daran gedacht habe jemand mein Problem zu
zeigen.. Ja macht ruhig weiter was ich in meinen Leben alles falsch
gemacht hab.. als Schüler ..ich sollte mich für meine Dummheit und
Faulheit erschießen oder, ... naaa klar.. lächerlich kann ich da nur
noch sagen..
Ich hoffe es fühlen sich die Richtigen angesprochen.
Für meinen Teil ist die Sache jetzt abgeschlossen weil ich hab zu
arbeiten...und zwar eine Menge.. da hab ich keine Zeit für diesen
Kindergaten! Die Kommentare könnt euch sparen, die lies ich sowieso
nicht mehr.
Hallo Alexandra,
Du solltest versuchen, Antworten, die nicht helfen oder unhöflich sind,
einfach zu ignorieren. Wie Du ja gemerkt hast, verschlimmern jegliche
Reaktionen die Sache nur. So ist das Internet eben.
In den Social Media geht es doch noch schlimmer zu (Shitstorm). Da hätte
ich gedacht, daß die heutige Jugend entsprechend abgehärtet ist. Ich
habe keine Social Media Accounts, das wäre mir zu brutal.
Ich würde mich an Deiner Stelle nicht so stur auf das Problem
fokussieren, sondern erstmal versuchen, mit den Grundlagen klar zu
kommen.
In der Arduino-Installation gibt es bestimmt ne Menge Beispiele und auch
in den Arduino-Tutorials.
Habe bitte Verständnis dafür, daß hier viele gerne knifflige Probleme
lösen, aber eher nicht der Pädagoge sind, der die Grundlagen erklären
kann.
Bei sowas wie:
alexandra schrieb:> Die Kommentare könnt euch sparen,> die lies ich sowieso nicht mehr.
Wozu hast du das hier geschrieben?
alexandra schrieb:> das mit den billigsten Anbieter ergibt wieder> mal richtig sinn in meinen fall weil..
Das hoffe ich mal. Aufgaben, die du nicht erledigen kannst
musst du ablehnen können. Warum hast du zugesagt?
Brauchst du dringend eine gute Note (das wars mitn Geld)?
Die Leute haben so geantwortet weil da sehr viel fehlt->
Peter D. schrieb:> sondern erstmal versuchen,> mit den Grundlagen klar zu kommen.
Hättest du dich angemeldet und etwas mehr offengelegt,
hätte dir sicher jemand geholfen...
Es ist immerhin kein "LED Blink" Problem.
Peter D. schrieb:> Du solltest versuchen, Antworten, die nicht helfen oder unhöflich sind,> einfach zu ignorieren.
Das würde ich nicht sagen. Sie sollte lieber daraus lernen. Bis
alexandra schrieb:> Ich hab gesagt die blöden Kommentare kann man sich sparen OK! Wenn> man> keine Hilfe geben möchte ist mir das egal ich muss das machen, Lust hab> ich ja selber keine also entweder Helfen oder Klappe halten. Wie soll> man bitte sich alles selbst beibringen! Manchmal versucht man halt etwas> und schaut ob es funktioniert...tut mir echt leid das ich um Hilfe bitte> !!
war von den Antworten alles in Ordnung. Spätestens da hat sie mit dem
schlechten Benehmen angefangen. (Von den lustlos hingeworfenen 'Macht
mal'-Beiträgen abgesehen).
alexandra schrieb:> Warum Fragen Menschen?
Aus zwei Gründen:
- Weil sie etwas wissen möchten.
- Weil sie etwas erledigt haben möchten.
Du warst eindeutig auf letzteres aus, dazu noch unhöflich. Warum sollten
wir deine Probleme unentgeltlich lösen wollen, wenn du vermutlich noch
nichtmal einen Dank übrig hast?
alexandra schrieb:> bin Ich [...] weder Faul noch Unreif!
Deine Anfrage ließ auf Faulheit schließen (du wolltest eine Lösung,
keine Hilfe) und deine Reaktion war alles andere als reif (nachdem du
keine Lösung bekommen hast, fingst du an rumzupöbeln).
Es ist scheißegal, was für ein Mensch du im realen Leben bist, wie deine
Situation ist. Das steht in deinen Posts nicht drin, es spielt keine
Rolle, das kann und will keiner wissen.
Das einzige, was wir gesehen haben, ist ein "lös mir mein Problem und
halt ansonsten die Schnauze" - und das ist im Allgemeinen weder ein
Zeichen von Fleiß, noch von Reife.