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
Schleifen
27.10.2015, 21:33 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2015 23:08 von Sienog.)
Beitrag #1
Schleifen
Hallo Leute, ich habe ein Problem mit meiner Programmierung.
Folgendes habe ich vor. Ein TV Gerät soll im Schlafzimmer über dem Kleiderschrank aus Platzmangel montiert werden, beim einschalten soll dieser herausfahren und runterklappen. Der Motor soll beschleunigen und nach dem ausklappen verzögern und schließlich stehen bleiben.
Zum Einsatz kommen Scheibenwischermotor mit Übersetzung ein Arduino nano (Kopie), L298N Motortreiber und IR Receiver TSOP4838.

Beim Einschalten des TV bekommt der Arduino das SonyTV Power Signal, und es soll losgehen, beim ausschalten wieder zurück. Der IR Code funktioniert so ganz gut, auch die while-Schleife alleine funktioniert sehr gut.
Die Schleife im Case funktioniert so nicht, was mache ich falsch?


Code:
#include "IRremote.h"

IRrecv irrecv(7);        
decode_results results;        

void setup()
{
  irrecv.enableIRIn();
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop()
{
  if (irrecv.decode(&results))
  {
    translateIR();
    irrecv.resume();
  }
}
int i=0;
void translateIR()
{
  switch(results.value)
  {
  
  case 0xA90:     // Sony: "Power"
    while (i<255)
    {
       analogWrite(3, i);
       i=i+5;
       delay(50);
    }
    delay(3000);
    while (i>-1)
    {
       analogWrite(3, i);
       i=i-5;
       delay(50);
    }
    break;

  default:
    digitalWrite(5, HIGH);
    delay(100);
    digitalWrite(5, LOW);  
  
  }
  delay(500);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 00:02
Beitrag #2
RE: Schleifen
Hallo Sienog,

was ist Typ von results.value?

Als Byte wäre 0xA90 nie erfüllt. Ich habe gerade eine eigene Erfahrung gemacht, dass der Compiler erstaunlich tolerant ist.

Gruß GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 00:24 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2015 00:26 von Sienog.)
Beitrag #3
RE: Schleifen
(28.10.2015 00:02)GuaAck schrieb:  Hallo Sienog,

was ist Typ von results.value?

Als Byte wäre 0xA90 nie erfüllt. Ich habe gerade eine eigene Erfahrung gemacht, dass der Compiler erstaunlich tolerant ist.

Gruß GuaAck

Auf diese Frage habe ich keine Antwort. Dafür bin ich zu Anfänger was die Programmierung betrifft. Ich habe mir den Code aus Projekten und Beschreibungen zusammengebastelt.
Ob die Bedingung "in Byte" erfüllt wird, bin ich mir nicht mal bewusst. Kann nur sagen, dass ich einige Tasten der Fernbedienung Programmiert habe, die LED konnte ich dabei an und ausschalten.

Damit lese ich die Befehle der FB aus.
Code:
#include "IRremote.h"
IRrecv  irrecv(7);
decode_results results;

void setup ()  {
  
Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop () {
if (irrecv.decode(&results))  {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 09:33 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2015 09:36 von hotsystems.)
Beitrag #4
RE: Schleifen
Und ähnlich wie du es in dem letzten Sketch zum Auslesen der FB-Befehle machst, kannst du auch deinen Code debuggen.

Wenn du an den entsprechenden Stellen das "Serial.println(Variablen-Name);" einträgst, bekommst du als Ergebnis den Inhalt dieser Variable auf dem Serial-Monitor zu sehen.
So kannst du deinen Sketch Stück für Stück überprüfen und eventuelle Fehler finden. Dann erkennst du auch, wie der Code arbeitet und lernst aus fremden Code.

Und du solltest dir angewöhnen, deinen Code zu kommentieren, dann ist es für uns einfacher zu erkennen, was er machen soll. Für dich wird es ebenso einfacher die einzelnen Funktionen zu lernen.

Damit siehst du auch was aus "results.value" heraus kommt und kannst den richtigen Wert in "case xxxxx:" eintragen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 11:52
Beitrag #5
RE: Schleifen
Ich möchte erstmal danken für die Hilfsbereitschaft.

Problem ist, das analogWrite im case funktionslos bleibt, auch wenn im Serial.println der " i " Status einen wert zwischen 0 und 255 anzeigt.
Sprich, bei analogWrite(3, HIGH oder i); bleibt die LED dunkel, digitalWrite funktioniert, beim pin 5 und 6 das gleiche Problem beim nano.
Schätze das Case und PWM nicht unter einen Hut zu bekommen sind.

Wenn ich das bisher richtig verstanden habe, stoppt ja das " case " mit " break " nachdem die Bedingung erfüllt wurde, also wird eine schleife niemals möglich oder muss an eine andere stelle im Sketch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 13:31
Beitrag #6
RE: Schleifen
Hi,
Du redest da ziemlich wirres Zeug. Warum sollte "case" und "PWM" nicht unter einen Hut zu bringen sein? ...und warum sollte ein break nach einer while-Schleife irgend einen Einfluss auf die Schleife haben?
Am besten, Du postest mal das Coding mit dem digitalWrite sowie das Coding, bei dem Du i ausgibst. Außerdem auch vielleicht mal wie die LED genau angeschlossen ist.
Gruß,
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
28.10.2015, 13:35 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2015 13:41 von hotsystems.)
Beitrag #7
RE: Schleifen
Ich würde die "while-Schleife" durch eine "For-Schleife"
Code:
for (int i = 0; i < 255; a+5)
ersetzen.
Damit konnte ich schon oft Problem lösen.

@Thorsten
Das Coding ist doch im ersten Post zu sehen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 15:11
Beitrag #8
RE: Schleifen
(28.10.2015 13:35)hotsystems schrieb:  @Thorsten
Das Coding ist doch im ersten Post zu sehen.
Nein, das ist nicht das Coding mit dem digitalWrite, welches angeblich funktioniert und es ist auch nicht das Coding mit dem Serial.print, bei dem man den Wert von i sieht.

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 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  for- Schleifen Solarzelle? 12 1.164 28.02.2016 20:46
Letzter Beitrag: Solarzelle?
  Mehrere Schleifen parallel laufen lassen. Wie geht das?? Hendrik_Schutter 2 2.668 18.08.2014 11:19
Letzter Beitrag: Hendrik_Schutter

Gehe zu:


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