Show Posts
Pages: [1]
1  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 13, 2013, 12:56:49 pm
Vielen Dank! Das sollte ich hinbekommen.... ;-)
2  International / Deutsch / Re: Void Loop auf mehrere Tabs verteilen? on: January 13, 2013, 07:40:50 am
Danke , nun blick ich auch durch.

Das Beispiel von Dani werd ich gleich mal versuchen. Das ist doch das was ich suchte....


*Knicksmach....

Edit:
Japp genau das war es was ich suchte....

@Uwe Ja für mich erhöht das die Übersichtlichkeit schon, denn wie ihr schon festgestellt habt bin ich blutiger Anfänger ;-)
3  International / Deutsch / Re: Void Loop auf mehrere Tabs verteilen? on: January 13, 2013, 06:59:34 am
Nett wäre es wenn Du mir das auch etwas näher erläutern würdest. Mit einem eingeworfenem Begriff ist mir nicht wirklich geholfen.
4  International / Deutsch / Void Loop auf mehrere Tabs verteilen? on: January 13, 2013, 06:50:50 am
Hallo,
Ich bastel grad an einem Programm welches mehrere Taster und LED steuert. Jeweils 2 Taster und 2 LED arbeiten zusammen. Allerdings steuern die Taster eine Funktion in einer Software und diese sendet dann eine Quittung zurück um die jeweilige LED zu schalten.

Nun würde ich gerne mein Programm auf mehrere Tabs verteilen. Die Variablen und das Setup in einem und alles was unter Void Loop läuft auf mehrere einzelne Tabs. So das ich immer für die Taster und LED die Zusammen gehören einen Tab habe.

Allerdings nimmt die IDE das Void Loop () ja nur in einem Tab. Kann ich das so wie ich mir das Denke überhaupt realisieren, das ich alles was unter Void Loop läuft auf mehrere Tabs aufteile?

Gruss
5  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 12, 2013, 07:09:18 am
Ok, viel gegoogelt, viel umherprobiert, aber nicht wirklich mit Bounce weiter gekommen.

Nun habe ich aber folgendes probiert:
Code:
const int LED = 13;    // the pin for the LED
const int BUTTON = 7;  // the input pin where the
                    // pushbutton is connected
int val = 0;    // val will be used to store the state
               // of the input pin
int old_val = 0; // this variable stores the previous
               // value of "val"
int state = 0;   // 0 = LED off and 1 = LED on


void setup() {
  pinMode(LED, OUTPUT);   // tell Arduino LED is an output
  pinMode(BUTTON, INPUT); // and BUTTON is an input
 Serial.begin(9600);
}


void loop(){
 val = digitalRead(BUTTON); // read input value and store it
                        // yum, fresh


 // check if there was a transition
 if ((val == HIGH) && (old_val == LOW)){
   state = 1 - state;
   delay(10);
 }


 old_val = val; // val is now old, let's store it


 if (state == 1) {
  // digitalWrite(LED, HIGH); // turn LED ON
    Serial.print("ON AIR\r");
 } else {
  // digitalWrite(LED, LOW);
   Serial.print("OFF AIR\r");
 }

  if (Serial.available()) // auf Daten am serielle-Port warten
  {
    byte comand = Serial.read(); // Daten Byte in die Variable comand schreiben
      if (comand == 48) // comand auswerten ASCII 0
      digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)


      if (comand == 49) // comand auswerten ASCII 1
      digitalWrite(LED, LOW);   // turn the LED off

  }
}

Das funktioniert soweit ja ganz gut, allerdings werden meine Serial.print("ON AIR\r"); und Serial.print("OFF AIR\r"); nun jeweils endlos gesendet. Lässt sich das ändern das der befehl nur einmal gesendet wird?
Weil mit Bounce komme ich absolut nicht weiter.

Einmal drücken Serial.print("ON AIR\r"); nächstes mal drücken Serial.print("OFF AIR\r");
6  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 11, 2013, 03:42:52 pm
Also nun komme ich absolut nicht weiter...

