Loading...
  Show Posts
Pages: 1 ... 59 60 [61] 62 63 ... 87
901  International / Deutsch / Re: Arduino lässt sich nicht mehr programmieren - "programmer not responding" on: May 11, 2012, 12:12:10 pm
Sonst könnte ich den ja nicht in der Arduino IDE auswählen, oder?
Da Du nicht geschrieben hast, was Du ausgewählt hast, oder mit welchen Einstellungen Du arbeitest, hätte ich meine Kristallkugel befragen müssen. Leider ist die gerade zur jährlichen Inspektion.
Ein Antwort auf meine anderen Fragen (lsusb / dmesg / var/log/messages) würde die Chancen auf Hilfe sicherlich deutlich verbessern.
902  International / Deutsch / Re: Arduino lässt sich nicht mehr programmieren - "programmer not responding" on: May 11, 2012, 07:56:50 am
gibt es denn ein /dev/ttyACM0 in Deinem System?
mach mal ein "lsusb" bzw. ein "lsusb -v" als root. Was sagt den /var/log/messages wenn Du den Arduino per USB anschliesst? Hier sollten Meldungen auftauchen, das ein neues Gerät gefunden wurde. Ggf. kannst Du auch nach dem Anstecken des Arduino mal ein "dmesg" als root aufrufen, hier sollten auch entsprechende Meldungen auftauchen.
Mario.
903  International / Deutsch / Re: Arduino Uno + WS2801 Pixel Wall on: May 11, 2012, 03:08:47 am
Es sei denn Du programmierst ein Lauflicht.
Vermutlich sogar dann, denn wenn ich das richtig verstehe, hat der WS2801 ein Latch Signal, mit dem die hereingeschobenen Daten von den Schieberegistern übernommen werden. Du müßtest dann aber die Daten jeweils nur so weit in die Kette schieben, wie der letzte "Leuchtpunkt" entfernt ist, also nicht immer alle Daten.
904  International / Deutsch / Info: Online Schaltungs Editor on: May 11, 2012, 02:59:39 am
Hallo zusammen,

ich bin gerade über folgendes gestolpert:
http://www.digikey.com/schemeit
Falls mal wieder schnell ein Schaltplan gebraucht wird, dürfte das recht hilfreich sein. Zumal man das Ergebnis als PNG oder PDF exportieren kann.
Wer einen digikey.com Account hat kann die Zeichnung auch speichern und ggf. die Teile gleich bestellen. :-)
905  International / Deutsch / Re: mehrere Variablen gleichzeitig empfangen (Arduino Nano/XBee) on: May 10, 2012, 02:25:15 pm
Poste doch mal den Code mit dem gesendet wird, oder habe ich den hier übersehen? Evtl. liegt da bereits der Fehler.
906  International / Deutsch / Re: Variablen verketten on: May 08, 2012, 08:48:56 am
Aber wenn Du nur ein einzelnes Byte brauchst, dann schick doch in python auch nur das eine Byte ab. Also statt 3 Zeichen "255" einfach den Byte-Wert 255. Dann sparst Du Dir den Aufwand das auf dem Arduino wieder zusammenzupuzzeln.
907  International / Deutsch / Re: LEDs und Transistoren on: May 08, 2012, 08:43:14 am
Nein, nicht für den Basiswiderstand des Transistors, der hängt doch weiter am 5V Pin des Arduino. Lediglich die 9V für die LEDs kommen aus dem Vin. Dabei jedoch aufpassen, solltest Du mal ein anderes Netzteil verwenden, liegt natürlich dessen Ausgangsspannung an Vin an. (z.B. 12V bei einem 12V Netzteil).
908  International / Deutsch / Re: Ausgang per Web schalten mit PHP on: May 08, 2012, 08:38:53 am
Code:
int ledPin[] = {7,8,9}; // LED-Array mit Pin-werten
Ist korrekt, aich Dein
Code:
int NUMTIMER[] = {0,1};
war, zumindest für diese Zeile, erstmal snytaktischkorrekt.
Allerdings wird im Sketch selbst das NUMTIMER nicht als Variable oder Array verwendet, sonder nur als Platzhalter für die Zahl 3 oder 5 oder 2 oder welche Anzahl von Timern Du haben willst. NUMTIMER ist also NICHT der Timer selbst sonder nur der Wert für die Anzahl der Timer die es geben soll.
timerlength[] und timerpin[] sind die beiden Arrays, die den eigentlichen Timer bilden, denn diese speichern ja die Länge der Laufzeit und den Pin für einen spezifischen timer, sprich Index der Arrays.

