Show Posts
Pages: 1 2 [3] 4 5 ... 164
31  International / Deutsch / Re: Windmesser auslesen on: April 11, 2014, 02:12:57 pm
Werde Deinen Sketch erst morgen Nachmittag ausprobieren können, mit Werten ungleich 0.0. Werde mal mit positiven und negativen Werten.

Dein Gerät zeigt offenbar zwei Werte an: Eine "aktuelle Windgeschwindigkeit" und eine "durchschnittliche Windgeschwindigkeit", die auf unterschiedliche Art, je nach eingestellter Betriebsart, errechnet wird.

Als erstes mal müßtest Du herausfinden, welches die der "aktuelle" und welches der "durchschnittliche" Wert ist. Ich tippe mal drauf "--.-" steht für "aktuell" und "0.0" für "Durchschnitt der Messung".

Hast Du eigentlich nur den reinen Windsensor oder auch das "Windmessbedienpult Timy2 XE" bei Dir vorliegen?
32  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 02:02:27 pm
Also das Ethernetshield ist drauf, weil er auch noch Server ist um die Werte an zu zeigen.
Aber warum beist sich das ? ich dachte das Ethernetshield benutzt pin 10, 11, 12, und 13

An A0 und A1 sind zwei Signale des SD-Kartenschachtes angeschlossen, und zwar Signale für
- SD Karte vorhanden / nicht vorhanden
- SD Karte schreibgeschützt / nicht schreibgeschützt

Wenn Du zwar den Ethernet-Teil benötigst, aber diese beiden SD-Kartensignale nicht, dann kannst Du die beiden Pins A0 und A1 am Ethernet-Shield gerne um 90° krummbiegen oder abknipsen bevor Du das Shield aufsteckst, so dass diese beiden Pins keine Verbindung zwischen Arduino-Board und Ethernet-Shield mehr haben. Dann kannst Du auch A0 und A1 bei aufgestecktem Ethernet-Shield für analogRead verwenden. Allerdings kannst Du an diesen beiden Pins danach nicht mehr auslesen, ob eine SD Karte eingesteckt ist oder nicht und ob sie ggf. den Schreibschutz eingelegt hat oder nicht.
33  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 01:20:13 pm
Kann mal jemand auf meinen Sketch schauen, ich finde den Fehler nicht...  smiley-red
...
Achso, das ganze läuft auf einem Uno mit Ethernet-Shield...

Wie jetzt? Ethernet-Shield?
Was macht das Ethernet-Shield in dem Sketch?

Soll das nur aufgesteckt sein, um den Sketch verrecken zu lassen?

Laut http://shieldlist.org/arduino/ethernet-v5 verwendet das Ethernet-Shield A0 und A1.

Und Du machst im Sketch:
Code:
int ldrleft = 1;   
...
int left = analogRead(ldrleft);                     // LDR links einlesen

Je nach verwendetem Board und Arduino-Softwareversion wird die unsaubere Deklaration "1" in der Funktion "analogRead" als "A1" interpretiert und A1 angesprochen. Wenn der Sketch wenigstens anfänglich funktioniert, dürfte das bei Dir der Fall sein. Und dann beißt es sich mit der Verwendung von A1 durch das Ethernet-Shield.
34  International / Deutsch / Re: Windmesser auslesen on: April 11, 2014, 10:19:56 am
Vielen Dank für den Hinweis. Dem bin ich nun nachgegangen, das Ergebnis bleibt das gleiche ( siehe Bild ).

???

Verstehe ich das richtig:
Dein Sketch aus  Reply #2 mit kurzschlußträchtigem Sensoranschluß an Serial liefert dieselbe Ausgabe wie mein Sketch aus  Reply #4 mit sauber getrenntem Sensoranschluss an Serial1?

Oder hast Du Deinen Sketch aus  Reply #2 so abgeändert, dass er nun mit dem an Serial1 angeschlossenen Sensor läuft?

Und Du hast wirklich keinerlei Datenblatt? Hersteller? Typenbezeichnung vom Sensor?
Irgendein Herstellerlogo oder Aufdruck auf dem Sensor verfügbar?
So dass man vielleicht etwas mehr über den Sensor herausfinden kann?