Ich habe unzählige male versucht meinen obigen Code um folgenden Code zu erweitern, aber es funktioniert nicht.
Code:
/*
 Debounce
 
 Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
 press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
 a minimum delay between toggles to debounce the circuit (i.e. to ignore
 noise). 
 
 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached from pin 2 to +5V
 * 10K resistor attached from pin 2 to ground
 
 * Note: On most Arduino boards, there is already an LED on the board
 connected to pin 13, so you don't need any extra components for this example.
 
 
 created 21 November 2006
 by David A. Mellis
 modified 30 Aug 2011
 by Limor Fried
 
This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Debounce
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  // check to see if you just pressed the button
  // (i.e. the input went from LOW to HIGH),  and you've waited
  // long enough since the last press to ignore any noise: 

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:
    buttonState = reading;
  }
 
  // set the LED using the state of the button:
  digitalWrite(ledPin, buttonState);

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;
}

Hier benötige ich fortgeschrittene Hilfe. Wie baue ich das Bounce anstelle von Delay in meinen Code ein?
7  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 11, 2013, 08:38:22 am
Danke erstmal....

Wioe müsste es denn bei meinem bisherigem Code geändert werden mit debounce? Wenn ich das richtig sehe wird im Beispiel mein Taster ja zum Umschalter. Das soll ja so nicht sein. Er soll ja nur jeweils einen Impuls senden. Und beim 2. betätigen einen anderen....

Ginge das auch nach dem Beispiel wie es hier
http://www.fh-kl.de/~zitt/downloads/ES/Embedded_Systems_Zitt_06_Taster-entprellen.pdf

beschrieben ist? Denn das sieht auf den ersten Blick einfacher aus.

Alle anderen Taster werden nur eine Funktion haben, nur dieser eine soll beim 1. drücken einschalten (ON AIR) und beim 2. drücken dann ausschalten(OFF AIR).

Rein von der Theorie funktioniert das nun ja auch schon, nur eben nicht entprellt.
 
8  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 10, 2013, 07:06:11 pm
Sodale, nun sind wir schon einen Schritt weiter. Dank des Programmieres von mAirlist weiss ich nun das es ein /r sein muss. Damit klappt es im Grundlegenden auch schon mit folgendem Programm(Schalter vor Serial gestellt):

Code:
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int tasterpin1 = 8;
int tasterstatus;


void setup()

  Serial.begin(9600);
    // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

void loop()
    {
      {
tasterstatus = digitalRead(tasterpin1);
if(tasterstatus == HIGH)
  Serial.print("ON AIR\r");
 delay(1000); 
}
      {
tasterstatus = digitalRead(tasterpin1);
if(tasterstatus == HIGH)
  Serial.print("OFF AIR\r");
 delay(250); 
}

  if (Serial.available()) // auf Daten am serielle-Port warten
  {
    byte comand = Serial.read(); // Daten Byte in die Variable comand schreiben
      if (comand == 48) // comand auswerten ASCII 0
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)


      if (comand == 49) // comand auswerten ASCII 1
      digitalWrite(led, LOW);   // turn the LED off

  }
}

Nun habe ich aber das Problem das es selbst bei kurzer Tasterbetätigung den Befehl etliche male Sendet. Da grad ON AIR und OFF AIR über eine Taste geschaltet wird würde ich immer zw. ON und OFF wechseln bei einer betätigung.
Nun habe ich deshalb die Delays eingefügt, allerdings verzögert darurch auch die LED, und ich halte es so nicht für die beste Lösung. Zumal je nach Delaylänge es immernoch dazu kommen könnte das man sofort wieder OFF schaltet.

Gibt es hierzu eine galantere Lösung?

Grüssle
9  International / Deutsch / Re: Serial Communication Radiosoftware (mAirlist) on: January 10, 2013, 04:32:25 am
Erstmal danke fürs umherschubsen. Mein Ardu soll beides machen. Befehle an die Software senden, und die Software einen Status als rückmeldung an den Ardu.

Das mit der Quittung an den Arduino klappt ja soweit. Nur das senden an die softwatre noch nicht.
Wenn ich das jetzt richtig verstehe, dann muss die Statusabfrage getrennt von der Kommandogabe im Script stehen? Wie müsste denn dann das Script umgeschrieben werden, das empfang und senden getrennt voneinander laufen?

Eins noch, wäre der automatische Zeilenumbruch das gleiche Signal wie ein <CR>? Oder wie sende ich mit ON AIR dann noch einen <CR> mit Tastendruck? Weil das Programm braucht eben die Ausgeschriebenen Befehle mit nem <CR< dahinter. Warum auch immer er das so Programmiert hat...

Gruss
10  International / Deutsch / Serial Communication Radiosoftware (mAirlist) on: January 09, 2013, 04:52:49 pm
Hallo,
Ich klink mich hier mal ein, mein Thema passt denke ich bestens dazu. Ich möchte per serieller Kommunikation eine Radiosoftware (mAirlist) steuern, und von dieser Software Kommandos an den Arduino geben zum ansteuern von Statusleds.

Die LED Steuerung funktioniert soweit, nur Unterstützt die Radiosoftware per serieller Kommunikation nur Textbefehle wie z.B. ON AIR Der Programmierer gab mir den Tip :
"Jeder Befehl muss mit <CR> (ASCII 13) abgeschlossen sein."

So habe ich es bisher versucht, allerdings kommt bei Tastendruck nichts an der seriellen Konsole an(Der LEDPart funktioniert:

Code:
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int tasterpin = 8;
int tasterstatus;


void setup()

  Serial.begin(9600);
    // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

void loop()
{
  if (Serial.available()) // auf Daten am serielle-Port warten
  {
    byte comand = Serial.read(); // Daten Byte in die Variable comand schreiben
      if (comand == 48) // comand auswerten ASCII 0
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)


      if (comand == 49) // comand auswerten ASCII 1
      digitalWrite(led, LOW);   // turn the LED off
      {
tasterstatus = digitalRead(tasterpin);
if(tasterstatus == HIGH)
  Serial.print("ON AIR""");

}
  }

Wo liegt mein Fehler?
Pages: [1]