Schön, das Dein Projekt jetzt funktioniert. Du hast Dir natürlich für den Anfang auch ein recht komplexes Projekt ausgesucht. Aus meiner Sicht etwas zu komplex für eine sinnvolle Lernkurve, denn zu viele Baustellen und Prinzipien gleichzeitig mit denen man sich auseinandersetzen muss, überfordern einen doch leicht.
Nur nicht aufgeben und dran bleiben, irgendwann lichtet sich der Nebel :-)
909  International / Deutsch / Re: Wo verstecken sich die .hex Files on: May 07, 2012, 10:58:10 pm
Du kannst zum Einen versuchen während ein Sketch compiliert wird mal folgenden Befehl in der Console abzusetzen:
Code:
ps uaxww | grep hex
Mit etwas Glück beim Timing solltest Du den Programmaufruf sehen inklusive Pfad zum Hex-File.

Alternativ kannst Du nach dem Compilieren nach dem Hex-File suchen:
Code:
find ~ -name "*.hex" -mmin -5
oder
Code:
find /tmp -name "*.hex" -mmin -5
Bei Linux gibt es nicht so viele Verzeichnisse die zum Schreiben für jeden User erlaubt sind.

Bei Mac OS X liegen die Daten unter "/var/folders/" in einem Unterordner der vermutlich mit zufälligem Namen bei der Installation angelegt wird.
Mario.
910  International / Deutsch / Re: LEDs und Transistoren on: May 07, 2012, 03:46:45 am
@sth77: *rofl* hatte die Antwort parallel geschrieben nur noch nicht abgeschickt. Komme vom Kaffee-holen wieder, schicke den Post ab und lese meinen Artikel fast 1:1 nochmal. Wenigstens hab ich mich nicht verrechnet :-)
911  International / Deutsch / Re: LEDs und Transistoren on: May 07, 2012, 03:35:42 am
Also laut Datenblatt für den BC337 ist der Basisanschluss in der Mitte und nicht an der Seite.
http://pdf1.alldatasheet.com/datasheet-pdf/view/61933/GE/BC337.html
Wenn Du den Transistor als Schalter verwendest, muß der Strom der von der Basis (Arduino-Pin zum Transistor) ein Strom fliessen, der groß genug ist, das der Transistor komplett durchsteuert. Das bedeutet, das der Widerstand zwischen Collector und Emitter den kleinstmöglichen Wert erreicht. Eine weitere Erhöhung des Basis-Stroms würde dann keine Änderung mehr bringen. Der BC337 hat einen Verstärkungsfaktor (Hfe) von mind. 100 (hängt von vielen Parametern ab), meist sogar deutlich mehr.
Durch die Collector-Emitter Strecke fliessen maximal 500mA (bei Dir sogar deutlich weniger). 500mA / 100 (Hfe)  macht 5mA. Das ist der Strom der vom Arduino über die Basis zum Emitter fliesst. Bei 5V und nach dem Ohmschen Gesetzt R = U / I -> R = 5 V / 0.005A = 1000 Ohm, also 1 kOhm. Da wir aber mit maximalem Strom und der Mindestverstärkung gerechnet haben, sollten auch ohne Probleme 2,2kOhm oder sogar 4,7kOhm (wie im früher verlinkten Beispiel) reichen.
912  International / Deutsch / Re: Ein neuer ausm Süden... on: May 06, 2012, 10:36:36 am
Man könnte meinen ich hab hier nach ner Anleitung für ne Rohrbombe gefragt... unglaublich!
Wenn Deine Karre plötzlich bei 180 quer vor mir auf der Autobahn steht, wäre mir in dem Moment vermutlich sogar die Rohrbombe lieber. Solange es gut geht, finden alle solche Basteleien toll. Aber wenn es schief geht fängt das Rumgeheule an vonwegen "Ich hab ja von Elektronik keine Ahnung *schluchz* die im Arduinoforum 'ham gesacht das geht so und da passiert nix ...". Hier wird sich sicher keiner ein T-Shirt drucken auf dem steht " I hacked the BMW that killed my neighbor!"

