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
Ir Signal bei High
29.10.2015, 22:49
Beitrag #1
Ir Signal bei High
Hallo zusammen,

ich bin noch absoluter Anfägner was Arduino und Programmierung angeht Wink

Glaubt mir, ich hab mir schon die Finger wund gesucht im Internet, leider scheint es keinen Code zu geben der mein Projekt annähernd abbildet.

Mein Vorhaben ist, sobald ein Bewegungsmelder am Arduino auf High geht soll eine IR Diode ein Signal senden.
Der Bewegungsmelder geht narülich irgendwannn wieder auf Low, dann soll wieder ein Signal gesendet werden. Zwischenzeitlich soll der IR allerdings nichts senden.

Mein Code sieht momentan so aus, allerdings sendet der IR die ganze Zeit während der Bewegungsmelder auf High ist:



Code:
#include <IRremote.h>

IRsend irsend;

int led=5;
int bewegung=7;
int bewegungsstatus=0;

void setup()

{

pinMode(led, OUTPUT);
pinMode(bewegung, INPUT);

}

void loop()

{

bewegungsstatus=digitalRead(bewegung);

if (bewegungsstatus == HIGH)

{

digitalWrite(led, HIGH);

irsend.sendSony(0x68B92, 20);

}

else

{

digitalWrite(led, LOW);


irsend.sendSony(0x68B92, 20);
    delay(5000);

}

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.10.2015, 23:13 (Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2015 23:23 von Klaus(i).)
Beitrag #2
RE: Ir Signal bei High
Du musst dir im Code merken, wenn ein IR Signal gesendet wurde und dies abfragen.
Ich habs mal versucht (ohne Gewähr)

Gruß, Klaus
PHP-Code:
#include <IRremote.h>

IRsend irsend;

int led=5;
int bewegung=7;
int bewegungsstatus=0;
boolean habegesendetH false;
boolean habegesendetL true;

void setup()
{
pinMode(ledOUTPUT);
pinMode(bewegungINPUT);
}

void loop()
{

bewegungsstatus=digitalRead(bewegung);

if ((
bewegungsstatus == HIGH) && (habegesendetH == false))
  {
    
//nur senden, wenn Bewegungsmelder=HIGH und dies noch nicht gesendet wurde
    
digitalWrite(ledHIGH);
    
irsend.sendSony(0x68B9220);
    
//merken dass gesendet wurde
    
habegesendetH true;
    
// warten auf LOW-Signal
    
habegesendetL false;
  }
  else
  {
    
//nur bei Bewegungsmelder = LOW
    
if (habegesendetL == false)
    {
      
//nur wenn noch nicht gesendet wurde
      
digitalWrite(ledLOW);
      
irsend.sendSony(0x68B9220);
      
// warten auf HIGH-Signal
      
habegesendetH false;
      
//merken dass gesendet wurde
      
habegesendetL true;
      
//delay(5000); brauchen wir nicht
    
}
  } 
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 09:46 (Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2015 09:56 von gronph.)
Beitrag #3
RE: Ir Signal bei High
Hallo Klaus, vielen Dank für deine Hilfe!
Mit den Variablen zum speicher des "gesendet zustandes" klingt absolut logisch.
Irgendwas stimmt aber noch nicht mit dem Code von dir, jetzt blinkt die Status LED und die IR Diode sendet dauerhaft Wink

edit:

habs gefunde:

//nur bei Bewegungsmelder = LOW
if ((bewegungsstatus == LOW) && (habegesendetL == false))

so funktionierts Smile

Vielen Dank nochmal für deine Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 17:33
Beitrag #4
RE: Ir Signal bei High
Hat Spaß gemacht und was mich besonders freut, dass Du dich mit dem Code beschäftigt hast und selber einen Fehler gefunden hast (war keine Absicht, nur nachlässig Blush)

Gruß, Klaus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 20:51 (Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2015 20:52 von gronph.)
Beitrag #5
RE: Ir Signal bei High
Jetzt muß ich nochmal nerven,

ich versuche erfolglos irgendwie mit Millis eine Pause einzubauen, und zwar nachdem das erste mal " irsend.sendSony(0x68B92, 20);" gesendet wurde. Sollte jedoch während dieser Pause ein "bewegungsstatus == HIGH" auftreten soll der Millis Zähler wieder auf null gesetzt werden jedoch kein erneutes ir Signal gesendet werden.
Erst wenn der Zähler abgelaufen ist und während dieser Zeit kein "bewegungsstatus == HIGH" erkannt wurde soll das Programm normal weiterlaufen.

Ich stehe gerade total auf dem Schlauch wo und wie ich das genau einbaue...

Vielleicht könntest du mir da nochmal ein wenig helfen Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 21:36
Beitrag #6
RE: Ir Signal bei High
Ich guck mir das Morgen mal an. Habe gerade nicht die nötige Ruhe dazu.
Die Pause soll einmalig, nach dem ersten habegsendetH=true, kommen?
Gibt es da eine Erklärung dafür?

Gruß, Klaus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 12:07
Beitrag #7
PAUSE
Hallo,

ich habe mal versucht das einzubauen, wie ich es verstanden habe.
Ggf muss Du das umbauen.
Sollte dann auch nicht mehr so schwer sein (habe alles kommentiert)

Gruß, Klaus
PHP-Code:
#include <IRremote.h>

IRsend irsend;

int led=5;
int bewegung=7;
int bewegungsstatus=0;
boolean habegesendetH false;
boolean habegesendetL true;

//----- Variablen für Pause-----
unsigned long pauseDauer=5000;
unsigned long pauseStart;
unsigned Long pauseDauerAktuell//millis() - pauseStart
boolean pause=false;
boolean dasErsteMal=true;
//------------------------------

void setup()
{
pinMode(ledOUTPUT);
pinMode(bewegungINPUT);
}

void loop()
{

bewegungsstatus=digitalRead(bewegung);

if ((
bewegungsstatus == HIGH) && (habegesendetH == false))
  {
    if (
pause==true)
    {
      
// Startzeit der Pause zurücksetzen
      
pauseStart=millis();
    } 
    else
    {
      
//nur senden, wenn Bewegungsmelder=HIGH und dies noch nicht gesendet wurde
      
digitalWrite(ledHIGH);
      
irsend.sendSony(0x68B9220);
    }
    
//merken dass gesendet wurde
    
habegesendetH true;
    
// warten auf LOW-Signal
    
habegesendetL false;
  }
  else
  {
    
//nur bei Bewegungsmelder = LOW
    
if ((bewegungsstatus == LOW) && (habegesendetL == false))    {
      
//nur wenn noch nicht gesendet wurde
      
digitalWrite(ledLOW);
      
irsend.sendSony(0x68B9220);
      
// warten auf HIGH-Signal
      
habegesendetH false;
      
//merken dass gesendet wurde
      
habegesendetL true;
      
      
//----- ich nehme mal an die Pause soll hier beim ersten Mal losgehen -----
      
if (dasErsteMal==true)
      {
        
//Zeit merken
        
pauseStart=millis();
        
//Merker für Pause setzen
        
pause=true;
        
// das erste Mal ist nun vorbei
        
dasErsteMal=false;
      }
      
//------------------
    
}
  }
  
  
//----- Pauselänge überprüfen -----
  
pauseDauerAktuell millis() - pauseStart;
  if (
pauseDauerAktuell pauseDauer)
  {
    
//Schluss mit Pause!
    
pause false;
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 18:49 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2015 22:15 von gronph.)
Beitrag #8
RE: Ir Signal bei High
mensch klasse! Vielen Dank Klaus!

Werde ich dann gleich mal testen Smile

Hi nochmal, ich glaube ich habe es falsch erklärt.

Es geht um folgendes, Sobald der Bewegungsmelder ein Signal erkennt sendet der Arduino einen IR impuls. Sobald keine Bewegung mehr erkannt wurde wir wieder ein Impuls gesendet.
Das funktioniert perfekt mit dem ersten Code.
Nun ist es aber so das der zweite Code eben nicht sofort gesendet werden soll wenn kein Signal mehr erkannt wird, daher der Timer mit den millis.
Sollte während der Timer nach Erkenneung des ersten Signals läuft wieder ein Signal erkannt werden so soll der Timer wieder von vorne beginnen. erst wenn der Timer abgelaufen ist und kein Signal mehr erkannt wurde soll das zweite Signal gesendet werden.

Ich probiere schon die ganze Zeit, irgendwo hänge ich noch Wink naja, ich probier mal weiter Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PWM Signal imitieren Marc2014 5 187 15.10.2016 11:34
Letzter Beitrag: Binatone
  PWM-Signal Ben-g 9 836 21.04.2016 13:09
Letzter Beitrag: Ben-g
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 328 29.02.2016 00:00
Letzter Beitrag: hotsystems
  EMP setzt Input-PIN kurzzeitig auf HIGH holo 6 446 24.02.2016 19:25
Letzter Beitrag: Carlo
  433 Mhz Signal von Garagentor Fernbedieung einlesen Much 6 801 07.02.2016 10:45
Letzter Beitrag: Binatone
  DMX Signal mit Arduino empfangen, aber wie? mat21his 4 656 28.01.2016 16:20
Letzter Beitrag: ardu_arne
  OUTPUT bleibt HIGH und timer stopt nicht. Atwist 4 529 08.01.2016 11:02
Letzter Beitrag: Atwist
  PWM-Signal PC-Lüfter scritch 1 427 03.01.2016 21:23
Letzter Beitrag: Bitklopfer
  Anfängerhilfe: Piezo-Signal auslesen/kopieren Koregan 9 887 31.12.2015 08:40
Letzter Beitrag: Bitklopfer
  GPS Signal jeden Kilometer b3ta 8 909 26.10.2015 10:49
Letzter Beitrag: Scherheinz

Gehe zu:


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