Show Posts
Pages: 1 ... 59 60 [61] 62 63 ... 94
901  International / Deutsch / Re: Arduino aus dem Internet erreichen on: July 17, 2012, 07:03:25 am
dyndns ist immer noch kostenlos, falls Du keinen der Premiumservices nutzt. Für ein einfaches DNS kostet das nix.
Ich würde aber trotzdem dringend davon abraten, den Arduino direkt aus dem Internet zugänglich zu machen.
Es gibt aufgrund der limitierten Rechenleistung keinerlei Sicherheitsmechanismen. Der i.d.R. verbaute WizNET 5100 Ethernet Chip kann glaub ich maximal 2 parallele Netzwerkverbindungen verarbeiten. Alles was darüber hinaus geht, kann ungewollte Seiteneffekte haben.
Ich weiss ja nicht, was Du da schaltest, aber ich vermute mal es gibt keine Authentifizierung oder einen Passwortschutz. Jeder der Deine öffentliche IP kennt, hat damit Zugriff auf den Arduino. Auch wenn Du die IP keinem sagst, es gibt genug Spambots, die nihcts anderes machen als ganze Netze abzugrasen auf der Suche nach offenen Ports. Da bei solchen Scans auch immer Daten geschickt werden, bekommt Dein Arduino wahllos irgendwelche Bytes geschickt.
Bist Du 100%ig sicher, das Dein Projekt gegen alle falsch gesendeten Daten abgesichert ist?
Im schlimmsten Fall schalten Dir irgendwelche Leute das Licht an- und aus, steuerst Du aber z.B. die Heizung von Aquarium oder Deinem Pool, kann das schnell größere Folgen haben (Stromkosten, gekochte Fische, etc.).
Auch wenn es Dein Projekt drastisch vergrößert, ich würde immer einen Server vor den Arduino hängen, der den Zugriff regelt. Hier kannst Du dann mit Paswortabfragen, HTTPS und was weiss ich nicht alles das Projekt sicher machen. Der Webserver selbst redet dann per lokalem Netzwerk mit dem Arduino. Schau Dir mal das Projekt von Cetax an: Hier haben wir sowas detailliert besprochen. http://arduino.cc/forum/index.php/topic,102817.0.html

INTERNET <-----> | Router | <----> Webserver  <----> Arduino

Edit: Ein solcher Server könnte z.B. der Raspberry Pi sein, da läuft ein "normales" Linux drauf und für wenig Last sollte die Performance auf alle Fälle reichen. Außerdem kann die Kist per USB mit Strom versorgt werden und ist entsprechend sparsam. Mit etwas Geschick kann man sich sogar den Arduino-Ethernet oder das Ethernet-Shield sparen, wenn man Raspberry und Arduino über eine serielle Schnittstelle miteinander reden läßt.
902  International / Deutsch / Re: Char - String Operationen on: July 17, 2012, 03:56:39 am
atoi() und atof() kommen aus den Lib-C (bzw. aus dem Pendant für die AVRs: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html).
C-Strings müssen Null-Terminiert sein, also der Wert "0" (nicht das Zeichen '0' markieren das Ende eines Strings. Im Prinzip ist ein C-String ja nur ein array of char.

Durch das Ersetzen der "," durch  '\0' (also den Wert 0) "zerstückelst Du Deinen C-String (char-array) in einzelne Häppchen, die Du dann den Funktionen übergeben kannst. Aus

"12,34,01234,777.88" wird dann "12\034\001234\0777.88"
Der Zugriff erfolgt dann jeweils über einen Pointer auf das erste Zeichen des jeweiligen Teilstrings:
Code:
char buffer[19] = "12\034\001234\0777.88";

char* hour = &buffer[0];
char* minute = &buffer[3];
char* intvalue = &buffer[6];
char* floatvalue = &buffer[11];


Etwas komplizierter wird es, wenn die Kommas an unterschiedlichen Stellen auftauchen, also die Teilstrings unterschiedliche Längen haben können.

Ich weiss ja nicht, wie Du die Daten aus der Ethernetschnittstelle einliest, aber vielleicht kann man das ja schon beim Lesen parsen und in passende Variablen speichern.

903  International / Deutsch / Re: Char - String Operationen on: July 17, 2012, 01:39:23 am
Ob Du nun char oder byte einliest, macht keinen Unterschied. Die Daten bleiben ja trotzdem die gleichen.

Schau Dir mal die Funktionen atoi() und atof() an, die wandeln Strings in Integer und Float um. Wenn der String immer gleich groß ist, also die Trenner (,) immer an der gleichen Stelle sind, könntest Du Dir jeweils den Anfang (erstes Zeichen) des Integer und des Float merken, die "," jeweils durch '\0' ersetzen und dann atoi() und atof() jeweils mit den Zeigern auf die Anfangszeichen füttern.
Mario.
904  International / Deutsch / Re: Solved! RTC mit UDP-NTP synchronisieren on: July 16, 2012, 11:42:11 pm
Schön, das es geklappt hat. Als kleine Fingerübung wäre es klasse, das in eine oder zwei Funktionen zu packen, die man dann einfach in andere Projekte übernehmen kann.
Mario.
905  International / Deutsch / Re: nette Anfängerfrage on: July 16, 2012, 11:26:42 pm
Dein Problem ist, das client.println() nicht so funktioniert, wie ein "printf()". (siehe auch http://arduino.cc/en/Reference/ClientPrintln)
Du musst erst den vollständigen String erzeugen und den dann mit client.println() ausgeben.
Beispiel:

Code:

int pin = 13;
int statuslevel = 1;

char buffer[50]; //muss gross genug sein für den kompletten String inkl. der Integerwerte als String

//umwandeln
sprintf(buffer,"GET /datei.php?pin=%d&status=%d HTTP/1.0",pin,statuslevel);

client.println(buffer);
906  International / Deutsch / Re: Char - String Operationen on: July 16, 2012, 09:34:25 pm
Dazu erstmal eine Frage. Wie werden die Daten gesendet?
Also tatsächlich als String, oder als tatsächliche Werte?
Gemeint ist folgendes: (Beispiel Uhrzeit)
1) Es werden die Zeichen  '1' '2' ',' '3' '4' gesendet, das wären dann die Byte-Werte 49,50,44,51,52
2) Es werden die Bytewerte gesendet, also 1,2,',',3,4