Zu Deinem eigentlichen Problem und warum keiner Deine konkrete Frage beantwortet. Bisher hast Du keinerlei Informationen über den verbauten Lüfter in Deinem Hobel gepostet, außer das das Teil per PWM gesteuert wird. Du hast auch keine Schaltung gepostet oder irgendwelchen C-Code den man sich anschauen könnte. Daher stellt sich die Frage willst Du Hilfe bei einem konkreten Problem bei dem Du nicht weiter kommst, oder suchst Du jemanden der Dein Projekt für Dich ausarbeitet?

Die einzig konkrete Information bisher war, das Du mit einem Arduino in die Fahrzeugelektrik eingreifen willst und diese Frage wurde ja auch mit genug Hinweisen beantwortet.
913  International / Deutsch / Re: Brauche Hilfe: Ausgang per Web schalten mit PHP on: May 06, 2012, 03:11:59 am
Guten Morgen,
Quote
Auch hier muss ich wieder passen, ich versuche seit 3 std heraus zu finden wo ich das eintragen muss, aber ohne erfolg. Egal wo ich es eintrage, nix, die Zeit wird nicht multipliziert.
Wo hast Du es denn eingetragen? Und was hat nicht funktioniert? Entschuldige wenn ich so direkt frage, aber hast Du einfach nur probiert, oder überlegt wo es passen könnte? Das ist nicht böse gemeint, aber ich glaube Du verfolgst bei der Programmierung immer noch einen falschen Ansatz. Erstmal irgendwelchen Code schreiben und dann schauen was der macht ist keine gute Taktik. Es hat einen Grund warum ich Dich schon zwei Mal versucht habe zu überzeugen erstmal die Schritte die in Deinem Programm passieren sollen in Worten als kleine Liste aufzuschreiben. Wenn Du da schon ein Problem mit dem Verständnis zum Ablauf hast, wird das beim Programmieren nicht besser, weil Du Dich dort noch zusätzlich auf die Syntax von C und die semantisch korrekte Umsetzung Deines Konzepts konzentrieren musst.
Am Beispiel der Umrechnung der Dauer in Minuten:
  • PHP sendet die Dauer als 4. Parameter in Minuten
  • Sketch liest im switch-case Block den zusätzlichen 4. Parameter, wenn Kommando "T" erkannt wurde in die Variable timerlength[0]
  • timerlength[0] muss aber in Sekunden angegeben werden, daher muss der gerade übermittelte Werte umgerechnet werden
  • Um auf Sekunden zu kommen, muss der Wert mit 60 multipliziert werden -> timerlength[0] = timerlength[0] *60

Quote
Ok, aber es soll auch immer nur ein Ventik zur Zeit geöffnet sein,niemals zwei.
Auch hier stehe ich auf dem Schlauch, meinst du mit mehreren TIMERN z.b. V1, V2, V3 für Ventil1, Ventil2 usw. ? So wie im PHP angegeben?
Wenn ich es so versuche, gibt er Fehlermeldungen raus:
Code:
int NUMTIMER[] = {0,1};
0 für V1 und 1 für V2 , Dachte ich smiley-sad
Wann welches Ventil geöffnet ist, ist für die Programmierung an der Stelle erstmal völlig uninteressant. Warum?
1) Weil man immer möglichst allgemeine Lösungen baut, in diesem Fall also mit der Möglichkeit "Ventile" (also Pins) unabhängig voneinander mit unterschiedlichen Timern zu schalten. Wie das dann von einer konkreten Anwendung genutzt wird, ist eine ganz andere Sache.
2) Ein PHP- und HTML-Script ist schnell geändert, dort steckt ja die eigentliche Anwendungslogik drin, den Arduino später neu zu flashen ist deutlich mehr Aufwand. Den Arduino interessiert ja im Prinzip auch nicht um "was" es eigentlich geht. Der bekommt nur "Kommandos" wie "schalte Pin 3 ein" , "lese Pin 4 aus", oder "Schalte Pin 9 für 15 Minuten auf HIGH, danach wieder auf LOW" und das sollte alles unabhängig voneinander funktionieren.

Du hast geschrieben, das Du das mit dem "#define NUMTIMER 3" verstanden hast, schreibst aber trotzdem wieder sowas : int NUMTIMER[] = {0,1};? Das ist das, was ich mit dem rumprobieren meine. Das führt leider in den seltensten Fällen zum Erfolg. Und selbst wenn, dann nur aus Glück und man versteht meistens am Ende trotzdem nicht warum es plötzlich funktioniert. Ergo -> kein guter Ansatz.

