Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #30 on: February 07, 2012, 02:03:06 pm » |
was für einen Rückgabewert hab ich bei der PulseIn Funktion ?
bzw. welche größe hat dieser?
Was passiert bei z.b. duration = pulseIn(pin, HIGH,1000); ?
Er speichert quasi auf "duration" die Länge des High Impulses ... was ist aber wenn ich mehrere Highimpulse in diesen 1000mikrosekunden hab? werden diese zusammenaddiert?
|
|
|
|
« Last Edit: February 07, 2012, 03:16:07 pm by kawa-racer »
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #31 on: February 07, 2012, 04:25:12 pm » |
Der Rückgabewert ist die Zeit das Impulses (vom L-H Wechsel bis zum H-L Wechsel) des ersten Impulses nach dem Funktionsaufrufs plus eine gewissen verzögerung. Du kannst Auch die Pause zwischen 2 Impulsen messen: duration = pulseIn(pin, LOW,1000); Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #32 on: February 07, 2012, 05:15:57 pm » |
Also sollte ich in der Zeit 2 mehrer High-Signale haben, so wird dennoch nur der erste High-Pegel übernommen?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #33 on: February 07, 2012, 05:38:56 pm » |
In welcher Zeit?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #34 on: February 07, 2012, 05:40:10 pm » |
in den 1000 mikrosekunden ... zum Beispiel ...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #35 on: February 07, 2012, 06:02:38 pm » |
Das ist die Timeout-zeit. Die Zeit, die pulseIn() höchstens auf einen Impuls wartet. Wieso stellst Du immer wieder die gleichen Fragen? Liest Du die Antworten nicht? http://arduino.cc/forum/index.php/topic,89368.msg674800.html#msg674800Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #36 on: February 07, 2012, 06:13:07 pm » |
Doch doch ... jedoch habe ich das so verstanden, dass in dieser Zeit die Impulse gemessen werden. Jetzt habs ich aber verstanden... Er beginnt das Messen sobald der High Impuls da is und hört auf sobald er auf Low ist (je nach dem wie ichs halt einstelle)... und die Zeit von z.B. 1000 mikrosekunden sagt nur, dass er maximal eben so lang auf ein Signal wartet... Das gleiche kann ich dann auch machen für das Low-Signal... und wenn ich beide summiere erhalte ich somit meine Periodendauer von z.b. 500 Mikrosekunden. Diese werden dann als Zahl 500 in meine definierte Variable gespeichert... Hoffe ich habs etz richtig verstanden. Die Variable wird somit auch bei jedem Schleifendurchlauf überschrieben ... ok ... ich versuch morgen einfach mal ein Programm fertig zu schreiben und Poste es mal ... Sorry ... bin bissi neben der Kappe 
|
|
|
|
« Last Edit: February 07, 2012, 06:15:11 pm by kawa-racer »
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #37 on: February 07, 2012, 06:45:21 pm » |
Ja jetzt müßte es stimmen (soweit ich es um fast 1 Uhr in der Nacht beurteilen kann). Schlafenszeit!! Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #38 on: February 09, 2012, 12:42:59 pm » |
Hi hier mal ein kleiner Auszug zu dem ich ne Frage hab
sensorHIGH = pulseIn(pin1, HIGH,1000); sensorLOW = pulseIn(pin1, LOW,1000); T = (sensorHIGH + sensorLOW); Hz = (1/T); if(Hz > 160){ digitalWrite(pin,HIGH);
Was für eine Größe hat eigentlich T also die Periodendauer in der Variable? Ist das jetzt dann 0,0005 oder steht da 500 mikrosekunden? Weil egal ob ich Hz= (1/T) oder Hz= (1000000/T) mache ... die LED geht nicht an ...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #39 on: February 09, 2012, 02:32:39 pm » |
Laß die Umwandlung von Zeit (Periode T) zu Frequenz weg und kontrolliere gleich die Periodendauer. Das spart reichlich an Speicherplatz und Zeit. Oder besser und einfacher: Benutze wie ich Dir vorgeschlagen hatte map. so bekommst Du gleich die anzahl der eingeschaltenen LED für die Balkenanzeige.
Grüße Uwe
|
|
|
|
« Last Edit: February 09, 2012, 02:34:50 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #40 on: February 09, 2012, 04:18:02 pm » |
Ok Fehler hab ich gefunden ^^... hab für Hz ein unsigned char verwendet (bei einer Zahl die größer ist als 256)...
Mit der Frequenz hätte ich doch eigentlich aber nen größeren Bereich den ich abfragen könnte ... somit würden Schwankungen nichtso auffallen...
ich mach jetzt mal alles fertig und dann können wir mal gucken was verbesserungsfähig ist ;-)
Map hätte ich nämlich jetzt mit der Frquenz gmacht ... aber ich versuch gern beide Seiten
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #41 on: February 10, 2012, 02:43:18 pm » |
So, hier mal die Beta vom Programm.... Dieses wurde mit Hilfe eines netten Menschen übers Internet erstellt... dieser hat halt paar Feinheiten noch ergänzt...
int LED[10]={2,3,4,5,6,7,8,9,10,11}; int signalPin = 12; int sensorHIGH, sensorLOW, wert, t, i;
void setup() { pinMode(signalPin, INPUT);
for (i = 0; i < 10; i++) { pinMode(LED, OUTPUT); } }
void loop() { sensorHIGH = pulseIn(signalPin, HIGH,1000); sensorLOW = pulseIn(signalPin, LOW,1000);
t=(sensorHIGH + sensorLOW);
t = constrain(t, 90, 215); //90 ist die untere, 215 die obere Grenze. Diese beiden Werte muss ich noch etwas anpassen!
wert= map(t, 94, 213, 0, 9);
for (i=0; i<=wert;i++) { digitalWrite(LED,HIGH); } }
Jetzt ne Option die ich gern für dieses Projekt noch mit einbinden würde ... und zwar ist der Sensor selber jetzt ca. 25 cm lang und is in 10 Bereiche unterteilt. Jetzt würde ich gern einen Knopf nutzen der mir z.B. erlaubt einen längeren Sensor zu nehmen um z.b. ein größeres Gefäß und eben mithilfe des Knopfes einen neuen Referenzpunkt zu setzten... ist das überhaupt möglich ohne die Werte (Kapazität) zu kennen?
Momentan hab ich nämlich noch das Problem, dass die Periodendauer pro Bereich sehr klein ist... was ich damit meine... ich habe z.B. bis zum 3 Teilstrich ( 30%) Flüssigkeit eingefüllt ... jedoch zeigt mir die Anzeige schon 50 % an ...`wie könnte man das umgehen? Wäre es vll. besser, für jeden Bereich die Periodendauer in den Scatch zu übernehmen und dann anhand dieser die LEDs zu steuern? Weil jetzt berechnet er sich anhand des Scatches ja die Bereiche mithilfe der MAP- Funktion ja selber ...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #42 on: February 12, 2012, 05:25:49 pm » |
@ Uwe ... was sagst du dazu :-)
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #43 on: February 12, 2012, 05:39:58 pm » |
Auf die schnelle sage ich mal daß Du die LED nicht nur einschalten sondern auch ausschalten mußt ansonsten siehst Du nicht dass der Pegel abnimmt.
"pinMode(LED, OUTPUT);" fehlt der INDEX desw Arrays. "digitalWrite(LED,HIGH);" fehlt wieder der Index des Arrays.
ansonsten müßte es richtig sein (soweit ich das umr 23h 36 abens sagen kann wobei ich müde bin und Venedig heute saukalt war.)
Grüße Uwe
|
|
|
|
« Last Edit: February 12, 2012, 05:48:11 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #44 on: February 12, 2012, 06:15:03 pm » |
int LED[10]={2,3,4,5,6,7,8,9,10,11}; int signalPin = 12; int sensorHIGH, sensorLOW, wert, t, i;
void setup() { pinMode(signalPin, INPUT);
for (i = 0; i < 10; i++) { pinMode(LED, OUTPUT); } }
void loop() { sensorHIGH = pulseIn(signalPin, HIGH,1000); sensorLOW = pulseIn(signalPin, LOW,1000);
t=(sensorHIGH + sensorLOW);
t = constrain(t, 90, 215); //90 ist die untere, 215 die obere Grenze. Diese beiden Werte muss ich noch etwas anpassen!
wert= map(t, 94, 213, 0, 9);
for (i=0; i<=wert;i++) { digitalWrite(LED,HIGH); }
for (j=9; j>wert; j--) { digitalWrite(LED[j],LOW); }
}
Index sollte jetzt richtig sein (lustigerweise is es im Programm richtig... hats sich aber net übernommen ... hmmm).... Wegen dem Ausschalten muss ich nochmal gucken ... stimmt das hab ich total vergessen... muss nur schauen wie ich das jetzt genau anstelle ... ;-)
EDIT: Das Ausschalten der LEDs sollte jetzt funktionieren ...hoffe ich ^^...
|
|
|
|
« Last Edit: February 12, 2012, 06:38:51 pm by kawa-racer »
|
Logged
|
|
|
|
|
|