Dein  Beispiel mit dem Integer legt nahe, das Du die einzelnen Ziffern als jeweiligen Byte-Wert, nicht als Zeichen sendest, sonst würde nämlich bei input[6]*10000 + input[7]*1000 + input[8]*100 + input[9]*10 + input[10]*1 Blödsinn rauskommen. Dann wäre es bei der Uhrzeit aber auch (char(input[0]+49) + char(input[1]+49) + ":" + char(input[3]+49) + char(input[4]+49)).
Mario.
907  International / Deutsch / Re: Pins abfragen on: July 15, 2012, 06:37:59 am
Um die ursprüngliche Frage zu beantworten. Ja, man kann den Wert eines als OUTPUT deklarierten Pins, das mittels digitalWrite() gesetzt wurde auch wieder mittels digitalRead() bestimmen.
Letztendlich steht ein HIGH oder LOW für ein bestimmtes Pin immer im gleichen Register, egal ob es als Input oder Output verwendet wird. Entscheidend ist nur, das bei einem Eingang der Wert am Eingang der Wert des Bits bestimmt und bei einem Ausgang der Wert des Bits den Wert am Ausgang.
908  International / Deutsch / Re: RTC mit UDP-NTP synchronisieren on: July 14, 2012, 02:21:56 am
So ganz verstehe ich Dein Programm nicht. Das Datum setzt Du hart kodiert im Sketch und nur die Uhrzeit wird mit der NTP Zeit gesetzt. Nachdem Du die NTP-Zeit geholt hast, wartest Du eine Sekunde, ehe Du die Zeit der RTC setzt. Damit geht doch Deine Uhr automatisch schon mal eine Sekunde nach. Außerdem machst Du es Dir ziemlich kompliziert. Du bekommst Doch per NTP schon die Zeit in Sekunden seit 1900. Theroretisch brauchst Du da nur noch "100" Jahre drauf rechnen und hast die Zeit im time2000-Format mit dem Du die RTC simple setzen kannst.
Mario.
909  International / Deutsch / Re: Arduino One das richtige für mich? on: July 13, 2012, 01:24:07 pm
Die SMS Versendung habe ich mir so vorgestellt:

Arduino gibt Text an Handy, Die Empfänger befinden sich im Telefonbuch des Handy``s, Handy versendet die SMS,

sollte so gehen oder?
Das finde ich jetzt auch etwas verwirrend ... Wie hast Du Dir denn die Verbindung zwischen Handy und Arduino vorgestellt?
Vor allem die Auswahl der Nummern aus dem Telefonbuch des Handys, selbst wenn man irgendwie den Text übertragen bekommt, finde ich nicht trivial.
Dann doch besser eine GSM-Shield. Jenachdem was der Melder liefert, kann man auch dasGBOARD verwenden. Allerdings hat das Board keinen USB Anschluss.
910  International / Deutsch / Re: Arduino One das richtige für mich? on: July 13, 2012, 08:30:05 am
Am besten erstmal klären, in welcher Form der Melder den Alarm meldet. Falls es seriell ist, werden ggf. nur Pegelwandler benötigt, die das Signal auf TTL-Pegel (5V) bringen. Es gibt ein GPRS-Shield das auf den Uno (ich vermute mal das meinst Du mit Arduino One) passt und das prima SMS verschicken kann.

Wie willst Du denn die Gruppe der Nummern die per SMS informiert werden sollen übertragen, oder sollen die Nummern fest im Sketch verankert sein? 
Denkbar wäre hier die USB-Schnittstelle als Konfig- und Debug-Schnittstelle zu verwenden.
911  International / Deutsch / Re: kann ich an einem 74HC165N eine 3x4 Kepad-(matrix) mit 7 pin anschließen? on: July 12, 2012, 08:02:50 am
Wie hast Du denn das Key-Pad angeschlossen? Wenn die Taster des Keypads nur die einzelnen Pins des Registers verbinden, wird das kaum funktionieren, Da die Tasten des Keypads ja nur an den Kreuzpunkten eine leitende Verbindung herstellen.

Du kannst 3 Arduino-Ausgänge an die Anschlüsse des Keypads anschliessen und die 4 "Ausgänge" des Keypad an das 74HC165N anschliessen.
Dann wird jeweils einer der drei Ausgänge auf HIGH geschaltet und geschaut, ob einer der Eingänge auf HIGH geht. Wenn ja, weisst Du welche Taste gerade gedrückt wird.

912  International / Deutsch / Re: Aus Digital mach Analog? on: July 12, 2012, 06:36:12 am
Kleiner Tip: "http://arduino.cc/en/Reference/PinMode"
Die meisten Dinge findet man sehr gut beschrieben in der Doku.

Zitat:
Quote
Note
The analog input pins can be used as digital pins, referred to as A0, A1, etc.
913  International / Deutsch / Re: Raspberry Pi in Arduino Projekten on: July 12, 2012, 06:07:13 am
Die Zahl der IO-Ports ist gegenüber dem Arduino limitiert, auch gibt es nur ein PWM Pin. Andererseits ist die Kiste schnell genug, das man ein PWM-Signal selbst erzeugen könnte. C-Libs gibt es auch schon, um die GPIOs ansprechen zu können. SPI ist auch schon implementiert, I2C fehlt aktuell noch.

Wir haben vor 2 Tagen mal ein "motion" mit einer USB-Cam auf dem Pi laufen gehabt, was recht gut geklappt hat. Anwendungsfall wäre z.B. dann das Schalten in abhängigkeit von erkannten Bewegungen / Alarmen.

Zu viel mehr bin ich bisher aber auch nicht gekommen. :-)
914  International / Deutsch / Re: Serielle Schnittstelle: Daten >128Bytes on: July 12, 2012, 02:06:49 am
Wenn es nur 20 Werte sind, brauchst Du auch nur 20 if-Abfragen, Du mußt ja nur den Anfang erwischen. Ich würde das aber eleganter lösen.

Die 20 "Start"-Stellen der Werte kommen in ein Array (position) . Der Zählindex für das Array zeigt auf den ersten Eintrag (current).

Während Du aus der seriellen Schnittstelle  liest, vergleichst Du den Zähler für die gelesenen Bytes (z.B. int numbytes) mit der als nächstes zu lesenden Stelle. Ist die erreicht wird der Wert gelesen, wenn nicht, wird das Byte übersprungen.

Code:
#define NUM_VALUES 20
int position[NUM_VALUES] = { 25,100,255,300 ...};
int current = 0; //index auf position des nächsten zu lesenden wertes
int numbytes = 0; //anzahl gelesene bytes

....
//hier code zum einlesen der nächsten bytes
...
//position des nächsten wertes erreicht? oder alle werte schon gelesen?
(if numbytes == position[current] && current < NUM_VALUES) {
  //code zum einlesen des Wertes
  //nicht vergessen auch hier beim einlesen "numbytes" zu erhöhen
  //wert fertig eingelesen, auf nächsten Wert umstellen
  current++;
}
915  International / Deutsch / Re: Analoge Werte in einem String/Array apspeichern on: July 11, 2012, 03:53:10 pm
Es wäre unter Umständen auch gut, auf die Begrifflichkeiten zu achten. Das vermeidet Missverständnisse bei der Kommunikation und der Fehlerbeschreibung.

Ein "String" ist eine Zeichkette und damit eine Aneinanderreihung von "BYTEs" (nicht int), in C (C-String) abgeschlossen vom Wert "0" (nicht das Zeichen Null).
Im Prinzip ist ein C-String auch ein Array von "char" und kann auch als solches angesprochen / verwendet werden.

Was Du verwendest ist ein Array vom Typ "int". Damit besteht jedes Element Deines Arrays aus zwei Bytes, nämlich einem Int-Wert. Ein integer-Array mit "string" zu bezeichnen ist in C kein Problem, allerdings sollte man sowas vermeiden, da es verwirrend ist und die Fehlersuche erschwert.

Ansonsten hat Uwe ja schon den entscheidenden Hinweis zur Größe des Arrays gegeben.
Pages: 1 ... 59 60 [61] 62 63 ... 94