boxtec Forum

Microcontroller => Arduino General => : palmerx April 22, 2013, 08:49:49 AM

: Serial Read --- Vergeichen
: palmerx April 22, 2013, 08:49:49 AM
Hallo zusammen



Kann mir jemand sagen wie ich nach einem String in der serial Ebene suchen kann?

z.B: sobald "hallo" als input (serialread) kommt möchte ich "velo" schreien (serialwrite)


Besten Dank für eure Hilfe!


Marc
: Re: Serial Read --- Vergeichen
: palmerx April 22, 2013, 08:32:12 PM
Wenn der IR RAW Code im Serial Monitor erscheint



unsigned int ir_input_signal_1[80] = {4550,4300,650,1600,650,1550,600,1600,650,450,650,450,650,450,650,450,700,450,650,1550,600,1600,650,1550,650,450,650,450,650,500,650,450,650,450,600,500,650,1550,650,450,650,450,650,450,650,450,700,450,650,450,650,1550,650,450,650,1550,650,1550,650,1600,650,1550,650,1550,650,1550,650};




soll mir nach delay(100);

dieser IR RAW Code gesendet werden:




unsigned int ir_output_signal_1[80] = {2450,500,1300,450,700,500,1250,500,700,500,1250,500,700,500,650,550,700,450,1300,500,700,450,1300,500,1250,500,1250,550,650,500,700,500,1300,450,700,500,650,500,1300,500,650};

: Re: Serial Read --- Vergeichen
: Nukular April 23, 2013, 06:44:21 AM
Den "Serial Monitor" würde ich gar nicht benutzen.

Du kannst ja den String einlesen (Buchstabenkette bis Enter gedrückt wird)
und mit einem anderen String vergleichen.

Z.B.:
:
  if (sscanf(String, "Hallo") == true)     
    {
       Serial.println("velo");
    }

Den IR RAW Code kannst du ja auch vergleichen, aber ginge das nicht auch kürzer ?

:
if ( (ir_input_signal_1[0] ==4550 ) &
         (ir_input_signal_1[1] ==4300 ) &
         (ir_input_signal_1[2] ==650)  )  //und so weiter ev. in einer Schleife
    {
     delay(100);
     //Sende IR Signal
    }
Das funktioniert, aber fühlt sich viel zu aufwendig an.

Was möchtest du denn machen ?
: Re: Serial Read --- Vergeichen
: palmerx April 23, 2013, 08:55:06 AM
Ich möchte einen IR Übersetzter / Translator bauen, dh.wenn ich möchte zb den ein/aus Befehl einer Sony FB in den Mute Befehl eines Samsung TVs wandeln.

Ich möchte es auf RAW machen da dies immer funktioniert selbst wenn ich ein unknown encoding habe.
: Re: Serial Read --- Vergeichen
: palmerx April 23, 2013, 03:45:50 PM
Habe es heute noch so Versucht, aber wieder nix....:-(






/*IR Translator
 *
 *
 *
 *
 *
 *
 *Org Code eingelesen im Arduino: Sony ON Button
 *
 *
 * F4BA2988
 * Unknown encoding: F4BA2988 (32 bits)
 * Raw (68): 5372 4550 -4300 650 -1600 650 -1550 600 -1600 650 -450 650 -450 650 -450 650 -450 700 -450 650 -1550 600 -1600 650 -1550 650 -450 650 -450 650 -500 650 -450 650 -450 600 -500 650 -1550 650 -450 650 -450 650 -450 650 -450 700 -450 650 -450 650 -1550 650 -450 650 -1550 650 -1550 650 -1600 650 -1550 650 -1550 650 -1550 650
 *
 *
 *
 */

#include <IRremote.h>

IRsend irsend;


unsigned int samsung_on[200] = {4550,4300,650,1600,650,1550,600,1600,650,450,650,450,650,450,650,450,700,450,650,1550,600,1600,650,1550,650,450,650,450,650,500,650,450,650,450,600,500,650,1550,650,450,650,450,650,450,650,450,700,450,650,450,650,1550,650,450,650,1550,650,1550,650,1600,650,1550,650,1550,650,1550,650};






void setup()

{
  Serial.begin(9600);
}

void loop()


{   
    if (sscanf() == F4BA2988)   // Sony On Button   
    {
        irsend.sendRaw(samsung_on, 80, 38);   //zb:Samsung ON
    }
}
: Re: Serial Read --- Vergeichen
: palmerx April 24, 2013, 09:24:35 PM
Also ich hab mich jetz eines anderen Projekts bedient und es etwas modifiziert, geht hervorragend:



#include <IRremote.h>
IRsend irsend;
IRrecv irrecv(11); // Receive on pin 11
decode_results results;


unsigned int samsung_vol[200] = {4500,4400,600,1600,600,1600,600,1600,650,450,650,450,650,450,650,500,600,500,600,1600,600,1600,650,1550,650,450,650,500,600,500,600,500,600,500,600,1600,650,1550,650,1550,650,500,600,500,600,500,600,500,600,500,650,450,650,450,650,450,650,1600,600,1600,600,1600,650,1550,650,1550,650};











void setup()
{
  irrecv.enableIRIn(); // Start the receiver

}
String last;





void loop() {
  if (irrecv.decode(&results)) {
    switch (results.value) {
        case 0xA90:
            // plus
            irsend.sendRaw(samsung_vol, 80, 38);
            last="plus";
            irrecv.enableIRIn();
            break;
        case 1:
              // minus
            irsend.sendRaw(samsung_vol, 80, 38);
              last="minus";
              irrecv.enableIRIn();
              break;
        case 0x2340B922:
              // on/off
              irsend.sendNEC(0x400501FE, 32);
              irrecv.enableIRIn();
              break;
        default:
              // statements
              if(last.equals("plus")){
                irsend.sendNEC(0x400555AA, 32);
                last="";
                irrecv.enableIRIn();
              }
              else if(last.equals("minus")){
                irsend.sendNEC(0x400556A9, 32);
                last="";
                irrecv.enableIRIn();
              }     
    }
    irrecv.resume(); // Continue receiving
  }