INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Impulszähler aus RC-Signalzähler
17.03.2015, 14:14
Beitrag #9
RE: Impulszähler aus RC-Signalzähler
(17.03.2015 13:54)do1xxy schrieb:  mittlerweile habe ich die renudanten Zaehlerimpuls-Anweisungen herausgenommen. Ohne diese bekomme ich auch keine Fehlermeldung.
Der Status ist der, dass nach wie vor der Counter läuft, aber eine Abfrage des RC-Einganges nicht stattfindet oder zumindest angezeigt wird.
Dann mach Dir vielleicht mal ein paar Debug-Ausgaben rein, damit Du siehst, wann was passiert.

Zitat:Lässt sich mein Vorhaben bzw. die angedachte Funktion nur mit einem Interrupt realisieren?
Prinzipiell ist das mit dem pulseIn nicht gerade elegant, aber fuer Dein Vorhaben muesste es reichen, soweit ich das ueberblicken kann.

Stell' doch nochmal das aktuelle Coding hier rein und sage uns genau, was das Coding macht und was Du erwartest.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 08:44
Beitrag #10
RE: Impulszähler aus RC-Signalzähler
Moin Thorsten,

der Sketch besteht aus dem Block zur Auswertung des vom Empfänger kommenden Signales:

int RCin = 12; // Signal aus dem Empfänger, entsprechend gewählter Kanal
int RCLed = 11; // Ausgang für Kontroll LED

byte val = 75;
byte RCon = 0;

unsigned long Impuls;

void setup()
{
pinMode(RCin, INPUT);
pinMode(RCLed, OUTPUT);
digitalWrite(RCLed, HIGH);
}


void loop()
{

Impuls = pulseIn(RCin, HIGH, 20000); // int pwin = 1; INPUT
val = map(Impuls, 1090, 1929, 0, 150);

if(val < 30)
{
RCsignal();
}
}
void RCsignal()

{
if(RCon == 0)
{

digitalWrite(RCLed, LOW);
RCon = 1;
delay(1200);

}
else
{

digitalWrite(RCLed, HIGH);
RCon = 0;
delay(1200);
}
}

Dieser toggelt den Ausgang RCLed. Dieser Impuls soll dazu genutzt werden um den Zähler zu veranlaasen den Wert um "1" zu erthöhen. So gesehen ist der Ausgang RCLed identisch mit einem Taster, der den Zähler entsprechend ansteuert.

Natürlich ließe sich auch ein einfacher Impuls statt der Toggle-Funktion zum Weiterzählen nutzen, aber mit der Toggle-Funktion gehe ich auf Sicherheit.

Der zweite Block zählt einfach von 1 bis x (x in diesem Fall entsprechend 4). An den Ausgängen D2 bis D5 ist jeweils ein Relais angeschlossen:

//Zuweisung der 4 LED-Ausgänge
int Led1 = 5; //D2
int Led2 = 6; //D3
int Led3 = 7; //D4
int Led4 = 8; //D5


//Ausgang LED zählt dezimal von 1 bis 4
void zaehler(void)
{
unsigned char j;
for(j=1;j<=5;j++) // 200ms Verzögerungszeit zwischen LED HIGH und LED LOW
{
digitalWrite(j,HIGH); //LED HIGH entsprechend dem Wert der Variable j
delay(200); //delay 200ms

digitalWrite(j,LOW); //LED HIGH entsprechend dem Wert der Variable j
delay(200); //delay 200ms
}

}



void setup()
{
unsigned char i;
for(i=2;i<=5;i++) //set PIN with 5~8 pin in turn
pinMode(i,OUTPUT); //setzt i in Funktion PIN output
}
void loop()
{
zaehler(); //example 1
}

Mein Problem besteht darin beide Blöcke so zu verbinden dass ich per Fernsteuerung den Zählerstand jeweils um "1" erhöhe.

Zugegeben, ich habe meine Kenntnisse überschätzt und die Ausführung als Sketch für den Arduino unterschätzt. Als PC-Dino habe ich eher noch die Funktionsaufrufe von BASIC im Hinterstübchen.

