Show Posts
Pages: 1 ... 69 70 [71] 72 73 ... 94
1051  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 22, 2012, 11:03:51 pm
Der Mega hat mehr als eine serielle Schnittstelle. Damit kannst Du die zweite Serielle Schnittstelle auch per USB (entspr. Adapter mußt Du aber kaufen) mit dem PC verbinden. Damit kannst Du alles was vom Vixen an den Arduino übertragen wird wieder auf eine serielle Konsole zurückschreiben und Die anschauen ob das was Vixen da schickt auch das ist was Du erwartest. Das meine ich mit "loggen".
Zusätzlich würde ich einfach mal ohne das die Daten von extern kommen alle LEDs geordnet der Reihe nach schalten. Damit kannst Du schon mal sicher sein, das die Zuordnung in Deinem Programm stimmt.
1052  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 22, 2012, 01:48:54 pm
Mit 7 LEDs klappt es doch bereits, also musst Du nur das Problem Lösen, warum es bei mehr als 7 LEDs nicht klappt. Leider kennt keiner Deine Einstellungen in dem Programm das die Daten an denArduino schickt. Evtl. ist da ja schon das Problem. Wie wäre es, wenn Du mit dem Arduino die Daten die da kommen mal mitloggst und ggf. auf einer weiteren Seriellen Schnittstelle ausgibst? Hattest Du nicht einen Mega, oder verwechsel ich da was?
Mario.
1053  International / Deutsch / Re: [gelöst] Temperatur Logger, mit DS18B20 on: April 22, 2012, 10:25:22 am
Ich habe mir den fertigen Sketch mal angesehen und mir fallen dabei eingige Dinge auf.

1) Du verwendest zwei Funktionden Sensor_lesen() und Daten_senden(), das finde ich gut, weil es das Programm übersichtlich macht. Aber warum liest Du im Daten_senden() den Sensor nochmal aus? Damit schickst Du an den Webserver ggf. eine andere Temperatur, als Du über Sensor_lesen() über die serielle Schnittstelle ausgegeben hast.

2). Daten_senden() verschickt die Daten an den Webserver. Im loop() gibt es aber nochmal Code der sich mit dem Webserver verbindet. Der allerdings nichts weiter macht  als ein Zeichen aus der Verbindung zu lesen und dann 30 Sekunden bei offener Verbidung zu warten. Das ist nicht nur sinnlos, sondern auch "gemein" gegenüber dem Webserver, da Du eine offene Verbdindung blockierst. In Deinem Fall ist das wurscht, aber kein guter Stil. Stell Dir vor Du baust damit einen öffentlichen Webservice, wo alle Arduinouser dieser Welt Ihre Daten hinloggen dürfen. Und alle würden ihre Verbindung unnötigerweise 30 Sekunden offen halten, dann hast Du einen selbst gebauten Denial of Service Angriff.

3) Auch die Funktion printTemperature() liest den Sensor nochmal aus. Damit ist das die dritte Stelle im Code, die das macht. Hier würde ich viel mehr aufräumen.

- Eine Funktion die den Sensor ausliest und die globale Variable temp1 setzt. Gleichzeitig kannst Du eine globale Variable "boolean messenOK" einführen, die von Sensor_lesen() immer gesetzt wird. TRUE wenn das Messen erfolgreich war, und FALSE wenn nicht.

- printTemperature() gibt den Wert der in temp1 steht nach Serial aus, aber ohne selbst zu messen. Ist "messenOK" gleich FALSE wird eine Fehlermeldung ausgegeben. Gleichzeitig kannst Du z.B. noch eine rote LED einschalten, die dann den Fehler signalisiert.

- Daten_senden() schreibt die Daten an den Webserver, aber auch wieder ohne selbst zu messen. Auch hier kannst Du z.b. den Fehler mit an den Webserver melden.

Beim Schreiben auf den Webserver kannst Du Dir folgenden Code sparen:

Code:
 if (client.available())
 {
   char c = client.read();
   Serial.print(c);
 }
Außer Du willst tatsächlich etwas vom Webserver lesen.

In Daten_senden() würde ich auch noch ein client.close() einbauen, das ist besserer Stil (siehe oben - offene Verbindungen).

Ansonsten ist es doch eine runde Lösung geworden.
Mario.
1054  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 20, 2012, 05:01:45 pm
Der PHP Code ist schon mal ein Anfang. Zwei Dinge würde ich ändern:
Code:
<?php
$data 
$_GET["Fuehler1"]; // Temperatur von Fuehler 1 nach $data; nicht zwingend notwendig, aber übersichtlicher.
$dateiname "log.txt"// Name der Log-Datei (ggf. "/volume1/.../log.txt
// Datei öffnen, wenn nicht vorhanden dann wird die Datei erstellt.
$handler fopen($dateiname "a+");
if(
$handler) {
    
// Dateiinhalt in die Datei schreiben
    
fputs($handler time().";$data\n"); // Unix-Timestamp; $data + Zeilenumbruch schreiben
    
fclose($handler); // Datei schließen
}
?>