Wenn Du keinerlei technische Angaben hast, weißt Du ja noch nicht einmal, was der Sensor sendet?
Windstärke in Meter pro Sekunde? Oder in Yard pro Sekunde? In Kilometer pro Stunde? Meilen Pro Stunde? Knoten? Beaufort?

Anyway, hier ein neuer Test-Sketch zum Ausknobeln des Sendeprotokolls:
Code:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial1.begin(9600);
}

unsigned long receiveCount=0;

void loop() {
  while (Serial1.available())
  {
    receiveCount++;
    byte b=Serial1.read();
    char c=b;
    Serial.print(receiveCount);
    Serial.print('\t');
    Serial.print(b);
    Serial.print('\t');
    Serial.print(c);  
    Serial.println();
  }
}

Lasse mal laufen und poste die serielle Ausgabe, und zwar NICHT als Screenshot, sondern indem Du die Ausgabe im seriellen Monitor markierst und per Copy-and-Paste hier einfügst, am besten innerhalb von Code-Tags.

Vielleicht den Sensor auch mal mit einem Fön in der Kaltluftstufe anblasen, damit er andere Werte als Null liefert.
35  International / Deutsch / Re: HC-SR04 Sensor fehlt da was? on: April 11, 2014, 09:23:12 am
Gibt es hier irgendwo ein umfangreiches Beispielprogramm was eben mit vielen Unterfunktionen etc. arbeitet was auch etwas dokumentiert ist.
Wenn ich den Aufbau und die Logik dahinter sehe komme ich schneller voran

Hier mal ein kurzes Beispielprogramm, das einmal pro Minute die Temperatur "mißt" (die Messung wird nur durch eine Zufallsfunktion simuliert) und alle 10 Minuten den PH-Wert.

Das Programm zeigt, wie ich an so etwas herangehe:
Code:
void setup() {
  Serial.begin(9600);
}

float temperatur;
#define TEMPINTERVALL 60*1000L // 60 Sekunden
float phWert;
#define PHINTERVALL 10*60*1000L // 10 Minuten

void eingabeTemperatur()
{
  static unsigned long letzteMessung=-TEMPINTERVALL;
  unsigned long now=millis();
  if (now-letzteMessung>TEMPINTERVALL)  // 1 Minute
  {
    temperatur=20+random(50)/10.0; // Test only: Zufallswert "messen"
    letzteMessung=now;
    Serial.println("Debug-Meldung: Temperatur gemessen");
  }
}

void eingabePH()
{
  static unsigned long letzteMessung=-PHINTERVALL;
  unsigned long now=millis();
  if (now-letzteMessung>PHINTERVALL)  // 60 Minuten
  {
    phWert=7+random(10)/10.0; // Test only: Zufallswert "messen"
    letzteMessung=now;
    Serial.println("Debug-Meldung: PH-Wert gemessen");
  }
}


void verarbeitung()
{
  // nichts
}

void ausgabe()
{ // einmal pro Sekunde den Wert in der Anzeige aktualisieren
  static unsigned long letzteAnzeige=0;
  unsigned long now=millis();
  if (now-letzteAnzeige>1000) // 1 Sekunde
  {
    Serial.print("Temp: ");Serial.print(temperatur);Serial.print('\t');
    Serial.print("PH: ");Serial.print(phWert);Serial.println();
    letzteAnzeige=now;
  }
}

void loop() {
  eingabeTemperatur();
  eingabePH();
  verarbeitung();
  ausgabe();
}

Jedes Programm wird in verschiedene "Tasks" (= Funktionen) aufgeteilt, die in der loop-Funktion reihum immer wieder abgearbeitet werden. Eine sinnvolle Aufteilung der Tasks erfolgt nach dem "EVA-Prinzip":
- Eingabe
- Verarbeitung
- Ausgabe
Die EVA-Trennung ist deshalb so sinnvoll, weil sie die spätere Wartbarkeit und Erweiterung des Programms sehr vereinfacht.  So könnte man Eingaben von Tastaturbedienung auf Drehgeber umstellen. Oder auf Infrarot-Fernbedienung. Oder die Ausgabe erstmal für Serial programmieren und später ein LCD-Textdisplay umschreiben. Oder auf die Ausgabe per Netzwerk auf einem Webbrowser, der die Daten abruft.

