Show Posts
Pages: [1] 2
1  International / Deutsch / Re: PWM-Signal auswerten on: July 23, 2013, 02:31:01 pm
1) Wieso kein delay: über pulseIn() kommt kontinuierlich aller 2ms ein neuer Wert. Wenn ich jetzt immer 10ms Pause mache, wird doch einfach nur jeder 5. Wert abgefragt. Damit wird aber nicht ausgeschlossen, dass er falsch (Tasterprellen) ist. Ich muss ergänzen, dass die 10% maximale Abwichung zu viel wäre, 1-2% reichen.

2) Kannst du mir das mit dem return nochmal erklären? Ich versteh das nicht ganz. Also return als einzelne Funktion versteh ich schon, aber den Unterschied zwischen return false und return true. bzw. return 1 und return 0 nicht.

3)Bei dem Link, den TWERI gepostet hast, versteh ich nur Bahnhof...smiley-wink Das ist (hoffentlich nur vorerst) zu hoch für mich. Es gibt schon einen Multiswitch für 20€ zu kaufen, der nach dem selben Prinzip arbeitet (wetteringer-modellbauforum, hab keinen konkreten Link mehr). dummerweise hab ich den erst entdeckt, als ich mir den Arduino schon gekauft habe...Jetzt hat der Bastlerwille gesiegt, sowas selber zu machen smiley-wink


Hier nochmal mein Sketch, bei dem halt besagtes Problem aufgetreten ist....Dem möchte ich nun die "Funktion" fürs Tastenentprellen davorsetzen.
Code:
void setup ()
{
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (3, INPUT);
}

void loop (){
  int a = pulseIn(3,HIGH,24000);//Ließt Eingangssignal
  boolean vLED1 = false;//Hilfsvariable wird zusammen mit der LED auf "true" gesetzt, wenn if-Bedingung erfüllt wurde. Am Ende des loop-teils werden, wenn das Einganssignal in der "Mittelstellung" ist, alle Hilfsvariablen wieder auf "false" gesetzt. Somit kann die LED wieder umgeschaltet werden.
  boolean vLED2 = false;//
  int iLED1 = digitalRead(5);//Ließt Status von LED1
  int iLED2 = digitalRead(6);

  //if-Bedinung für LED1
  if (a>1220 && a<1245 && iLED1==LOW && vLED1 == false){//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
    digitalWrite (5,HIGH);//schalte Ausgang an
    vLED1 = true;//Setze Hilfsvariable auf true. Nächste if-bedinung stimmt somit nicht mehr (bis Eingangssingal in "Mittelstellung" und die LED bleibt an.
  }
  if (a>1220 && a<1245 && iLED1==HIGH &&  vLED1 == false){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
   digitalWrite (5,LOW);
   vLED1 = true;
  }
    //if-Bedinung für LED2
  if (a>910 && a<940 && iLED2==LOW && vLED2 == false){
    digitalWrite (6,HIGH);
    vLED2 = true;
  }
  if (a>910 && a<940 && iLED2==HIGH &&  vLED2 == false){
   digitalWrite (6,LOW);
   vLED2 = true;
  }
      //if-Bedinung zum Zurücksetzen der Hilfsvariablen bei Mittelstellung des Eingangssignals
  if (a>1485 && a<1510){
    vLED1 = false;
    vLED2 = false;
  }                     
}
2  International / Deutsch / Re: PWM-Signal auswerten on: July 21, 2013, 08:32:28 am
Nach einer langen Pause hab ich mich mal wieder mit dem Thema auseinandergesetz. Mit meinem Dad hab ich folgende Grundidee entwickelt: Wenn ich einen mechanischen Schalter betätige, entsteht anfangs nie ein exakt genaues Signal (Funke). Erst mit der Zeit (ein paar millisekunden). Das erste falsche Ergebnis reicht aber aus, um meine bisherige Schaltung zu manipulieren. Also: die if-gleichung wird erst dann in Kraft gesetzt, wenn das eingangssignal (pulseIn) seit ein paar ms konstant ist.



Wie ihr seht, hab ich hier einige Probleme. zum einen, wie ich die erste if-gleichung verwirkliche. Also das mit der maximalen Abweichung von p1. Das zweite Problem ist das "goto". Das goto funktioniert ja nur innerhalb einer Funktion, also nicht übergreifend. Ich weiß, das wird nicht gern gesehen, aber ich sehe hier keine andere Lösung.

