首页 文章

Android IR Manager不断变化 Value - Arduino

提问于
浏览
0

我正在研究Arduino,到目前为止,我已经制作了一个简单的电路,通过红外接收器(VS1838B)从遥控器获取一些值,并根据我按下的按键点亮RGB灯 .

在这一点上,我想混合我的知识,并制作一个简单的Android应用程序,能够做同样的事情,但我发现了一些问题 .

这是代码:

irManager = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);

    if(!irManager.hasIrEmitter())
        Toast.makeText(this, "Non hai l'emettitore IR", Toast.LENGTH_LONG).show();
    else
        Toast.makeText(this, "Hai l'emettitore IR", Toast.LENGTH_LONG).show();

    red.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendIR(new int[] {1,2,5,4,5,6,7,8,9,10,11,12,13,14});
        }
    });


}

public void sendIR(int[] message){
        irManager.transmit(38000, message);
}

1)首先,我不知道irManager.transmit()的第二个参数是什么 . 在Arduino中如果我记录IR接收器获得的所有消息,它将只打印出整数而不是整数数组,我不知道如何在int数组中转换int .

2)如果在Arduino中打开我的串口监视器并观察日志,每次单击“红色”按钮时,传递给IR接收的值都会发生变化,所以即使按下键也大部分时间rgb led不会亮 .

我怎样才能解决这个问题 ?

1 回答

  • 0

    查看本教程:

    http://devtrigger.blogspot.it/2014/05/android-infrared-ir-transmitter-code.html

    这部分应该足够了:

    package com.devtrigger.remotecontrol;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import android.annotation.TargetApi;
    import android.app.Activity;
    import android.content.Context;
    import android.hardware.ConsumerIrManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.util.SparseArray;
    import android.view.View;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        Object irdaService;
        Method irWrite;
        SparseArray<String> irData;
        TextView mFreqsText;
        ConsumerIrManager mCIR;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // Be sure to call the super class.
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            irData = new SparseArray<String>();
            irData.put(
                    R.id.buttonPower,
                    hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
            irData.put(
                    R.id.buttonChUp,
                    hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 003f 0015 003f 0015 0015 0015 0040 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
            irData.put(
                    R.id.buttonChDown,
                    hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 0015 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
    
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
    
                irInit4KitKat();
            }else{
                irInit4JellyBean();
            }
    
        }
    
        @TargetApi(Build.VERSION_CODES.KITKAT)
        public void irInit4KitKat() {
    
            // Get a reference to the ConsumerIrManager
            mCIR = (ConsumerIrManager)getSystemService(Context.CONSUMER_IR_SERVICE);
    
        }
    
        public void irInit4JellyBean() {
            irdaService = this.getSystemService("irda");
            Class c = irdaService.getClass();
            Class p[] = { String.class };
            try {
                irWrite = c.getMethod("write_irsend", p);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
    
        public void irSend(View view) {
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
    
                irSend4Kitkat(view);
            }else{
    
                irSend4JellyBean(view);
            }
        }
    
        @TargetApi(Build.VERSION_CODES.KITKAT)
        private void irSend4Kitkat(View view) {
    
    
            String data = irData.get(view.getId());
            if (data != null) {
                String values[] = data.split(",");
                int[] pattern = new int[values.length-1];
    
                for (int i=0; i<pattern.length; i++){
                    pattern[i] = Integer.parseInt(values[i+1]);
                }
    
                mCIR.transmit(Integer.parseInt(values[0]), pattern);
            }
        }
    
        private void irSend4JellyBean(View view) {
            String data = irData.get(view.getId());
            if (data != null) {
                try {
                    irWrite.invoke(irdaService, data);
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
    
        protected String hex2dec(String irData) {
            List<String> list = new ArrayList<String>(Arrays.asList(irData
                    .split(" ")));
            list.remove(0); // dummy
            int frequency = Integer.parseInt(list.remove(0), 16); // frequency
            list.remove(0); // seq1
            list.remove(0); // seq2
    
            for (int i = 0; i < list.size(); i++) {
                list.set(i, Integer.toString(Integer.parseInt(list.get(i), 16)));
            }
    
            frequency = (int) (1000000 / (frequency * 0.241246));
            list.add(0, Integer.toString(frequency));
    
            irData = "";
            for (String s : list) {
                irData += s + ",";
            }
            return irData;
        }
    }
    

相关问题