Damit sollte es erstmal klappen. Beim Dateinamen musst Du evtl. noch einen passenden Pfadmit angeben. Kommt drauf an, wo der Webserver auf Deinem NAS schreiben darf.
Idealerweise schreibst Du die Daten in ein Verzeichnis, das vom NAS exportiert wird, dann kannst Du direkt auf die Datei von Deinem PC aus zugreifen.
Mario.
1055  International / Deutsch / Re: Frage zu GP2Y0A21YK0F Infrarotsensor on: April 20, 2012, 03:51:15 pm
Blöde Frage, aber an den 3,3V neben dem 5V Anschluss hat der Sensor nicht gesteckt, oder?
Hab meinen BMP85 auch schonmal mit 5V gegrillt, weil ich mich vertan hab.
Mario.
1056  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 20, 2012, 03:43:46 pm
Keine Panik, das wird schon. Immer schön einen Schritt nach dem anderen.
Als erstes kannst Du ja das PHP Script auf dem NAS entwickeln. Das es macht was es soll, kannst Du ja erstmal mit einem Browser testen. Wenn das klappt, ist dann der Arduino dran mit senden.
Das zunächst nur mit festen Daten und wenn das dann klappt, kommen die gemessenen Werte dran.
Und wenn es Fragen gibt, dann sind wir hier ja auch noch da.
1057  International / Deutsch / Re: Arduino GSM shield http Get Verbindung on: April 20, 2012, 12:48:50 pm
Das würde mich wundern. Ich hab mich mal ein wenig durch den Code geklickt. Am Ende landet das "gsm.SimpleWrite(path);" bei einem _cell.print(char*). Und dieses _cell ist eine Instanz von SoftSerial. Außerdem ist es komisch, das es klappt, wenn Du den String direkt in den Lib-Code schreibst.
Die inet.httpGET() Methode definiert path und server als const char*, also auch nix ungewöhnliches.
Wie gesagt, sehr seltsam. Versuch mal ein par Debugausgaben mit dem übergebenen String "server" an verschiedenen Stellen der Lib auszugeben, evtl. kommst Du so weiter.
1058  International / Deutsch / Re: Arduino GSM shield http Get Verbindung on: April 20, 2012, 11:52:55 am
Das ist in der Tat ein seltsames Verhalten.
Ich hatte mir folgende Lib heruntergeladen:
http://code.google.com/p/gsm-shield-arduino/downloads/detail?name=GSM_Shield_GPRS_Ver_3_08_%28IDE100%29.zip&can=2&q=
Das ist Version 3.08 für die IDE 1.0 vom 15.03.2012. Also ziemlich aktuell.
Evtl. probierst Du es mal mit der.
1059  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 20, 2012, 07:36:01 am
Ok, ich hab mir den Code gerade nochmal angesehen. Welcher Teil ist von Dir und was ist von dem Beispiel das Du gefunden hast? Denn es gibt bereits zwei Funktionen zum Sensor-Lesen und Daten-Senden. Allerdings verwenden die noch einen analogen Sensor und schicken einen Key mit im Request, vermutlich zur Authentifizierung beim PHP-Script.
Wie in einem anderen Thread schon geschrieben, finde ich es ungünstig, fremden Code 1:1 zu übernehmen und auf die eigenen Bedürfnisse anzupassen. Lieber eigenen Code schreiben und einzelne Teile oder Funktionen aus anderem Code übernehmen. Das ist strukturierter und übersichtlicher.
Wenn es nicht auf Anhieb klappt, dann zerlege die Aufgabe in einzelne Teilaufgaben, die Du unabhängig voneinander löst.

z.B.
1) HTTP-Request an ein PHP-Script auf dem NAS schicken. Dazu einfach zwei fixe Werte in loop() einmal pro Minute an das Script schicken und dort auswerten.
2) Wenn 1 funktioniert, dann Deinen Code zum Auslesen der Temperaturen (am besten als eigene Funktion) in den Code mit einbauen. Dann die bisher fixen Werte durch die gemessene Temperatur ersetzen und wieder mit dem PHP-Script verarbeiten
3) Ergänzen weiterer Funktionen die Du noch haben willst.

Btw. ich habe keine zusätzliche Wetterstation, der Arduino IST die Wetterstation :-)
Mario.
1060  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 20, 2012, 07:20:19 am
Code:
client.println("GET http://192.168.178.111/senddata.php?temp1=10.3&temp2=23) HTTP/1.0");
stimmt schon fast.