Alternativ lässt sich das gewünschte Ziel auch mit reiner Hardware erreichen, was aber einen höheren Platz- und Strombedarf bedeutet. Von daher erhoffe ich mir die Ausführung mittels arduino realisieren zu können.

Gruß
armin de DO1XXY
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 09:02
Beitrag #11
RE: Impulszähler aus RC-Signalzähler
Hi,
ok, jetzt hast Du zwei Sketche hier reingestellt, die beide nicht das darstellen, was Du eigentlich machen willst. Vielleicht ueberlegst Du Dir nochmal ganz genau, was Du eigentlich brauchst. Vielleicht weisst Du das aber auch, aber ich bin zu bloed, das zu kapieren.
Wenn ich mir die beiden Sketche anschaue, dann haben die natuerlich so ihre Macken, aber die zu beheben bringt's wahrscheinlich nicht. Versuchen wir zuerst einmal eine Anforderungsanalyse:

Du hast eine Fernsteuerung mit einem Schalter drauf. Ausserdem irgendwo haengt an einem Empfaenger ein Arduino. An vier Ausgaengen des Arduinos haengt jeweils eine LED. Am Anfang ist die erste der LEDs eingeschaltet, die anderen sind aus. Jedesmal, wenn der Schalter betaetigt wird, soll die zuletzt eingeschaltete LED ausgehen und die naechste an.

Ist das ungefaehr richtig so?
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 09:28
Beitrag #12
RE: Impulszähler aus RC-Signalzähler
Hallo Thorsten,

bis auf die Ergänzung dass die Zählreihe nach der 4. LED wieder von vorne beginnt (oder alternativ per Fernsteuerungstaster wieder zurückgezählt wird), stimmt die Aufgabenbeschreibung.

Gruß
Armin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 10:06
Beitrag #13
RE: Impulszähler aus RC-Signalzähler
Hi,
ok, das mit dem "von vorne anfangen" habe ich nicht explizit erwaehnt, ist aber klar.
Von wegen zurueckzaehlen: Das bedeutet, dass es zwei Taster gibt: Einen fuer vorwaerts und einen fuer rueckwaerts, richtig?
...aber fangen wir erstmal mit einem einzelnen Taster an und loesen erst einmal das Teilproblem "Erkennen, dass die Taste gedrueckt wurde". Dazu nehme ich an, dass Du keine automatische Tastenwiederholung haben willst. D.h. wenn die Taste festgehalten wird, dann soll das nicht als mehrere Tastendruecke gewertet werden. Richtig? (Im Weiteren nehme ich an, dass das richtig ist.)
Dann schreiben wir jetzt erst einmal eine Funktion, die erkennt, dass die Taste gedrueckt wurde. Ich wuerde das in etwa so machen:
Code:
boolean buttonPressed() {
  static boolean lastState = false;  // am Anfang nicht gedrueckt

  unsigned long impuls = pulseIn(RCin, HIGH, 20000);
  if(!impuls) return false;   // Timeout, kein Impuls empfangen...
  if(lastState) {  // also der aktuellen Tastendruck wurde schon zurueckgeliefert
     if(impuls < 1258) {  // Das map kann man sich sparen
         // wen wir hier landen, dann ist die Taste gedrueckt, war aber das letzte
         // Mal auch schon gedrueckt, wir tun nichts
         return false;
     }else{
         // Die Taste war das letzte Mal gedrueckt, aber jetzt nicht mehr
         lastState = false;
         return false;
     }
  }else{   // d.h. die Taste war das letzte Mal nicht gedrueckt
      if(impuls < 1258) {  
         // wen wir hier landen, dann ist die Taste gedrueckt
         // und war das letzte Mal nicht gedrueckt
         // Also haben wir einen gueltigen Tastendruck
         lastState = true;
         return true;
     }else{
         // Die Taste war das letzte Mal nicht gedrueckt
         // und ist es immer noch nicht
         return false;
     }
  }
};
Das Coding liesse sich noch vereinfachen, aber ich glaube, dass es so verstaendlicher ist. Ausserdem hoffe ich, dass wir nicht auch noch Coding zum Entprellen brauchen. Das werden wir dann aber schnell sehen.
Jetzt Dein Part: Baue mal einen ganz einfachen Sketch, der die obige Funktion in loop() aufruft und immer dann, wenn true zurueckgeliefert wird, "Taste gedrueckt" ueber Serial rausschreibt.
Wenn das funktioniert, dann sehen wir weiter.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 10:23
Beitrag #14
RE: Impulszähler aus RC-Signalzähler
Hallo Thorsten,

