Infra távirányító élesztés

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Infra távirányító élesztés

Hozzászólás Szerző: bgachip »

Ez sem akar működni mint a ds1820.....

szóval ez is panelen van 2 smd leddel, világít mind a kettő.
sárga vcc-t mutatja
kék, vout-ot
felhúzó ellenállásnak 4,7 kohm-os ellenállást használok.

digital 11-es lábra bekötöttem a jelet.

feltöltés után, nyomom a távirányító be/ki kapcsoló gombját 0,5 cm-ről de semmi a soros porton. :(

https://learn.adafruit.com/ir-sensor/te ... -ir-sensor

Ez alapján kötöttem be, a felhúzó ellenállást 5v-ra húztam.

Kód: Egész kijelölése

/*
 * IRrecord: record and play back IR signals as a minimal 
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * An IR LED must be connected to the output PWM pin 3.
 * A button must be connected to the input BUTTON_PIN; this is the
 * send button.
 * A visible LED can be connected to STATUS_PIN to provide status.
 *
 * The logic is:
 * If the button is pressed, send the IR code.
 * If an IR code is received, record it.
 *
 * Version 0.11 September, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(BUTTON_PIN, INPUT);
  pinMode(STATUS_PIN, OUTPUT);
}

// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state

// Stores the code for later playback
// Most of this code is just logging
void storeCode(decode_results *results) {
  codeType = results->decode_type;
  int count = results->rawlen;
  if (codeType == UNKNOWN) {
    Serial.println("Received unknown code, saving as raw");
    codeLen = results->rawlen - 1;
    // To store raw codes:
    // Drop first value (gap)
    // Convert from ticks to microseconds
    // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      } 
      else {
        // Space
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
  }
  else {
    if (codeType == NEC) {
      Serial.print("Received NEC: ");
      if (results->value == REPEAT) {
        // Don't record a NEC repeat value as that's useless.
        Serial.println("repeat; ignoring.");
        return;
      }
    } 
    else if (codeType == SONY) {
      Serial.print("Received SONY: ");
    } 
    else if (codeType == RC5) {
      Serial.print("Received RC5: ");
    } 
    else if (codeType == RC6) {
      Serial.print("Received RC6: ");
    } 
    else {
      Serial.print("Unexpected codeType ");
      Serial.print(codeType, DEC);
      Serial.println("");
    }
    Serial.println(results->value, HEX);
    codeValue = results->value;
    codeLen = results->bits;
  }
}

void sendCode(int repeat) {
  if (codeType == NEC) {
    if (repeat) {
      irsend.sendNEC(REPEAT, codeLen);
      Serial.println("Sent NEC repeat");
    } 
    else {
      irsend.sendNEC(codeValue, codeLen);
      Serial.print("Sent NEC ");
      Serial.println(codeValue, HEX);
    }
  } 
  else if (codeType == SONY) {
    irsend.sendSony(codeValue, codeLen);
    Serial.print("Sent Sony ");
    Serial.println(codeValue, HEX);
  } 
  else if (codeType == RC5 || codeType == RC6) {
    if (!repeat) {
      // Flip the toggle bit for a new button press
      toggle = 1 - toggle;
    }
    // Put the toggle bit into the code to send
    codeValue = codeValue & ~(1 << (codeLen - 1));
    codeValue = codeValue | (toggle << (codeLen - 1));
    if (codeType == RC5) {
      Serial.print("Sent RC5 ");
      Serial.println(codeValue, HEX);
      irsend.sendRC5(codeValue, codeLen);
    } 
    else {
      irsend.sendRC6(codeValue, codeLen);
      Serial.print("Sent RC6 ");
      Serial.println(codeValue, HEX);
    }
  } 
  else if (codeType == UNKNOWN /* i.e. raw */) {
    // Assume 38 KHz
    irsend.sendRaw(rawCodes, codeLen, 38);
    Serial.println("Sent raw");
  }
}

int lastButtonState;