Code:
client.print("GET /senddata.php?temp1=");
client.print(temp1);
client.print("&temp2=");
client.print(temp2);
client.print(" HTTP/1.0\n");
client.println("Host: 192.168.178.111\n");
Ist richtig. Du gibts hinter dem GET nur den relativen Pfad an. Solltest Du für den Webservice einen Domainnamen verwenden und nicht nur die IP, dann musst Du den Parameter "Host:" anpassen. Akutell sollte es aber erstmal so gehen.
Das obige Beispiel geht davon aus, das Du zwei Variablen temp1 und temp2 hast, welche die gemessene Temperatur as float enthalten.
Du brauchst dann auf dem NAS ein PHP-Script das unter http://192.168.178.111/senddata.php aufrufbar ist. In diesem Script hast Du dann zwei Werte im globalen Array $_GET[] für temp1 und temp2, die Du dann z.B. in eine Datei schreiben kannst. Idealerweise ergänzt um den aktuellen Timestamp.

Allerdings ist Dei Code noch durcheinander. Das Senden an den Server soll ja regelmäßig passieren, also muss das in die loop(). Dafür muss der Server-Kram aus der loop() raus, da Du den nicht mehr brauchst. Am einfachsten definierst Du Dir eine Funktion sendHTTP(float temp1, float temp2) die den HTTP-Request kapselt, dann wird Dein Programm übersichtlicher.
1061  International / Deutsch / Re: Lesetipp: c't - Arduino im AVR-Studio programmieren on: April 20, 2012, 02:44:01 am
Das macht die Datei "main.cpp" welche die IDE mitbringt:
Code:
#include <Arduino.h>

int main(void)
{
        init();

#if defined(USBCON)
        USB.attach();
#endif

        setup();

        for (;;) {
                loop();
                if (serialEventRun) serialEventRun();
        }

        return 0;
}
Die kapselt das eigentliche main() und einige spezielle Setup-Geschichten.
1062  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 20, 2012, 02:28:24 am
Dafür ist ja die SD-Karte da, dort werden die Daten lokal gespeichert. Der Zugriff selbst kann auch wieder indirekt erfolgen. z.B. durch aufrufen eine URL http://<synologyIP>/service.php
Das kann der Arduino regelmäßig pollen und dort stehen z.B. Befehle wie
"send 2012-04-19.csv" drin. Damit kann der Arduino in einer "Messpause" die Datei von der SD-Karte per HTTP-Post an den Webserver hochladen.
Das kann man sicher auch alles anders lösen. Es gibt immer verschiedene Wege zum Ziel. Bei meiner Lösung war mir wichtig, das der Arduino Wetterdaten sammelt und nicht die meiste Zeit damit verbringt auf einen HTTP-Request zu warten, oder von einem Request im ungünsitgen Zeitraum erwischt wird.
1063  International / Deutsch / Re: VirtualWire on: April 19, 2012, 11:29:56 pm
Aber das ist genau der Punkt. Du überträgst ein struct von einem System auf ein anderes. Die Wahrscheinlichkeit, das Du auf dem 2. System das gleiche Speicherlayout hast und damit der Pointer aus dem struct auf Deine eigene Memory-Page zeigt ist verschwindend gering. Somit hättest Du gute Chancen, das der Speicherschutz zuschlägt, sobald Du den String aus dem struct verwenden willst.
Beim Arduino gibt es keine Pages, der Speicher wird linear adressiert. Dazu kommt, das bei den meisten µControllern eine Harvard-Architektur eingesetzt wird, also getrennter Programm und Datenspeicher. Beim Arduino / Atmel ist das Flash-Ram für den Code und SRAM für die Daten. Moderne PCs setzen auf die von Neumann-Architektur, bei der Programm und Daten in einem gemeinsamen Speicher liegen. Somit kann man sich durch falsche Pointer auf dem Arduino zumindest nicht den eigenen Programmcode zerstören.
1064  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 19, 2012, 11:23:14 pm
Dann mach doch aus dem Arduino einen Webclient, keinen Webserver.
Der Arduino misst die Temperatur und ruft auf Deinem Webserver eine URL (z.B. http://<synology-IP>/senddata.php?temp1=10.3&temp2=23) auf. Der Synology-Webserver kann auch PHP, Du kannst dort also ohne Probleme die Daten verarbeiten und in eine Datei schreiben. Außerdem sparst Du Dir so den Cronjob auf dem NAS das alle X Minuten den Arduino abfragt. Meine Arduino-Wetterstation funktioniert auf diese Weise sehr stabil seit einem halben Jahr. Ich habe mir sogar die RTC gespart und frage einmal täglich über eine spezielle URL von Webserver die Zeit ab. Das spart den Code für eine NTP-Funktion, denn ein HTTP-Get musste ich ja eh bauen.
Ein weiterer Vorteil ist, das der Arduino den Zeitpunkt zum Senden der Daten bestimmen kann und nicht immer auf ankommende Requests warten muss.
1065  International / Deutsch / Re: Temperatur Logger, mit DS18B20... Brauche Hilfe bitte... on: April 19, 2012, 02:04:56 pm
Ja, der Code wäre sicher hilfreich. Aber bitte in "#" Tags. Evtl. auch als Anhang, denn ich vermute mal das ist nicht wenig :-)
Evtl. kann man ja das eine oder andere optimieren, damit der Webservice auch noch mit dazu passt.
Pages: 1 ... 69 70 [71] 72 73 ... 94