danke noch einmal für dier Hilfe.
Ein Rückwärtszählen ist nicht erforderlich wenn der Counter ohnehin wieder von vorne anfängt.

Mein Part kommt morgen, jetzt muss ich erst einmal etwas tun um meine Euros zu verdienen.

Gruß
Armin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 09:03
Beitrag #15
RE: Impulszähler aus RC-Signalzähler
Moin Thorsten,

meine Versuche über "Serial" etwas zu erreichen haben ausser meinem Hirnschmalz nichts bewegt.

Um weiterzukommen habe ich die Renundanz aus der Abfrage entfernt und diese als damit abgeschlossen zur Verwendung definiert. Über das Entprellen von Tasten brauche ich mir keine Sorgen zu machen. Die Fernsteuerung liefert saubere Signale (was in Hinsicht auf die Steuerung der Modelle ohnehin zwingend erforderlich ist).

/* Abfrage eines RC-Empfänger über eine Tastfunktion und Ausgabe auf eine LED */


int RCin = 12; // Signal aus dem Empfänger, entsprechend gewählter Kanal
int LED = 11; // Ausgang für Kontroll LED

byte valw = 75;
byte LEDon = 0;

unsigned long durationw;

void setup()
{
pinMode(RCin, INPUT);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
}

void loop()
{

durationw = pulseIn(RCin, HIGH, 20000); // misst die Zeit in der an pwin ein Signal anliegt int pwin = 1; INPUT
valw = map(durationw, 1090, 1929, 0, 150); // setzt den Wertebereich 1090 bis 1929 in den Bereich 0 bis 150 um

// ist valw kleiner 30 gehe zu Unterprogramm

if(valw < 30)
{
Unterprogramm();
}
}
void Unterprogramm()

{
if(LEDon == 0)
{
digitalWrite(LED, LOW); // LED aus bei aktivem Signal
LEDon = 1;
delay(500);

digitalWrite(LED, HIGH); // LED an als Dauerzustand
LEDon = 0;
delay(1000);

/* Der Zähler soll bei dem HIGH-LOW Sprung der LED um eine Stelle weiterzählen. Die Verzögerungszeiten von 500ms und 1000ms
garantieren dass eine Fehlanwahl durch zu schnelles Tasten am Stick der Fernsteuerung vermieden wird.*/

}
}


Mein Gedanke ist jetzt der die H-L Flanke bzw. das LOW-Signal der LED als einen Wert für eine Variable zu deklarieren. Diese Variable soll den Zähler jeweils um den Wert 1 erhöhen.

Den Ablauf stelle ich mir wie folgt vor:

das Programm startet und läuft bis zur Abfrage des vom Empfänger kommenden Signales, in diesem Fall die Variable des von der LED definierzen H-L Flankensprungs. Erfolgt der Sprung läuft das Programm durch die Zählerschleife und erhöht dessen Zählervariable um den Wert 1. nach dem Durchlauf springt das Programm wieder zur Abfrageroutine. Dort wartet es erneut auf ein H-L Flankensprung. In Basic wurde dies früher mit "if xy = yx then goto" realisiert.

Ich werde mich noch einmal durch die Grundlagen der Arduinoprogrammierung durcharbeiten, um zu eruieren ob eine solch einfach gehaltene Funktion mit einem Arduino zu realisieren ist.

Wenn ich einen fertigen Sketch habe stelle ich diesen nebst deranzusteuerenden Hardware im Forum ein.

Gruß aus Lüneburg
Armin de DO1XXY
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 09:08
Beitrag #16
RE: Impulszähler aus RC-Signalzähler
Hi,
koenntest Du bitte code-Tags verwenden?
Ausserdem: Probier doch bitte mal meinen Vorschlag aus. Warum hast Du das nicht getan? Es wuerde meiner Meinung nach wirklich funktionieren und Dich in die richtige Richtung bringen.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste