Show Posts
Pages: 1 ... 60 61 [62] 63 64 ... 199
916  International / Deutsch / Re: Unerklärliches Problem on: November 04, 2013, 11:50:27 am
Quote
dann ist ja gut das die Zeichnung nicht von mir ist ;-).


Nix da, geklaut ist geklaut. Jetzt ist es deine Zeichnung. Und du wirst für Fehler verhauen.
917  International / Deutsch / Re: zwei Arduinos über I2C und Stop des Masters on: November 02, 2013, 12:11:07 pm
Quote
... und der Slave noch aus ist stoppt der Slave(?), reagiert also nicht mehr auf Eingaben.
Wenn der Slave auch Spannung läuft der Master weiter.
Soll Slave(?) evtl. Master heissen ? , sonst versteh ich es gar nicht.

Der Master kann erkennen, ob ein Slave gestartet ist.
Schau dir mal den I2CScanner an, wie der alle Adressen abfragt, ohne dass ein Slave antwortet...

SCL wird vom Master erzeugt, aber ein Slave kann SCL runterziehen, um eine Pause zu erzwingen.
Sollte er eigentlich nicht, und schon gar nicht wenn der Slave ein ausgeschalteter Arduino ist smiley-wink
Ob dein Master-Arduino in diesem Fall was anderes weiter machen könnte, kann ich so nicht sagen.
918  International / Deutsch / Re: Projektvorstellung: Geschwindigkeitsanzeige am Kicker / Tischfussball on: November 02, 2013, 11:45:39 am
Wenn du am Messen bist (start_seen ==1)
darfst du nix mehr machen ausser den Ende-Sensor lesen und auf Grenze überwachen
( oder eventuell nach 1 sek abbrechen )
Dann kriegst du Zykluszeiten um 200 µs hin und hast bei genügend großem Messweg (ca. 5000 µs )
mit ca 25 loop-Zyklen nur noch eine MessUngenauigkeit von 1/25 = 4%

Wenn du gleichzeitig dein keypad mit einem analogRead einliest, den Start-analogRead unnötigerweise ausführst und dein lcd aktualisierst, machst du loop "sehr" träge.
Ich würde die Lichtschranke digital und per Interrupt erfassen. Und schau dir nochmal den Anfang dieses gekaperten Threads an ... Gegen "ich mache es anders" ist nichts zu sagen, und die Grenzen eines anderen Verfahrens auszuloten ist immer gut. Wenn es für deine Zwecke reicht, ist es gut (genug).
Aber 100 km/h auf 2 cm Strecke messen geht so nicht smiley-wink
919  International / Deutsch / Re: Char verketten? on: November 02, 2013, 11:23:50 am
Quote
Was würde dagegen sprechen?
nichts.
Lies dir die snprintf dok durch, wenn die Werte unterschiedlich lang werden können
Führende Nullen erzeugen usw. ,  geht alles ( ausser %f  )
920  International / Deutsch / Re: Char verketten? on: November 02, 2013, 03:24:11 am
In ein
char msg[30];
kann man überall hin schreiben.
Code:
msg[0] = 'N'; // setzt einen Buchstaben an den Anfang
msg[1] = 'T';
msg[2] = ' '; // Leerzeichen müsseen auch gesetzt werden
dtostrf(temperature, 2, 2, msg+3); // schreibt das Ergebnis etwas weiter hinten

Musst nur aufpassen, dass in der Mitte keine 0 (Binär) bleibt, das ist das EndeKennzeichen des Textes.
921  International / Deutsch / Re: Projektvorstellung: Geschwindigkeitsanzeige am Kicker / Tischfussball on: November 01, 2013, 12:52:21 pm
Quote
Das verstehe ich jetzt nicht^^.
Das habe ich befürchtet smiley-wink

Das ist dein sketch:
Code:
void loop()
{  // ca. 1000µs seit dem vorigen loop() ???
  readButton = analogRead(0);
  int sensorValue1 = analogRead(lichtschranke1);   // ca. 120 µs seit loop Start
  int sensorValue2 = analogRead(lichtschranke2);  //  ca. 240 µs seit loop Start
 // pipapo
  if (sensorValue1 >= Grenze1  && start_seen == 0) { start_Zeitmessung = micros(); start_seen = 1; }   // evtl. 500µs seit loop Start
  if (sensorValue2 >= Grenze2  && stop_seen == 0) { stop_Zeitmessung = micros(); stop_seen = 1; }   // evtl. 504µs seit loop Start
// pipapo: evtl. start_seen / stop_seen wieder scharf schalten
 Geschwindigkeit = (((i/100)/(ende_Zeitmessung - start_Zeitmessung))*3.6)*1000000;
// pipapo, evtl.  lcd Update ...
}      


Das heisst, wenn die Lichtschranken so schnell ansprechen, dass sie im gleichen Zyklus kommen, hast du denUnterschied zwischen den 2  micros() - Aufrufen und Berechnungen.
Die Auflösung von micros() sind 4 µs.
Geschwindigkeit =  (i*3.6 *10000) / 4 = i * 9000 km/h  
(komplett unabhängig von der tatsächlichen Geschwindigkeit)
Das sollte den einen Punkt erklären?
Mich interessiert jetzt selbst, wie lang ein micros() - Aufruf dauert ...

Wenn ein Umlauf 1 ms dauert,  und  zwischen start und stop ein loop() Umlauf liegt,  ergibt sich
Geschwindigkeit =  (i*3.6 *10000) / (1050) =  ca. i * 36 km/h  
Bei 2 Umläufen ca. (i*3.6 *10000) / (2000) =  ca. i * 18 km/h  
... (usw)

Wenn ein Umlauf länger dauert, ergeben sich natürlich gröbere Stufungen...

Das ist als verständliches Beispiel gedacht, und daher meine Frage nach den loop - Zykluszeiten ...

Edit: meine ursprüngliche Annahme von ca 50 µs zwischen start- und stop-micros()
war wohl etwas pessimistisch. Werte im Bereich von 4, 8, ... µs sind wohl eher das was du siehst.
922  International / Deutsch / Re: Arduino - Bluetooth - Android - LEDs on: November 01, 2013, 07:29:48 am
Quote
Kann man ein array in c bzw. im arduino überhaupt in Abhängigkeit einer Variablen initialisieren?
Jetzt ist mein Post auch fertig, also, als Ergänzung (mit gleicher Meinung wie Serenifly) :

Im Prinzip ja, aber wozu ? Denn,  was machst du a) mit dem restlichen Speicher, b) wenn es nicht reicht ?

Es gibt übrigens auch new/delete ..., aber wenn du so fragst, lass es lieber smiley-wink

Ansonsten:
Code:
boolean Test(unsigned int size)
{
   int* data = new int[size];
   for (int i = 0; i < size; i++)
       data[i] = size-i;
   boolean result = Test2(data, size);  // das sollte gehen, wenn size nicht zu groß ist
   delete[] data;
   return result;  // edit: leider kein Syntax-Fehler, wenns fehlt !!!
}

boolean Test2(int data[], unsigned int size)
{
  for (int i = 0; i < size; i++)
       if (data[i] != size-i) return false;
  return true;
}
 
void setup() { Serial.begin(115200); }

void loop()
{
   delay (2000);
   unsigned int t = millis()/1000;
   if ( Test(t)  ) { Serial.print(t); Serial.println (" ok"); }
   else Serial.println (" Error ");
}  
 
Noch nicht ausprobiert... kann auch sein, dass "Error" gar nicht kommt. Der Sketch wird aber leider trotzdem nicht ewig laufen ...
 
923  International / Deutsch / Re: Projektvorstellung: Geschwindigkeitsanzeige am Kicker / Tischfussball on: November 01, 2013, 06:48:30 am
Ist das noch deine Berechnung ?
Quote
Geschwindigkeit = ((i/100)/((ende_Zeitmessung - start_Zeitmessung)/1000))*3.6;

( i ist ein float, um uns zu verwirren; daran liegt es nicht )
[i ist die Mess-Strecke in cm]

Nur mal zur Veranschaulichung : 36 km/h  = 10 m/s = 1 cm/ms
  oder 18 km/h = 5cm/10ms und 72km/h = 2cm/ms

Wieviele loop - Umläufe pro msec schafft dein sketch ?
Wenn du im gleichen Umlauf ende_Zeitmessung und start_Zeitmessung bestimmst, misst du nicht, wie schnell dein Kicker-Ball ist, sondern wieviel Zeit zwischen den zwei micros() - Aufrufen vergangen ist.
924  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: November 01, 2013, 06:03:12 am
Quote
sehr praktisch bspw. über die Ethernet-Schnittstelle meinen Laptop an den Arduino anzuschließen

Was spricht gegen ein USB-Kabel ?

Im tiefsten Innern deines Sketch hast du dann sowas wie
Code:
while (myFile.available())
   Serial.write(myFile.read());

Das ist erheblich einfacher als einen ftp server zu schreiben, oder wie kompliziert stellst du dir das vor ?
Wofür brauchst du das edle Ethernet-Shield sonst ?
925  International / Deutsch / Re: Negative Spannung auswerten on: November 01, 2013, 05:34:06 am
Mit Hilfsspannung, und unter Berücksichtigung eines ausreichenden Abstands zur Versorgungsspannung des OpAmp,
könnte man z.B. eine negative Spannung zwischen -4V und 0V (GND) leicht auf den Arduino-Bereich 5V ... 1V wandeln,
mit R1 = R2 und einer Hilfsspannung von +0.5V

 
926  International / Deutsch / Re: Negative Spannung auswerten on: November 01, 2013, 05:04:21 am
Quote
Abgesehen davon, dass hier falsch gerechnet wurde, es kommt +4 V raus, nicht + 1 V, würde das bedeuten, dass bei der Beschaltung des OPV in meinem Beispiel bei einer Eingangsspannung von -2 V am Ausgang +4 V anliegen müssten. Das ist aber nicht so

Das ist tatsächlich nicht so, denn es sind  1V am Ausgang ( Hat wohl ein anderer falsch gerechnet ) smiley-wink
927  International / Deutsch / Re: Auswahltaster für Programmabschnitt on: November 01, 2013, 04:32:06 am
Quote
Gibts eigentlich keinen Befehl um eine LED nur kurz aufblinken zu lassen?
Mit Einschalten, Pause und Ausschalten ist ja auch irgendwie blöd.
smiley-wink Du bräuchtest 3 verschiedene Befehle  (kurz, mittelkurz, ganzkurz)  , das wäre noch viel blöder smiley-wink

So kannst du dir die gewünschte Funktion nach Geschmack selber bauen:
Kann loop() warten bis du fertig geblinkt hast ?  Dann schreib und nimm sowas:
Code:
     blink(pin,dauer); // wartet <Dauer> msec
Willst du regelmäßig blinken und nur beim Start Frequenz und Dauer ( oder an/aus -Zeiten ) ändern ?  Dann such mal nach den diversen Leuchtturm - Diskussionen hier ...


928  International / Deutsch / Re: I2C zwischen mehreren Arduions on: November 01, 2013, 04:14:23 am
I2C ist eine Kommunikation zwischen einem Master und (evtl. mehereren) Slave.
Master bestimmt die Aktion und ein Slave reagiert, wenn seine Adresse angesprochen wird.
Ein Slave kann nicht von sich aus eine Aktion starten (d.h. nicht ungefragt senden).

Ein Arduino kann entweder Master oder Slave sein.

Der Master kann Daten Senden oder Abfragen.
Bei bidirektionalem Datenaustausch wird also nicht die Rolle Master/Slave getauscht, sondern eine andere Funktion verwendet.

Die zu Wire.h mitgelieferten Beispiele zeigen natürlich jeweils nur eine Funktion, aber zu beiden gibt es fertige Beispiele, sowohl für den Master wie für den Slave.
929  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: October 31, 2013, 04:59:57 am
.. ist es möglich die Daten von der Micro-SD-Karte im laufenden Messbetrieb auszulesen, ohne diese aus dem Arduino zu entfernen? Da mein Mast bald mitten auf einem Feld steht, wo rings herum nichts ist, wäre es sehr praktisch bspw. über die Ethernet-Schnittstelle meinen Laptop an den Arduino anzuschließen und die Dateien, welche momentan nicht für die Aufzeichnung benötigt werden, auszulesen. Anmerkung: Der Arduino speichert die Messwerte jeden Tag in eine neue *.txt-Datei, welche mit dem jeweiligen Datum benannt wird. Hierdurch ist es möglich die älteren Daten auszulesen, ohne hierbei den Arduino zu stören.
Üblicherweise kann immer nur eine Datei gleichzeitig offen sein.
Wenn du also nach jedem Schreiben die Datei schliesst, oder gar vor jedem Schreiben mit SD.begin() prüfst, ob überhaupt eine Karte steckt, stört eine Funktion, die eine Datei liest und komplett an den PC (am einfachsten über Serial) sendet, nicht weiter.

Du kannst so natürlich auch die heutige Datei übertragen.
930  International / Deutsch / Re: Parsen von XML Strings on: October 31, 2013, 04:20:15 am
Quote
Jurs wird dir sicher in Kürze die perfekte Lösung liefern
Bis dahin kannst du rauskriegen, warum das xml-Element <state> den Wert
Code:
[b]0.0[/b]
hat (und nicht einfach 0) ,
falls du Zugriff auf den erzeugenden web service hast...

Ansonsten (falls jurs nicht eine universelle xml-Parser "Demo" zaubert) , würde ich auch das xml-spezifische ignorieren und einen einfachen Text-Parser auf strstr - Basis wie Serenifly verwenden:
Code:
char * getState(const char* str)   // const :    str wird nicht verändert
{
   const char* start = strstr(str, "<state>");            //pointer auf den Anfang  "<state>"
   if (start == NULL) return NULL;  // FEHLER: kein "<state>" vorhanden
   start += 7;  // Anfang des Werts
   const char* end = strstr(start, "</state>");        //pointer auf den Anfang von "</state>"
   if (end == NULL) return NULL;   // FEHLER: kein "</state>" vorhanden
   static char result [30];   // Ergebnis als separate Kopie
   strncpy(result, start, end - start);
   return result;
}
Pages: 1 ... 60 61 [62] 63 64 ... 199