Nur "Debug-Ausgaben" auf Serial, um sich während der Programmentwicklung zwischendurch mal etwas auf Serial ausgeben zu lassen, um den Stand von Variablen zu prüfen, sind außen vor, und können überall im Code eingestreut werden.

Der Trick dabei, dass scheinbar "alles gleichzeitig" abläuft, liegt darin:
a) Aufrufe der "delay" Funktion mit langen delay-Zeiten bei interaktiven Programmen stets vermeiden!
b) Jede Task-Funktion so programmieren, dass sie in kürzester Zeit abgearbeitet ist

So können dann die Schritte Eingabe-Verarbeitung-Ausgabe viele tausend mal pro Sekunde ablaufen und im Programm "passiert" tatsächlich eigentlich nur dann etwas, wenn die Zeit reif dafür ist, z.B. einmal pro Sekunde, einmal pro Minute oder einmal alle 10 Minuten.
36  International / Deutsch / Re: Windmesser auslesen on: April 11, 2014, 05:56:30 am
In welchem Format der Sensor(Windmesser) sendet kann ich leider nicht sagen, da ich an keinerlei Daten rankomme.

Dann wage ich mal die Prognose:

Deine Aussage "Das serielle Auslesen des Windmessers funktioniert schon mal (siehe Bild)." ist FALSCH!

Du liest mit Deinem Code zwar irgendwas, aber das ist nicht das, was der Sensor sendet.

Zum Auslesen nutze ich einen RS232 auf TTL Wandler und von dort gehe ich auf die Serielle Schnittstelle des DUE.

Du Kurzschluß-Bastler! Du riskierst es gerade, Deinen Due und oder auch den Windmesser gleich mit zu zerstören!

Die serielle Schnittstelle "Serial" ist spätestens ab der Zeile "Serial.begin(9600)" mit Deinem PC verbunden!
Dieselbe Schnittstelle darfst Du nich nochmal woanders anschließen!

Eine serielle Schnittstelle stellt eine Point-to-Point-Verbindung dar und es darf immer nur EIN serielles Gerät mit EINEM anderen serielle Gerät verbunden werden!

Du hast gerade an der seriellen Schnittstelle Deines DUE ZWEI serielle Geräte angeschlossen:
- den PC mit dem "Seriellen Monitor"
- den Windmesser über den RS232-TTL Adapter

Ich würde als erstes mal diesen Kurzschluss in Deiner Schaltung beseitigen und den Windmesser über den RS232-TTL-Adapter an einem ANDEREN SERIELLEN ANSCHLUSS Deines DUE anschließen.

Also schließe den Windmesser an Pin 0 und 1 ab, und schließe ihn beispielsweise an Serial1 an. Ich habe zwar keinen DUE, aber ich lese in der Beschreibung:
Code:
The Arduino Due hat drei zusätzliche Serial Ports: Serial1 an den Pins 19 (RX) und 18 (TX),
Also den TTL-Adapter  des Windmessers an 19 und 18 (Serial1) wäre möglich.

Achte auch auf die Pegel Deines Adapters: Der DUE verträgt nur 3.3 Volt!
Also keinen Adapter mit 5 Volt TTL-Pegeln verwenden!

Bzw. wenn Du nur Daten vom Windmesser auslesen möchtest, brauchst Du nur den TX-Sendepin des Windmessers mit dem RX-Pin 19 von Serial1 zu verbinden. (Empfangen braucht der Windmesser ja wohl nur, wenn er umprogrammiert werden soll, aber er sendet wohl vermutlich von alleine, ohne dazu einen Sendebefehl zu benötigen).

Und dann teste erstmal mit einem solchen Sketch:
Code:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  while (Serial1.available()) Serial.write(Serial1.read());  
}

37  International / Deutsch / Re: Probleme beim Öffnen einer Datei auf einem SD-Kartenleser on: April 11, 2014, 05:33:23 am
Nur mal der Vollständigkeit halber: Wie hätte ich es denn machen müssen, wenn ich nicht snprintf() nutzen würde?