Du hast in Deinem Code ein
#define NUMTIMER 2 stehen. Das bedeutet, das die beiden Arrays timerlength und timerpin je 2 Einträge haben können. Du hast also schon 2 Timer zur Verfügung, die Du für V1 und V2 nutzen kannst (timerlength[0] und timerlength[1]. Was fehlt ist nur die Zuordnung. Dein Sketch muss ja irgendwo die Information herbekommen, welcher Timer für welches Pin verwendet werden soll.
Hier hast Du auch wieder zwei Möglichkeiten.
1) Die einfache Variante wäre einfach zu sagen wenn Pin 4 übergeben wird, nutze Timer 0 und bei Pin 5 nutze Timer 1. Das ist aber schlechter Stil, denn Du verlagerst damit Teile Deiner Anwendungslogik in den allgemeinen Arduino-Sketch. Die Gefahr besteht, das Du irgendwann im PHP-Code plötzlich Pin 6 übergibst, weil sich Deine Schaltung geändert hat und dann der Code nicht mehr greift.
2) Die allgemeinere Variante. Du übergibst mit dem Kommando "T" einfach noch ein zusätzliches Byte, das bestimmt, welcher Timer verwendet werden soll. Dieses wird dann, genauso wie timerlength per client.read() gelesen. Allerdings musst Du aufpassen, denn Du solltest ersten die Timer-Nummer übergeben, ehe Du mit timerlength[timernummer] = client.read() die Länge liest. (Du kannst Dir natürlich auch eine einfache "byte" Variable als "Zwischenspeicher" deklarieren.

Achso, ich bin auch nicht "verärgert". Leider versuchst Du immer noch den zweiten Schritt vor dem Ersten zu machen und stolperst dabei regelmäßig. Das ist, sagen wir mal eine kleine Gedulds-Herausforderung für mich  smiley-grin, gehört aber einfach dazu, wenn man jemanden etwas wirklich verständlich machen will. "Echtes" Lernen bedeutet nun mal, das man Prinzipien versteht und nicht einfach nur "auswendig" lernt. Damit habe ich mir als Tutor immer zusätzliche Arbeit gemacht und auch so machens "Opfer" zur Verzweiflung getrieben. Du bist also in guter Gesellschaft  smiley-twist
914  International / Deutsch / Re: Brauche Hilfe: Ausgang per Web schalten mit PHP on: May 05, 2012, 10:22:10 am
1) Du musst, wenn Du Dein Protokoll änderst, natürlich auch den PHP-Code anpassen. Dein Arduino-Sketch erwartet das bei JEDEM Kommando nun 4 Bytes gesendet werden. Da Du ber Beim Kommando "R" und "S" nur 3 Bytes sendest, wartet Dein Sketch entsprechend bis zum timeout und macht nicht weiter. Du kannst das auf zwei Arten beheben. Du kannst immer 4 Bytes schicken, das ist aber unpraktisch, da es ja irgendwann mit zusätzlichen Kommandos auch 5 oder 6 oder mehr werden können. Dann müßtest Du immer alles neu Anpassen, was zum Einen Fehleranfällig und zum Anderen Aufwändig ist.
Du kannst aber auch bei jedem Aufruf nur die Bytes schicken, die Du benötigst. Dein Sketch liest dann am Anfang immer nur die minimale Anzahl von Bytes von einem client und erst in switch - case Block liest Du die für das entsprechende Kommando notwendigen zusätzlichen Bytes ein. Lediglich die Variablen dafür würde ich bereits oben deklarieren, das ist übersichtlicher.

2) Wieso glaubst Du, das Du in Deinem Sketch alles korrekt übergeben hast? timerpin und timerlength sind Arrays, Du verwendest aber nirgendwo in der loop() ein Array. Im Gegenteil, Du deklarierst die Variablen timerlength und timerpin nocheinmal innerhalb von loop() als lokale Variablen vom Typ byte. Diese "verdecken" dann aber die globalen Arrays timerlength und timerpin. Die Schleife, die im Sekundentakt die einzelnen Timer abklappert erwartet aber, das die Variablen timerlength und timerpin auf ein Array zeigen und verwendet an dieser Stelle den Speicher auch so, womit Du plötzlich statt auf jeweils ein Byte, wie es deklariert ist auf 3x2x4 Bytes zugreifst und diese veränderst. Damit bringst Du Dein Programm total aus dem Tritt, da Du mit Sicherheit Speicherzellen veränderst, die vom Programm anderweitig verwendet werden.

