hi,
es ist das erste mal, dass ich arduino verwende und habe gleich ein
Problem:
Ich möchte das board mit firefly (ein plugin für grasshopper/rhino)
bedienen. Nun möchte ich einen ultraschall ping sensor verwenden und
habe nun festgestellt, dass das nicht so einfach geht: ich habe in
firefly nur ein modul "read" und eins "write". Unabhängig voneinander.
Ich kann also diesen sensor nicht mit firefly bedienen. das ganze
funktioniert so, dass man mit der arduino.exe firmata auf das board
schubst, um es dann mit firefly bedienen zu können.
Kann ich nun nicht den code von dem firmata so ändern, dass ich einen
bestimmten pin nicht mehr in firefly nutzen kann, viel mehr wird der pin
dann von firmata gleich verwendet und gibt dann die sensorergebnisse auf
einem pin aus?
Und das ist das problem: mir fehlen die kenntnisse zu wissen, wie man
daten auf einem pin ausgeben kann. High und low kann ich pins setzen,
aber mehr auch nicht.
vielleicht zum besseren verständnis: das hier ist der code mit dem ich
den sensor ansteuern kann:
1
constintpingPin=7;
2
3
voidsetup(){
4
// initialize serial communication:
5
Serial.begin(9600);
6
}
7
8
voidloop()
9
{
10
11
longduration,inches,cm;
12
pinMode(pingPin,OUTPUT);
13
digitalWrite(pingPin,LOW);
14
delayMicroseconds(2);
15
digitalWrite(pingPin,HIGH);
16
delayMicroseconds(5);
17
digitalWrite(pingPin,LOW);
18
pinMode(pingPin,INPUT);
19
duration=pulseIn(pingPin,HIGH);
20
21
inches=microsecondsToInches(duration);
22
cm=microsecondsToCentimeters(duration);
23
24
Serial.print(inches);
25
Serial.print("in, ");
26
Serial.print(cm);
27
Serial.print("cm");
28
Serial.println();
29
30
delay(100);
31
}
32
33
longmicrosecondsToInches(longmicroseconds)
34
{
35
returnmicroseconds/74/2;
36
}
37
38
longmicrosecondsToCentimeters(longmicroseconds)
39
{
40
41
returnmicroseconds/29/2;
42
}
und das hier ist firmata:
http://pastebin.com/yrpw9PBP
meine idee war nun, diese beiden texte irgendwie zusammenzupacken, einen
pin (pin 2) aus firmata komplett rauszulassen und einfach irgendwie dort
den wert von dem sensor (oder auf einen anderen pin) zu setzen.
ist es einigermaßen verständlich, was ich machen will?! ;)
Ich würde mich über hilfe wirklich sehr freuen!
Danke schonmal!
Hannes F. schrieb:> http://pastebin.com/yrpw9PBP
Was ist das für ein komischer Link? Woher weiss ich, was passiert, wenn
ich da drauf klickt - ich trau mich nicht.
Ich mag nur Forumsanhänge, die auch ich ein paar Wochen noch da sind.
小鬼 schrieb:> Was ist das für ein komischer Link?
Pastebin ist DIE Austauschplatform für Sourcecodes. Hättest du aber
durch kurzes googlen selbst feststellen können.
>Woher weiss ich, was passiert, wenn> ich da drauf klickt - ich trau mich nicht.
Paranoia?
Nick schrieb:> 小鬼 schrieb:>> Was ist das für ein komischer Link?>> Pastebin ist DIE Austauschplatform für Sourcecodes. Hättest du aber> durch kurzes googlen selbst feststellen können.
Mag sein.
Trotzdem erhebt sich die Frage: warum nicht hier posten?
Das Forum hat alle Einrichtungen dazu, ist überhaupt kein Problem.
>>Woher weiss ich, was passiert, wenn>> ich da drauf klickt - ich trau mich nicht.>> Paranoia?
In meinem Fall ist es eher: ich will nicht.
Du fragst hier - dann poste auch hier.
Hallo, wie auch immer.
ich habe es jetzt geschafft, beide codeschnipsel zusammenzufügen und das
ganze zum laufen zu bekommen: (anhang)
Wenn jemand verbesserungsvorschläge hat, immer raus mit der Sprache ;)
Danke!
PS.: ich habe grad ein Problem festgestellt: Wenn der Sensor keine daten
bekommt (oder besser die Entfernung ausserhalb der reichweite ist, dann
scheint es, als ob der komplette arduino verlangsamt wird... servos
reagieren nicht mehr wirklich, alles stockt.
Wenn ich aber meine hand vor den sensor halte, dann funktioniert alles
wunderbar. (also wenn der sensor wirkliche Messwerte ausspuckt.
mein code dafür ist das hier:
1
voidentfernung(){
2
pinMode(2,OUTPUT);
3
digitalWrite(2,LOW);
4
delay(2);
5
digitalWrite(2,HIGH);
6
delayMicroseconds(10);
7
digitalWrite(2,LOW);
8
9
10
pinMode(2,INPUT);
11
duration=pulseIn(2,HIGH);
12
//delay(100);
13
cm=microsecondsToCentimeters(duration);
14
15
}
16
17
longmicrosecondsToCentimeters(longmicroseconds)
18
{
19
// speed of sound: 340 m/s or 29 microseconds/cm.
20
// so: half of the distance
21
returnmicroseconds/29/2;
22
}
und ich glaube das problem ist diese zeile:
"duration = pulseIn(2, HIGH);"
kann es sein, dass der controller da so lange wartet, bis er ein high
signal bekommt - und dass dann in manchen fällen so lange dauert, dass
der ganze ablauf gestört wird?
Kann ich das irgendwie abfangen? Oder kann ich das parallel ablaufen
lassen? - zu allem anderen (serielle kommunikation zum beispiel...)
Grüße
Hmm und das heisst?
Den part habe ich hier her: http://fireflyexperiments.com/
Ich würde mich über eine idee für das im letzten Post beschriebene
Problem freuen!
Danke!!!!
Hannes F. schrieb:> kann es sein, dass der controller da so lange wartet, bis er ein high> signal bekommt
Was sagt die Doku zu pulsin?
Du musst dir angewöhnen, dass es Doku gibt und du da drinnen Dinge
nachlesen kannst. Die Arduino Sachen haben den Vorteil, dass sie
ausreichend gut dokumentiert sind. Du musst nur lesen.
Hannes F. schrieb:> Hmm und das heisst?> Den part habe ich hier her: http://fireflyexperiments.com/>> Ich würde mich über eine idee für das im letzten Post beschriebene> Problem freuen!
Den fix für ersteres hab ich gepostet.
Das andere war nur eine Frage. Wenn bei dir nie negative Zahlen
auftauchen, dann ist es kein Problem. Dir muss nur klar sein, dass es
bei negativen Zahlen ein Problem gibt und parsedecimal dann versagen
wird.
Hi,
danke für den tip zur doku... http://arduino.cc/de/Reference/PulseIn
gefunden habe ich ein "timeout" was auch ziemlich gut seinen job macht.
Nun habe ich aber das Problem, dass der sensor wahllos immerwieder
nullen ausspuckt, wenn er nicht weis wie weit etwas entfernt ist.. das
hat den effekt, dass servos, die damit gekoppelt sind die verrückt
umherspringen....
Ideen?
Gruß
Hannes F. schrieb:> Hi,>> danke für den tip zur doku... http://arduino.cc/de/Reference/PulseIn> gefunden habe ich ein "timeout" was auch ziemlich gut seinen job macht.> Nun habe ich aber das Problem, dass der sensor wahllos immerwieder> nullen ausspuckt, wenn er nicht weis wie weit etwas entfernt ist.. das> hat den effekt, dass servos, die damit gekoppelt sind die verrückt> umherspringen....
Wie wärs, wenn du mit einem if den Messwert 'befragst' ob er 0 ist und
dann entsprechend im Programm reagierst?
So was nennt man Programmieren. Du darfst gerne auch eigene Ideen
einbringen und nicht nur vorgefertigte Funktionen miteinander verbinden.