Show Posts
Pages: 1 ... 69 70 [71] 72 73 ... 94
1051  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 26, 2012, 09:33:54 am
Im Code, den Du im Vixen-Forum gefunden hast, geht es ja eigentlich um die Ausgabe auf PWM-Pins. Dort wird ja auch analogWrite() verwendet und es macht Sinn, ein komplettes Byte zu schreiben.
Da Du digitale Pins verwendest, solltest Du ein HIGH oder LOW mittelst digitalWrite() schreiben. Wie gesagt, das digitalWrite() nimmt Dir die Arbeit ab, daher ist das OK. Um es übersichtlicher zu machen, kannst Du auch ein
Code:
if(incomingByte[i] != 0) {
    digitalWrite(pin,HIGH);
} else {
    digitalWrite(pin,LOW);
}
verwenden. Aber wie gesagt, das hat keinen Einfluss auf das Ergebnis, da digitalWrite() im Prinzip das Gleiche macht.
Jetzt wäre es gut zu wissen, ob Vixen tatsächlich immer korrekterweise Nullen und "nicht Nullen" schickt, wenn ein Channel geändert wird.
Mario.
1052  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 26, 2012, 08:23:45 am
Quote
Wo werden denn da bitteschön bytes zu den pins gesendet ?
Genau da:
Code:
digitalWrite(Channel4, incomingByte[3]);
Dazu hatte ich aber auch schon was geschrieben. Das ist kein schöner Stil, funktioniert aber, da alles was nicht 0 ist asl HIGH gewertet wird.
1053  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 24, 2012, 01:35:04 pm
Der Code für die Schleife ist ja immer noch falsch und zwar in beiden Programmen.

Code:
//diese schleife zählt von 0 bis 7, also 8 nicht 7 Werte!!!
for (int i=0; i<8; i++) {
      // read each byte
      incomingByte[i] = Serial.read();
    }

//diese schleife zählt von 0 bis 5, also 6 nicht 5 Werte!!!
for (int i=0; i<6; i++) {
      // read each byte
      incomingByte[i] = Serial.read();
    }
Entweder hast Du einen zusätzlichen Channel definiert, der mit ausgegeben wird, dann passt das evtl. oder es funktionieren beide Programme nicht richtig.
Mario.
1054  International / Deutsch / Re: Poti an analogen Pin als MIDI ausgeben on: April 24, 2012, 01:31:15 pm
Code:
Code:
/* Pinbelegung */
const int volumePot = A0;   // Poti für die Lautstärke
const int volumePot= A1;  // Poti für die 2 Lautstärke

oder wenn es möglich ist:

Code:

/* Pinbelegung */
const int volumePot = A0;A1;A2; ...   // Poti für die Lautstärke
So geht es leider nicht. "VolumePot" ist eine Variable, also ein Platzhalter für EINEN Wert.
Eigentlich stehen die Werte A0 und A1 ... nur für bestimmte Pin-Nummern des Arduino.
Was Du machst ist folgendes:

1) Merke Dir, das volumePot für das erste analog Pin steht.
2) Merke Dir, das volumePot für das zweite analog Pin steht
...
Was soll sich Dein Programm denn nun merken? Das erste oder das zweite Pin?

Du kannst entweder ein Array nehmen:
Code:
int volumePot[3]= { A0 , A1, A2};
//zugriff über index des array - achtung zählung beginnz bei 0
... analogRead(volumePot[0]);
...  analogRead(volumePot[1]);
...  analogRead(volumePot[2]);

oder Du definierst Dir 3 verschiedene Variablen
Code:
int volumePot1= A1;
int volumePot2= A2;
int volumePot3= A3;
//zugriff über einzelne Variable
... analogRead(volumePot1);
...  analogRead(volumePot2);
...  analogRead(volumePot3);
1055  International / Deutsch / Re: Brauche Hilfe: Ausgang per Web schalten mit PHP on: April 24, 2012, 07:06:41 am
Ich würde mal sagen, falscher Ansatz. Wenn schon ein Webserver da ist, dann doch folgendermassen:

Browser <--> Webserver (PHP/HTML) <--> Arduino

Alternativ nur der Arduino als Webserver, aber wie da die Limits sind, haben wir ja schon gelernt :-)

Als erstes bastelst Du Dir mit PHP und HTML auf dem Webserver ein Webseite, mit der Du den Zustand z.B. einer LED abbildest und per Link oder Button den Zustand umschalten kannst. Das alles noch komplett ohne den Arduino.