Das Bild ist jetzt ein ganz einfacher Gedankenentwurf, bitte schimpft nicht, wenn ich das nicht so formal korrekt habe.
3  International / Deutsch / Re: PWM-Signal auswerten on: March 13, 2013, 02:40:32 pm
Weiß denn keiner was?
4  International / Deutsch / Re: PWM-Signal auswerten on: March 10, 2013, 09:41:09 am
So,
Problem 1, also das Prob. mit dem USB, konnte ich lösen. Lag daran, dass der pulseIn() Bereich zu klein war.
2. Problem, toggle, ist jetzt vorerst nicht so wichtig. Irgendwie muss ich mich da mal länger damit beschäftigen.

Mein größtes Problem (motivierender: Hinderniss   smiley-mr-green), ist, dass wie gesagt die LED nicht korrekt schaltet.
Mit einem anderen Bereich des pulseIn() konnte ich es nicht lösen, auch andere Variablen haben nichts erbracht.
Hat da jemand eine Idee?
5  International / Deutsch / Re: USB-verbindung für externe Schaltung notwendig on: March 08, 2013, 12:52:30 pm
OK. Dann werde ich jetzt einfach noch ein wenig herumexperimentieren, wie klein ich den Bereich machen kann. Nein, einen anderen Arduino, sei es mit Quarz, hab ich nicht zum ausprobieren.
6  International / Deutsch / Re: USB-verbindung für externe Schaltung notwendig on: March 08, 2013, 11:59:17 am
Hat funktioniert!
Aber ich versteh nicht, welche Auswirkung pulseIn() auf die Versorgungspannung des Arduinos haben soll. Oder versteh ich da jetzt was falsch?
7  International / Deutsch / Re: USB-verbindung für externe Schaltung notwendig on: March 07, 2013, 01:57:06 pm
Macht überhaupt nix aus. "Symptome" bleiben gleich. Die LED bleibt auch an.

hab grad ein bisschen rumexperimentiert: der Arduino nimmt seine Spannung von beiden Kabeln (7,2 und 5 V) gleich an. Es ist egal, welches ich abstecke, er und die LED bleiben an.
8  International / Deutsch / Re: USB-verbindung für externe Schaltung notwendig on: March 07, 2013, 01:14:46 am
Arduino Mini. Sorry, hab ich vergessen.

5V und  7,2 V kommen vom RC-model. 7,2 V sind die Akku Spannung, 5V ist die reduzierte Spannung vom Empfänger. und ⏚ ist - , bzw Masse. (Stimmt, hab ich falsch geschrieben smiley-small) Aber die ist für 7,2V und 5V ja das gleiche, also auch ein Kabel.
9  International / Deutsch / USB-verbindung für externe Schaltung notwendig on: March 06, 2013, 02:23:18 pm
Auf Anraten in diesem Thread http://arduino.cc/forum/index.php/topic,148970.45.html mache ich hier für ein weiteres Problem ein zweiten Thread auf xD

Und zwar messe ich ein PWM Signal mittels pulseIn() (von einer Funkfernsteuerung) und schalte, je nachdem, wie hoch/tief das Signal ist, eine LED an, bzw. wieder aus. Die genaue Schaltungsweise ist jetzt hier denk ich nicht so wichig.
Denn mein Problem ist folgendes: Wenn ich das USB-kabel entfernde, bleibt der Status der LED erhalten (also an, bzw. aus), aber ich kann den Status nicht mehr ändern. Sobald ich das Kabel wieder anstecke, funktioniert dies. Zur Info: Das Kabel verwende ich nur dazu, den Sketch zu übertragen. Sonstige Informationen werden nicht übertragen.

Hier mal meine Anschlussbelegung:

Ich habe ein 3-poliges Kabel zum Empfänger.
So ist es am Arduino angeschlossen
5V+: 5V
Ground: ⏚
Steuersignal: pin3

Dann noch ein Seperates Kabel für die Spannnung zwischen 6-12V:
7,2V+: VI

Leds sind zZt. nicht angeschlossen, sondern ich verwenden LED13.

Hier nochmals der Sketch:

Quote
void setup ()
{
pinMode (13, OUTPUT);
pinMode (3, INPUT);
}

void loop ()
{
int a = pulseIn(3,HIGH,24000);
int L1 = digitalRead(13);
if (a>1228 && a<1242 && L1==LOW){
  digitalWrite (13,HIGH);
  delay(1000);
}
if (a>1228 && a<1242 && L1==HIGH){
  digitalWrite (13,LOW);
  delay(1000);
}
}


So, jetzt müsstet ihr alle Infos haben, die ich euch geben konnte smiley-wink

Achja, sorry für meine Überschrift, aber wie kann man sowas kurz erklären?
10  International / Deutsch / Re: PWM-Signal auswerten on: February 26, 2013, 02:07:32 pm
Zitate bring ich nicht, weil ich da irgendwie zu blöd dazu bin... smiley-lol

@michael_x:

Wieso, weshalb, warum ... smiley-lol

"^" Ich habe allerdings schon nachgelesen, und zwar unter den Referenzen. Aber ich verstehe nicht, wie das zusammen mit dem "=" funktioniert !? http://torrentula.to.funpic.de/dokumentation/bitweisesund/
Bedeutet das dann nichts anderes als "alles außer 1"?
Aber irgendwie versteh ichs nicht

Variable "TOGGLE" wird als 0 deklariert.
if...then: Setzte TOGGLE alles andere als 1 !? Gibt irgendwie keinen Sinn.
Schalte Ausgang: TOGGLE, also alles andere als 1 !? Gibt noch weniger Sinn.

Code:
byte TOGGLE = 0;

-----------------------------------------------

if ...
  {
    TOGGLE ^= 1;
    digitalWrite(ledPin, TOGGLE);
   }

Google sagt irgendwie auch nichts dazu. Deswegen muss ich hier so blöd fragen. Tut mir echt leid. Wenns irgendwo schon beschrieben ist, könnt ihr mir ja vlt. einen Link geben.


Zu den Variablen: Ich bin mir bewusst, dass, wenn ich sie ganz am Anfang hinschreibe, für setup und loop teil gilt, und wenn ich sie im loop teil definiere, der setup teil nicht zugreifen kann. Als erstes hab ich sie ganz am Anfang (noch vor setup) definiert. LEDs haben nicht geleuchtet. Dann in den loop-teil - LEDs konnte ich schalten.
Und psychologische Antworten bringen mir bei meinem Problem auch nicht viel smiley-lol

Zu dem USB-Problem:
An der Stromversorgung liegt's nicht. Da kommt überall die richtige Spannung.
Was mir gerade aufgefallen ist: Das USB kabel ist zum Schalten der LED wichtig. Ist sie einmal an, kann ich das Kabel abstecken und der Ausgang bleibt an.
Ich denke, ich hab irgendwo einen total einfachen Fehler, komm aber nicht drauf.

Weil du kein delay() gesehen haben möchtest: http://arduino.cc/forum/index.php/topic,148970.msg1120028.html#msg1120028 smiley-lol

Zum Beispiel: Aber das bringt mir doch immer noch nichts. Ich will die LED ja selber wieder ausschalten und nicht nach einer bestimmten Zeitspanne.

@doc_arduino:

Es sind digitale Taster. Jeder Taster (ich arbeitet zZt. mit 4 Stück) hat einen Wiederstand (Werte weiß ich jetzt nicht ganz genau) vorgeschalten. Je nachdem, wie groß der Wiederstand ist, desto länger/kürzer wird das Signal, was von der Funke zum Modell geschickt wird und schließlich auch vom Empfänger zum Servo, bzw. hier zum Arduino übertragen wird.

Alle Fehlerquellen, die mit schlechtem Kontakt, schlechten Schaltern und Wiederständen oder schlechter Funkübertragung bzw. dem pulseIn() zu tun haben, kann man getrost ausschließen. Denn das problem wäre dann auch bei der "delay-version" aufgetreten. Habs grade nochmal ausprobiert. Ein kurzer Tasterdruck(wirklich kurz), und die LED schaltet zuverlässig an/aus.
Ich gehe davon aus, dass in der Programmierung der Fehler liegt.

Wegen den Variablen: Siehe oben. Ich hab sie eins zu eins kopiert. Zweitens käm sonst beim kompillieren ja auch eine Fehlermeldung.
11  International / Deutsch / Re: PWM-Signal auswerten on: February 25, 2013, 12:27:04 pm
@MaFu: Ok, hab ich mir fast so gedacht  smiley-lol

@Doc_Arduino:

Hm, versteh ich nicht ganz.
Code:
TOGGLE ^=1;
Was bewirkt das und was bedeutet das "^" ? Ist das das bitweise XOR?
Und muss ich da unbedingt mit bytes arbeiten? Weil da blick ich nicht durch  smiley-mr-green

Wat anderes: Hab jetzt mal Doc_Arduinos Rat befolgt. Allerdings wird die Hilfsvariable nicht bei jeder gültigen if-Bedingung zurückgesetzt, sondern alle erst in einer seperaten if-bedinung (Eingangssingal muss in in "Mittelstellung" sein) am Schluss. Da der loop-teil ja nahe zu in keiner Zeit durchläuft, reicht das ja auch.
Mein Problem ist: An sich funktioniert es, aber das Signal wird nicht eindeutig verarbeitet. Dh, wenn ich den Taster in meiner Fernbedingung drücke, geht die LED an, aber sofort wieder aus. Ich muss zB. längere Zeit drücken. Ist aber nicht immer. Manchmal geht sie auch wieder aus, wenn ich lange drücke. Beim ausschalten genau das gleiche.
Ich zeig euch mal meiner Code (noch ohne Toggle), vllt. sieht ja jemand was ?

Code:
void setup ()
{
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (3, INPUT);
}

void loop (){
  int a = pulseIn(3,HIGH,24000);//Ließt Eingangssignal
  boolean vLED1 = false;//Hilfsvariable wird zusammen mit der LED auf "true" gesetzt, wenn if-Bedingung erfüllt wurde. Am Ende des loop-teils werden, wenn das Einganssignal in der "Mittelstellung" ist, alle Hilfsvariablen wieder auf "false" gesetzt. Somit kann die LED wieder umgeschaltet werden.
  boolean vLED2 = false;//
  int iLED1 = digitalRead(5);//Ließt Status von LED1
  int iLED2 = digitalRead(6);

  //if-Bedinung für LED1
  if (a>1228 && a<1242 && iLED1==LOW && vLED1 == false){//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
    digitalWrite (5,HIGH);//schalte Ausgang an
    vLED1 = true;//Setze Hilfsvariable auf true. Nächste if-bedinung stimmt somit nicht mehr (bis Eingangssingal in "Mittelstellung" und die LED bleibt an.
  }
  if (a>1228 && a<1242 && iLED1==HIGH &&  vLED1 == false){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
   digitalWrite (5,LOW);
   vLED1 = true;
  }
    //if-Bedinung für LED2
  if (a>919 && a<930 && iLED2==LOW && vLED2 == false){
    digitalWrite (6,HIGH);
    vLED1 = true;
  }
  if (a>919 && a<930 && iLED2==HIGH &&  vLED2 == false){
   digitalWrite (6,LOW);
   vLED1 = true;
  }
      //if-Bedinung zum Zurücksetzen der Hilfsvariablen bei Mittelstellung des Eingangssignals
  if (a>1490 && a<1505){
    vLED1 = false;
    vLED2 = false;
  }

}

Es liegt aber nicht am Empfang. Denn als ich es das erste mal mit delay() als verzögerung gemacht habe, hat es ja hinsichtlich dieses Problems super funktioniert.

Was mich verwundert hat: Warum muss ich die Variablen im loop-teil deklarieren, und kann sie nicht ganz am Anfang des Sketches hinschreiben? Denn da funktioniert es nicht.

EDIT Und noch ein Problem. Ich kann die LEDs nur schalten, wenn ich das USB-kabel verbunden habe !?
Mal meine Pin-belegungen:

5V+: 5V
Ground: ⏚
7V+: VI
Leds sind mit + am Arduino Ausgang und mit - an Ground angeschlossen.

Das Arduino ist schon angeschlossen, wenn ich das USB-kabel entferne, leuchtet die Blaue LED noch.

Warscheinlich ist die Lösung total einfach, bloß komm ich nicht drauf  smiley-mad
12  International / Deutsch / Re: PWM-Signal auswerten on: February 24, 2013, 03:29:34 pm
Wenn ich das so lese finde ich das einfach genial.  smiley-mr-green

Stimmt, Dankeschön  smiley-lol

Werd morgen berichten, ob's auch bei mir funktioniert smiley-wink

Zwei andere Fragen:
1) Das togglen funktioniert bei mir nicht. Wird immer als unbekannter Befehl (diesmal richtig? smiley-lol) markiert und beim kompillieren als Fehlermeldung gebracht. Dann gibt es da ja was zum downloaden (digitalToggle), funktioniert aber nicht. (Ja, ich hab es am Anfang vom Sketch importiert). Bringt immer fehlermeldungen, die sich auf die neuen Dateien in der library beziehen.

2) zum Blinken ohne delay:
Code:
if (millis() - previousMillis > interval) {
Wieso ein ">", und nicht ein "="? Funktionierten tut letzeres ja auch!?
13  International / Deutsch / Re: PWM-Signal auswerten on: February 24, 2013, 02:57:14 am
@Doc_Arduino:
Das bringt mich auch nicht weiter. Ich hab ja dann immer noch das Problem, dass im erneuten und sofortigem Wiederdurchlauf des loop-teils die LED sofort wieder umgeschaltet wird, wenn ich in der Zeit nicht den Taster losgelassen habe. (Das Signal wird aller 20ms erneut gesendet).

@michael_x:
Versteh ich nicht ganz. In der zweiten If-schleife schaltest du dann doch die LED automatisch wieder aus!? Was bringt mir das jetzt  smiley-lol

Ich weiß, dass ein goto nicht gern gesehen wird, aber sofern ich keine andere Möglichkeit habe, werde ich es wohl verwenden müssen.


Quote
Ich möchte die delay()-Schleife raus haben.
Du meinst dein pulseIn() ?

?? Ich versteh jetzt nicht, was die miteinander zu tun haben, bzw. wieso das pulseIn() gleich delay() sein soll

Tut mir leid, wenn ich mich ein wenig blöd anstelle....  smiley-cry smiley-lol
14  International / Deutsch / Re: PWM-Signal auswerten on: February 18, 2013, 08:28:29 am
Ich push das hier nochmal hoch
Weiß denn keiner was?
15  International / Deutsch / Re: PWM-Signal auswerten on: February 16, 2013, 08:39:17 am
Ich weiß jetzt nicht, was mir mappen bringen sollte, es funktioniert doch!

Aber ein anderes Problem.
Ich möchte die delay()-Schleife raus haben.

Code:
void setup ()
{
pinMode (13, OUTPUT);
pinMode (3, INPUT);
}

void loop ()
{
int a = pulseIn(3,HIGH,24000);
int L1 = digitalRead(13);
if (a>1228 && a<1242 && L1==LOW){//Wenn Eingangssignal im richtigen Bereich und entsprechende LED aus ist,
  digitalWrite (13,HIGH);//dann schalte LED 13 an
  if (a>1490 && a<1505){//Wenn neutrales Einganssignal (Mittelstellung),
    goto if1H;//dann geh weiter zu nächsten if-Bedingung
  }
  else
  {
    goto if1L;//sonst wiederhole aktuelle if-Bedingung
  }
}
if1H:

if (a>1228 && a<1242 && L1==HIGH){
  digitalWrite (13,LOW);
  if (a>1490 && a<1505){
    goto if1L;
  }
  else
  {
    goto if1H;
  }

}
if1L:
;
}

Kann das an dem "goto" liegen? Weil er erkennts nicht als funktion, aber es ist ja eine offizielle Funktion !?

Zur Info nochmal das Funktionsprinzip: Wenn eine LED-geschaltet wird, wird automatisch eine weitere if-gleichung in Gang gesetzt, dass die vorhergehende if-gleichung so lange wiederholt wird, bis kein Schalter gedrückt wird (Der Wert am Eingang beträgt dann so um die 1500). Dann gehts nach gewohntem Prinzip weiter. Damit wird verhindert, dass die LED gleich wieder ausgeschaltet wird.
Pages: [1] 2