Viele Möglichkeiten zum Zusammenbasteln des Strings. Zum Beispiel:
Code:
  char filename[13]="gpslg";
  int number=7;
  if (number<100) strcat(filename,"0");
  if (number<10) strcat(filename,"0");
  itoa(number,&filename[strlen(filename)],10);
  strcat(filename,".log");
  Serial.println(filename);

Du müßtest Dir auch mal über den Unterschied zwischen "char" und "char array" klarwerden.

Ein einzelnes Zeichen ist ein "char" und wird als Konstante zwischen EINZELNE HOCHKOMMAS gesetzt. Zum Beispiel:
Code:
char c='x';

Ein char-Array hat eine bestimmte Größe (Anzahl Zeichen plus eins extra als "Stringende-Zeichen") und wird als Konstante zwischen DOPPELTE HOCHKOMMAS gesetzt:
Code:
char filename[13]="gpslg";  // String definiert für Maximallänge 12 und abschließendes Nullzeichen
Das abschließende Nullzeichen in Stringkonstanten wird automatisch eingefügt, das braucht nicht geschrieben werden.

Aber ein char-Array ("C-String") ist eben etwas grundlegend anderes als ein "char".
Insbesondere kannst Du chars mit dem Pluszeichen addieren:
Code:
  char Buchstabe='A'+1;
Das ergibt den Buchstaben 'B', weil 'B' um genau eine Stelle hinter 'A' im ASCII-Alphabet kommt.
Aber ein "char plus irgendwas" ergibt immer nur einen einzelnen char und niemals einen String.

Um char-Arrays ("C-Strings") miteinander zu verbinden, muss eine Funktion aufgerufen werden: strcat
38  International / Deutsch / Re: Windmesser auslesen on: April 11, 2014, 04:28:56 am
Nur komme ich nicht drauf, wie ich den Wert, in diesem Fall 0.0, verarbeiten kann.

Das "Anzeigen der Daten auf dem seriellen Monitor" fällt bei Dir wohl nicht unter "verarbeiten", oder?

Dann erkläre doch mal: Was genau verstehst Du unter "verarbeiten", wenn es "anzeigen der Daten" nicht ist?

Und erkläre mal genau das serielle Datenformat, das Dein Sensor sendet!
Dein Sensor sendet offenbar Daten über eine serielle Schnittstelle an Deinen Arduino, und Du zeigst die Daten offenbar auch im seriellen Monitor an (mit welchem Sketch?), aber was genau sendet der Sensor (hat der eine Modellbezeichnung, Beschreibung, Datenblatt?) und wie möchtest Du es "verarbeiten"?

Bei Sensoren, die ein ASCII-Klartextformat mit einem Zeilenende-Zeichen senden, wäre das generelle Vorgehen so:
- Immer eine Zeile vom Sensor in ein char-Array einlesen
- die eingelesene Zeile in die verschiedenen Bestandteile zerlegen (Tokenisierung)
- die einzelnen Bestandteile zur weiteren Verarbeitung in numerischen Variablen abspeichern
39  International / Deutsch / Re: Temperatursteuerung bremst Arduino uno aus - Warum? on: April 11, 2014, 03:45:32 am
Das ist mein erstes Projekt mit dem Arduino und der Code ist bestimmt nicht der schönste.

Der Code ist ja hübsch häßlich!

Leider etwas unübersichtlich.

Außerdem steckt ein Teil des Codes in einer Library, die Du nicht benennst, wo Du sie her hast.
Es gibt bestimmt ein Dutzend verschiedene DHT-Libraries, bei denen die Include-Dateien teils dieselben Namen haben.

Um auszuschließen, dass es die Temperaturmessung im Library-Code ist, die Deinen Sketch ausbremst, kannst Du ja mal statt:
Code:
float h = dht.readHumidity();
  float t = dht.readTemperature();
den Code testweise ändern auf:
Code:
float h = 66.0;
  float t = 22.5;

Macht das einen Unterschied? Oder ergibt sich damit keine Änderung?
40  International / Deutsch / Re: Probleme beim Öffnen einer Datei auf einem SD-Kartenleser on: April 11, 2014, 02:52:12 am
Um im empfohlenen 8.3 Dateinamen zu bleiben, möchte ich gerne folgende Dateien erstellen:

gpslg001.log

Statt 001 wird ein Zähler raufgezählt