void loop() {
  // If button pressed, send the code.
  int buttonState = digitalRead(BUTTON_PIN);
  if (lastButtonState == HIGH && buttonState == LOW) {
    Serial.println("Released");
    irrecv.enableIRIn(); // Re-enable receiver
  }

  if (buttonState) {
    Serial.println("Pressed, sending");
    digitalWrite(STATUS_PIN, HIGH);
    sendCode(lastButtonState == buttonState);
    digitalWrite(STATUS_PIN, LOW);
    delay(50); // Wait a bit between retransmissions
  } 
  else if (irrecv.decode(&results)) {
    digitalWrite(STATUS_PIN, HIGH);
    storeCode(&results);
    irrecv.resume(); // resume receiver
    digitalWrite(STATUS_PIN, LOW);
  }
  lastButtonState = buttonState;
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: Robert »

Leiras:
http://www.righto.com/2009/08/multi-pro ... brary.html
Library:
https://github.com/shirriff/Arduino-IRremote

A mintak kozul az irrelay-t teszteltem.
int RECV_PIN = 3; //azaz melyik labra megy a vevo/szenzor.

Persze 0023 és 105 eltérő, és a kód egyes mintái hibával fordulnak:(
szbalazsx
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2014. május 17. szombat, 9:07

Re: Infra távirányító élesztés

Hozzászólás Szerző: szbalazsx »

üdvözlet!

Sárga öves arduinós vagyok, volt jó pár siker élményem.
Most nagyon elakadtam egy infra távvezérlő jeleit szeretném beolvasni arduinoval 1.5.6 programozó felületet használom.
ezt a komoly progit futtatom többek közt:


#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
delay(100);
}

HIBAKÉNT:
Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Uno"

C:\Program Files\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.


De vagy 9 féle hasonlót megpróbáltam kudarcok!

MI A MEGOLDÁS?
arduino 1.0 -val kéne programozni?

kéne egy váz, vagy helyesírás korrekció!!
egy példaprogram.
a 60 nap alatt könyvben sem találtam megoldást.
köszi!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: Robert »

Ha 60 napos tanfolyam, akkor nyomás vissza a 4. leckéhez:
"Béta szoftverre nem fejlesztünk!"

Azaz Arduino 1.5.6 verziót nagyon gyorsan el kell felejteni!
Arduino-1.0.5 vagy 1.0.6 ami stabil.
szbalazsx
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2014. május 17. szombat, 9:07

Re: Infra távirányító élesztés

Hozzászólás Szerző: szbalazsx »

Kedves Róbert!

teszteltem 1.0.6 on
tkd hiba mint a bétán
aztán 1.0.5 ott beleköt a függvény hívás utáni sorokba egyesével,
Ennek a felületnek a varázsa hogy el sem tudod küldeni a hibaüzeneteket.
uninstallátam a béta verziót
a legrégibb fut 1.0.5
tesztelek pár péda progiját, azok mennek.

IRrecv irrecv(RECV_PIN); ezeket az utasításokat nem definiált változónak nézte
decode_results results;

találtam valamit!
http://www.instructables.com/id/Arduino ... -tutorial/
nekem nem szerepel 1.0.5 ben a step 3 lépésnél a képet megnézed a fügvény liblaryban nincs benn az IR a GSM alatt!!!
Erősebben kell uninstallálnom a 1.5.8 béta verziót
fent felejti a függvényeit

http://www.instructables.com/id/Arduino ... -tutorial/
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: Robert »

Az Instructables tutorial hibás:
-az adatkimenet és a Vcc közé _kötelező_ a 3k3...4k7 felhúzóellenállás.
- a stabil vételhez hiányzik a 100nF/100R szűrőkör.

A library lehet a Program Files / Arduinoxxx alatt illetve az egyéni User Directory alatt is!
szbalazsx
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2014. május 17. szombat, 9:07

Re: Infra távirányító élesztés

Hozzászólás Szerző: szbalazsx »

totál kommanderrel levadásztam userben lévő librarye-kat de ott már csak egy txt találtam.

A infravevővel nincs hiba, mert csak a pipás ellenőrzést választom és jön a hibakód a saját példaprogram is .

1.0.6 felületen
/* 08 Remote Control

If you connect a IR receiver to the robot,
you can control it like a RC car.
Using the remote control comes with sensor
pack, You can make the robot move around
without even touching it!

Circuit:
* Arduino Robot
* Connect the IRreceiver to D2
* Remote control from Robot sensor pack

based on the IRremote library
by Ken Shirriff
http://arcfn.com

created 1 May 2013
by X. Yang
modified 12 May 2013
by D. Cuartielles

This example is in the public domain
*/

// include the necessary libraries
#include <IRremote.h>
#include <IRremoteTools.h>
#include <ArduinoRobot.h>
#include <Wire.h>
#include <SPI.h>

// Define a few commands from your remote control
#define IR_CODE_FORWARD 284154405
#define IR_CODE_BACKWARDS 284113605
#define IR_CODE_TURN_LEFT 284129925
#define IR_CODE_TURN_RIGHT 284127885
#define IR_CODE_CONTINUE -1

boolean isActing=false; //If the robot is executing command from remote
long timer;
const long TIME_OUT=150;

void setup() {
// initialize the Robot, SD card, display, and speaker
Serial.begin(9600);
Robot.begin();
Robot.beginTFT();
Robot.beginSD();

// print some text to the screen
beginIRremote(); // Start the receiver
}

void loop() {
// if there is an IR command, process it
if (IRrecived()) {
processResult();
resumeIRremote(); // resume receiver
}

//If the robot does not receive any command, stop it
if(isActing && (millis()-timer>=TIME_OUT)){
Robot.motorsStop();
isActing=false;
}
}
void processResult() {
unsigned long res = getIRresult();
switch(res){
case IR_CODE_FORWARD:
changeAction(1,1); //Move the robot forward
break;
case IR_CODE_BACKWARDS:
changeAction(-1,-1); //Move the robot backwards
break;
case IR_CODE_TURN_LEFT:
changeAction(-0.5,0.5); //Turn the robot left
break;
case IR_CODE_TURN_RIGHT:
changeAction(0.5,-0.5); //Turn the robot Right
break;
case IR_CODE_CONTINUE:
timer=millis(); //Continue the last action, reset timer
break;
}
}
void changeAction(float directionLeft, float directionRight){
Robot.motorsWrite(255*directionLeft, 255*directionRight);
timer=millis();
isActing=true;
}



This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
C:\Program Files\Arduino\libraries\RobotIRremote\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope

hibát írja

el tudnál küldeni ebből egy jó példányt
IRremoteTools.cpp

szbalazs@gmail.com
címre

ez tkd szimpatikusabb hiba, mint amikor minden utasítást változónak nézett
Tegnap belefutottam egy angol fórumba ahol ugyanezzel véreztek, de nem lett megoldás.
2 év assembly PIC-ezés után nagyon tetszik az arduino nyelv
Sőt Turbo Pasclaban régen voltak UNIT ok az egér kezelésére, stb szerethetőek voltak.
köszönöm az eddigi gyors válaszokat. :D
szbalazsx
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2014. május 17. szombat, 9:07

Re: Infra távirányító élesztés

Hozzászólás Szerző: szbalazsx »

megtaláltam a linket

http://www.instructables.com/id/Arduino ... -tutorial/

Nézd meg a link alján a hozzászólásokat a tkd hibán véreznek a külföldi kolegák!
Avatar
Bishop
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2010. november 3. szerda, 6:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: Bishop »

Üdvözletem az Uraknak!

Amennyiben nincs helye itt ilyen kéréseknek, megkérem a webmestert hogy törölje.
Hozzá nem értőként a következő kérdéssel fordulnék hozzátok.
Akad-e olyan felhasználója az oldalnak aki nem anyagi fizetség fejében elkészítene nekem egy programot.
A következőről volna szó:
Készítettem arduino nano-val és egy L298D ic-vel egy két irányú pwm motorvezérlést, ami egy poti értékét beolvasva vezérli a motort.
Ezt szeretném bővíteni egy infra távvezérlővel amit ebay-ről vásároltam.
Itt tartok a programmal:

Kód: Egész kijelölése

int portaH1 = 9;
int portaH2 = 10;
int potpin = 0;  
int val; 
int val1; 
int val2;
const int ledPin =  13;      
int ledState = LOW;             
unsigned long previousMillis = 0;       
const long interval = 1000;          

void setup() 
{ 
  Serial.begin(9600); 
  pinMode(ledPin, OUTPUT);
} 
 
void loop() 
{ 
  val = analogRead(potpin);            
  val1 = map(val, 0, 519, 255, 0);     
  val2 = map(val, 520, 1023, 0, 255);
  if (val > 520) val1 = 0;
  else val2 = 0;
  analogWrite(portaH1, val1);
  analogWrite(portaH2, val2);  
  
  {
  
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
  
    previousMillis = currentMillis;   

 
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    
    digitalWrite(ledPin, ledState);
  }
  Serial.println(val, DEC);
  delay(1000); 
}
}
Azt szeretném hogy a távvezérlő egyes gombját lenyomva egyik irányban forogjon, a jobbra balra nyilakkal állítható sebességgel, kettes gomb ugyan ez a másik irányba, a 3as és 4es gombokra pedig megintcsak a két irány fix 50%os kitöltéssel, esetleg még az 5ösön egy irányban és sebességben véletlenszerű de ez nem feltétlen szükséges.
Fizetségként egy nagy halom, zsír új a témába vágó alkatrészt tudok felkínálni, többek közt 20db attiny15, oscillátorok, atmega168, atmega48, 8db d2pac mosfet, etc...