Wenn das funktioniert, bringst Du Deinem PHP-Script bei, mit dem Arduino zu "reden". Dabei kannst Du auf den ganzen HTML-Kram verzichten und nur die wesentlichen Daten übertragen.
Du kannst z.B. mit PHP eine TCP-Verbindung zum Arduino aufbauen und schickst erstmal nur ein Zeichen
'S' -> (SET) setze wert
'R' -> (READ) lese wert

danach folgt z.b. die nummer des Pins als byte (z.b. 3 Wert, nicht das Zeichen '3')
beim Setzen des Wertes kommt noch ein drittes Byte, mit dem Wert.
Damit kannst Du aus mit 3 Bytes schon alle Pins setzen ('S',0x03,0x01)

Auf dem Arduino liest Du einfach Zeichenweise aus der Verbindung in ein Array
Code:

//Achtung super simpler Quickhack ohne Püfung der Eingabe oder ob Daten vorhanden sind
char input[3];
 
for(int i=0;i<3;i++) {
    input[i] = client.read();   
}

//pin setzen
if(input[0] == 'S') {
   digitalWrite(input[1],input[2]);
}
//pin lesen und an den Client schicken
if(input[0] == 'R') {
   client.print(digitalRead(input[1]));
}
Die Lösung ist zwar für den Anfang komplexer, als nur der Arduino zu nehmen, dafür aber deutlich flexibler. Der Browser muss nicht mit dem Arduino reden, sondern nur mit dem Webserver. Wie der Webserver dann mit dem Arduino redet, ist für den Nutzer am Browser aber egal. Und Du kannst Die Seite auf dem Webserver so bunt und schick machen, wie Du lustig bist. Es gibt keine Limitierungen wie beim Arduino-Webserver.
1056  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 23, 2012, 03:11:12 pm
Softwareseitig wirst du das vermutlich nicht herausfinden können, was da übern Äther geschickt wird. Eine zweite serielle Schnitstelle ist erforderlich, daher auch die Idee mit dem Adapter.
Die andere Möglichkeit wurde schon angefragt: hast du ein LCD, auf dem man die empangenen Daten anzeigen kann?
Ich denke schon, das es funktioniert, das legt ja auch der Forenpost nahe. Aber wie kann ich nicht sagen, denn als MAC User kann ich das auch nicht testen, ebensowenig wie das Programm Vixen.
Der Trick wird vermutlich sein was man in welcher Reihenfolge startet. Ich könnte mir auch vorstellen, das das Monitoring Programm eine virtuelle serielle Schnittstelle zur Verfügung stellt, mit der man das Vixen verbindet und sich dann selbst mit der tatsächlichen Schnittstelle koppelt und damit dann in der Mitte sitzt. Aber das ist nur eine Vermutung.
1057  International / Deutsch / Re: Atmel aus Arduino ausbauen? on: April 23, 2012, 01:43:45 pm
Vergiss auch nicht, das Du zusätzliche Komponenten brauchst, gerade wenn Du den Chip 1:1 aus dem Arduino übernehmen willst. Der ist von der Software so geflasht, das er mit 16MHz arbeitet. Es geht zwa auch mit 8MHz, aber diverse Timing-Einstellungen der Libs verlassen sich auf die eingestellten 16MHz, daher dürfte ein Teil nur noch mit der halben Geschwindigkeit laufen. Dazu kommt, das der interne 8MHz Takt nicht sehr genau ist.
Mario.
1058  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 23, 2012, 01:33:15 pm
Ich denke dieser Adapter sollte verwendbar sein:
http://www.komputer.de/zen/index.php?main_page=product_info&cPath=22&products_id=83

@All: Bitte mal einen Kommentar abgeben, ob ich damit richtig liege. Theoretisch sollte man den ja auch an eine der anderen Seriellen Schnittstellen des Mega anklemmen können? RX an RX,TX an TX und GND auf GND, das sollte reichen.