Code:
  char filename[13];
  int number=7;
  snprintf(filename,sizeof(filename),"gpslg%03d.log",number);

"snprintf" ist die "sichere" Variante der Funktion "sprintf" zur Ausgabeformatierung:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#ga53ff61856759709eeceae10aaa10a0a3

Wie das mit der Formatierung über Formatierungsparameter funktioniert, kannst Du Dir in jedem C-Tutorial ansehen, in dem es anhand der Funktion "printf" (für Bildschirmausgabe eines Computerprogramms, also für Mikrocontroller so nicht direkt verwendbar) erklärt wird. "sprintf" bzw "snprintf" formatieren stattdessen Variablen im RAM, verwenden aber dazu dieselben Formatierungsparameter.
41  International / Deutsch / Re: "UNO" Bootloader im ATMEGA8 / 168 ??? on: April 10, 2014, 03:30:55 pm
Wo liegt das Problem?

Wahrscheinlich wolltest Du in der boards.txt statt:
Code:
optia8.build.variant=standard
eher schreiben
Code:
opti8.build.variant=standard
42  International / Deutsch / Re: HC-SR04 Sensor fehlt da was? on: April 10, 2014, 03:29:38 pm
Gibt es da Lösungsansätze zur Programmierung?

Kooperatives Multitasking mit der loop-Funktion als Scheduler.

Beispiel: in einer Schleife muss/will ich nur alle 10 Minuten was auslesen und eine Aktion ausführen. ZB. beim Temp-Sensor
in der anderen Schleife möchte ich 1 mal pro Std was ausführen z.B. PH messen usw usw.

irgendwie geht das aber bestimmt oder?

Die Arduino-Software startet automatisch einen Timer, der Dir einen mit der Funktion "millis()" auslesbaren Millisekundentakt bereitstellt. Davon abgeleitet kannst Du Dir natürlich auch eigene Funktionen basteln, die nur alle 10 Minuten laufen. Alle 10 Minuten wäre also 10 * 60 Sekunden * 1000 Millisekunden = 600000. Also mußt Du immer, wenn millis() um 600000 weitergezählt hat, einmal Deine Funktion laufen lassen.
43  International / Deutsch / Re: HC-SR04 Sensor fehlt da was? on: April 10, 2014, 02:42:27 pm
Wie muss ich mir das Abspeichern der Sketche auf dem Arduino vorstellen.
Haben da mehrere Sketche Platz?

Nein. Beim "Upload" wird immer der vorhandene Sketch gelöscht und der neue Sketch hochgeladen.

wieviel MG passen da drauf?

Was soll MG bedeuten? Megabytes?
Ein Arduino UNO hat 32 KB Flash-Speicher, also 0,032 MB.  Oder in Gigabytes ca. 0,000032 GB.

wenn ich einen Sketch nicht mehr brauche wie bring ich den wieder runter oder lösche diesen?

Der alte wird automatisch gelöscht, bevor der neue hochgeladen wird.
44  International / Deutsch / Re: HC-SR04 Sensor fehlt da was? on: April 10, 2014, 02:19:07 pm
Hier mal die neuen Bilder Vorder und Rückseite.

Das Layout Deiner Platine scheint etwas anders zu sein als bei dem Foto-Link, den ich gesendet hatte.

Aber trotzdem sollten sich beim angeschlossenen Schwingquarz zwei Kondensatoren befinden, auf dem von mir verlinkten Foto C6 und C7 direkt am Quarz angeschlossen und auf Deinem Foto C1 und (sieht aus wie) C5 in unmittelbarer Nähe. Dort sind auf Deinem Foto nur zwei leere Bestückungsplätze für die beiden Kondensatoren zu sehen.

Für mich sieht es auch auf der anderen Platinenseite unvollständig bestückt aus.
45  International / Deutsch / Re: Datalogger + WifiWebServer - Problem bei Client anfragen! on: April 10, 2014, 02:09:36 pm
Hätte jemand eine Idee wie so ein Problem codetechnisch zu lösen wäre? :-)

Was für ein Signal gibt der Windsensor?

Ist das ein Reedkontakt, der wie bei einem Fahrradtacho einmal pro Umdrehung einen kurzen Schließ-Impuls liefert?
Pages: 1 2 [3] 4 5 ... 164