Um das erstmal zum Laufen zu bekommen, ändere folgendes in Deinem Sketch:

1) Das "byte" vor timerlength und timerpin in dem Block wo die Daten gelesen werden muss weg.
2) Innerhalb von loop() änderst Du alle Vorkommen von timerlength in timerlength[0]
3) Innerhalb von loop() änderst Du alle Vorkommen von timerpin in timerpin[0]

Damit überschreibt dann Dein Programm innerhalb von loop() nicht mehr die globalen Variablen für die Timer und verwendet erstmal einen timer für das Zählen der Zeit.
Im übrigen zählt Dein Sketch die timer in Sekunden nicht in Minuten. Damit es Minuten werden solltest Du den übergebenen Wert noch mit 60 multiplizieren.

Leider ist Deine Lösung aber generell für eine Verwendung von mehreren Timern ungeeignet, da Du in Deinem Aufruf nicht übergibst welcher Timer verwendet werden soll. Sobald Du mehr als ein Ventil schalten willst, bekommst Du Probleme.
915  International / Deutsch / Re: Brauche Hilfe: Ausgang per Web schalten mit PHP on: May 04, 2012, 05:53:36 am
Quote
( #define NUMTIMER = 3; // wieviele timer es gibt (15,30,60 min) <-- Oder falsch verstanden ?
Leider ja, denn die 15,30 und 60 Minuten sind ja nur eine Zeit, von der Du eine auswählst, das hat ja noch nichts mit einem Timer zu tun.
Verschiedene Timer brauchst Du, wenn Du mehrere Ventile steuern willst.
Z.B. timerpin[0]=9, timerlength[0]=900 würde den ersten Timer für Pin 9 auf 900 Sekunden (15min) setzen.
timerpin[1]=10, timerlength[1]=3600 wäre dann der 2. Timer für Pin 10 und 60 Minuten.

Code:
digitalWrite(timerpin[t],!digitalRead(timerpin[t])); 
 
sieht seltsam aus, funktioniert aber.

Code:
unsigned long previousMillis = 0;       // speichert wie viele Sekunden seit derletzten aenderung vergangen sind
#define NUMTIMER[] = 3;          // wieviele timer es gibt (15,30,60 min)
int timerpin;
int timerlength;
Die previousMillis sind richtig, aber das define nicht. Wie bereits geschrieben, müssen timerpin und timerlength beides Arrays sehen.
Also
Code:
unsigned long previousMillis = 0;       // speichert wie viele Sekunden seit derletzten aenderung vergangen sind
#define NUMTIMER 3          // wieviele timer es gibt (15,30,60 min)
int timerpin[NUMTIMER];
int timerlength[NUMTIMER];
...
void setup() {
...
}
Hinter das "#define" kommt kein Semikolon und die Zuweisung erfolgt auch nicht mit einem "=". "define" ist eine Präprozessoranweisung für den Compiler. Der geht einfach nur stumpf durch den gesamten Code und ersetzt überall das "NUMTIMER" durch die 3, das hat noch nichst mit dem Programm zu tun, das ist reine Textersetzung. Das Trick dabei ist, das man später die Anzahl der Arrayeinträge an einer einzigen Stelle ändern kann, ohne die 3 überall im Code zu ersetzen.

Die Auswertung für die vergangene Zeit darf auch nicht innerhalb des "if(client)" Blocks stehen, denn die Zeit läuft ja auch weiter wenn kein Client connected ist.
Am besten setzt Du den Zeit-Auswertungsblock gleich an den Anfang der loop().

Was bei der Auswertung des Kommandos "T" noch fehlt, ist das Setzen des übergebenen Timer-Wertes. Der muss ja irgendwo gespeichert werden, ebenso wie die Pin Nummer, die dem Timer zugeordnet ist.

Die Lösung selbst ist eigentlich nicht schwer, Du versuchst aber alles auf einmal zu machen und dafür fehlt die zur Zeit noch das Wissen und die Übersicht. Versuch daher erstmal den Ablauf wie Du ihn verstehst zu beschreiben. Sobald das stimmt und Du verstehst was, wann wie passieren soll, dann fängst Du an das in ein C Programm zu giessen.
Pages: 1 ... 59 60 [61] 62 63 ... 87