Mario.
1059  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 23, 2012, 12:44:53 pm
Das Problem ist, das Du nicht weisst, was Vixen da genau schickt. Du schreibst einfach die ankommenden Daten auf das entsprechende Pin. Die Funktion digitalWrite() ist so programmiert, das sie bei einem Wert von "0" den Ausgang auf LOW schaltet und bei allen anderen Werten ungleich Null auf HIGH. Damit sollte es eigentlich klappen. Der Code sieht für 5 LEDs auch erstmal OK aus. Jetzt geht es halt darum herauszufinden, wie das Daten-Protokoll von Vixen aussieht. Das ist aus meiner Sicht die wahrscheinlichste Fehlerquelle. Es reicht ja, wenn zusätzlich zu den Channel-Daten noch irgendwas anderes mitgeschickt wird. Ein zusätzliches Byte bringt automatisch die Sequenz durcheinander.
Hast Du evtl. Zugriff auf ein LCD-Shield, oder irgendwas mit dem man die seriell gelesenen Daten ausgeben könnte?
Welches Plugin für die Ausgabe in Vixen verwendest Du? "Generic Serial protocol"?
Einen interessanten Beitrag habe ich im Vixen-Forum gefunden:
Quote
Hi guys, I've been working to integrate Vixen to Arduino for the past few week (using 2.1.1.0 and Arduino ATmega 1280)
I have the common configuration working easily - multiple channels, software PWM = lots of blinky lights, but I know this is where this integration is going wrong. One lost bit or byte and the whole display would be corrupted.
So I though I'd use the tools given.
- Limit serial channel brightness values to 196 steps, reserving 197 - 255 for control codes (or header / footer for now) (step up the values on the Arduino end)
- Thus I limited the Max Illumination to 196 (aka 3/4 brightness) - ugly but I can live with that.
- I then defined the header to use a single byte (255) and footer to use a single byte (254)
- Sketched up some code in the Arduino to look for these control codes before allowing the 'channel buffer' to be filled, and then expecting the 'footer' code when the buffer was full (and if it wasn't Huston we have a problem)
- Sounded right, I then proceeded to spend several hours debugging on the Arduino -- grrrr
- Gave up on the Arduino and began to monitor the com port (sysinternals portmon) - and this was when I discovered that somewhere in the generic serial plug-in it has been decided that the header and footer can only use 'printable ascii' codes (tracked down to Encoding.ASCII.GetBytes piece of code) - if the codes are even accepted, they come out at the other end as '?' or code 063
- Thus currently we cant 'reserve' any high or low ascii codes to use in the header / footer (aka cant use 0 – 32, or 127 – 255)
Anyone know how we can amend the source to cater for this?
Be good to be able to translate the 256 steps of illumination to 196 in the plug-in, and use the remaining bytes as channel markers.
Or maybe this is already accomplished in another serial based output plugin - I just need to translate the protocol into Arduino Code.
On an interesting note - the generic serial will not send data when the state of the channels doesn’t change between 'events'
Been following ctmals videos about how to build a plugin + searching through the MSDN website , just need to change Encoding.ASCII to Encoding.UTF8 and we should be away laughing smiley
Spannend ist dabei folgendes:
Quote
On an interesting note - the generic serial will not send data when the state of the channels doesn’t change between 'events'
Das könnte ein Problem sein, bei Deinen Sequenzen.
Dazu kommt wohl, das nicht alle Werte zwischen 0 und 255 vom "Generic serial plugin" korrekt übertragen werden.
Der Poster verwendet ein Tool "sysinternals portmon", um den seriellen Port zu überwachen, evtl. solltest Du das auch mal machen. Wichtig ist halt, das Du herausbekommst was genau gesendet wird.
Mario.
1060  International / Deutsch / Re: Licht auf bestimmte Musik !!! on: April 23, 2012, 02:02:32 am
Das Problem wirst Du nicht mit Hardware lösen, sondern durch Analysieren und Beheben des Fehlers. Der USB-Adpater kann Dir helfen, Dein Problem zu analysieren. Wenn Du keine Hardware kaufen willst, kannst Du auch weiter ohne testen, allerdings mit größerem Aufwand.
Du hattest ja schonmal einzelne LEDs getestet und es funktionierte alles mit bis zu 7 LEDs. Kannst Du den Code mal posten mit dem Du getestet hast? Gut wäre auch, wenn Du einmal grob beschreiben könntest (evtl. noch Screenshots) wie Du die Ansteuerung mit Vixen machst. Ich denke die wenigsten hier kennen dieses Programm.
Welche Daten werden gesendet?
Desweiteren fällt mir auf, das Du analogWrite() in Deinem Code verwendest, die LEDs aber nicht an PWM-Ausgängen angeschlossen sind.
Mario.
1061  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.
1062  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.
1063  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.
1064  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.
1065  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.
Pages: 1 ... 69 70 [71] 72 73 ... 94