Köszönöm hogy elolvastatok.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
furbyhun
DrótVégénSzéndarab
Hozzászólások: 44
Csatlakozott: 2015. február 14. szombat, 21:18

Re: Infra távirányító élesztés

Hozzászólás Szerző: furbyhun »

Sziasztok!

Nekem sikeresen feléledt a távirányító, de a következő problémába botlottam:

Amikor lenyomok egy gombot, akkor az első bejövő kód az értékes jel, a következők 0xFFFFFF-ek, ez jelzi, hogy az előzőleg lenyomott gombot lenyomva tartjuk. Azonban nem mindig az első kód érzékelésekor "tart ott" a programom, ahol a bejövő kód érzékelése történik, emiatt rengetegszer nem érzékeli a távirányítón történt gomblenyomást a rendszer.

A kódom eleje a következő (minden, a távirányító által használt változó az IRRemote library példaprogramjainak megfelelő, a többi változó egy GPS-vezérelt digitális óra funkcióit állítgatja, de igazából mindegy, h mi van az ifek then-ágainak belsejében...)

void loop() {
if (irrecv.decode(&results)) //read the IR receiver
{
if (results.value == 0xFD708F) // >>| button pushed on remote
{
HOUR_OFFSET++;// hour offset incremented
if (HOUR_OFFSET > 12)
{
HOUR_OFFSET = 12;
}
}
if (results.value == 0xFDB04F) // |<< button pushed on remote
{
HOUR_OFFSET--; // hour offset decremented
if (HOUR_OFFSET < -12)
{
HOUR_OFFSET = -12;
}
}
irrecv.resume(); // Receive the next value from IR
}

és itt folytatódik a loop eljárás, meglehetősen időigényes részekkel, dátum, idő megjelenítése, stb...

Megszakítással megoldásra jutnék szerintetek? De mit kezeljek? Jelváltozást?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: kapu48 »

Ilyen Bután feltett kérdést!

(Feló srácok! Hibás a programom! De nem mutatom ám meg, a hibás részét! Javitsátok ki nekem!) ???
:mrgreen:

És van ám beillesztési lehetőség ís!
Avatar
furbyhun
DrótVégénSzéndarab
Hozzászólások: 44
Csatlakozott: 2015. február 14. szombat, 21:18

Re: Infra távirányító élesztés

Hozzászólás Szerző: furbyhun »

A jóindulatod megkérdőjelezhetetlen... de mikor a program többi része nem lényeges a probléma szempontjából, akkor minek rakjam ide? Az elv rossz, nem a program: mikor épp máshol dolgozik, nem tárolja el a távirányító által elküldött első kódot. Tudom a rossz működés okát, és véleményt kértem a lehetséges megoldásról, lásd utolsó mondat, tehát nem kijavítást. Azt majd én megírom, hisz pont ez a lényeg, a sikerélmény a programozás során! :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: kapu48 »

Avatar
furbyhun
DrótVégénSzéndarab
Hozzászólások: 44
Csatlakozott: 2015. február 14. szombat, 21:18

Re: Infra távirányító élesztés

Hozzászólás Szerző: furbyhun »

Mennyivel egyszerűbb és emberibb lett volna ennyit írnod: "Igen, interrupttal tudod megoldani, és igen, a jelváltozást kell figyelned." De azért kösz. :P
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Infra távirányító élesztés

Hozzászólás Szerző: kapu48 »

Én ilyet nem irtam!

Megoldható még 100 féleképen.

Példáúl kiszeded a várakozásokat, és megoldod több szálon.
Ami megadot idöközönként meghivja az infra rutint.
Válasz küldése