5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 5464|回复: 29
打印 上一主题 下一主题

机器人遥控器探讨(27楼PS2的引出脚接法、电视红外遥控,PS2无线手柄)

[复制链接]
跳转到指定楼层
楼主
发表于 2010-11-26 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望更多的工程师 技术人员出现给我们解决技术问题

[ 本帖最后由 xqi2 于 2011-1-28 13:27 编辑 ]

欢迎继续阅读楼主其他信息

沙发
发表于 2010-11-26 13:16 | 只看该作者
电视线外遥控是32位的二进制编码组成。有开始+识别码+操作码+结束码组成。
3
 楼主| 发表于 2010-11-26 13:17 | 只看该作者
PS2的无线套装 从没用过所以我不会 呵呵
其实机器人控制最好的东西还是PS2遥控板,我不知道PS2手柄根接受用的是什么东西
成本最低的当然是电视红外
4
 楼主| 发表于 2010-11-26 13:19 | 只看该作者
你的电视遥控器是直接拿来就用 还是查了 大量的资料 然后才来解码的
我是先差了大量的资料 基本上搞懂了才来解码的
5
发表于 2010-11-26 13:19 | 只看该作者
PS2是2。4G的信号,买一个无线PS2基本就可以了。不过他只能一个按键一个信号。就算是下面那两个遥杆的操作标,也就四个方向四个信号,无法做到遥杆推多推少有不同的信号输出。
6
发表于 2010-11-26 13:21 | 只看该作者
我是用一个红外接收模块来接收遥控发出的32位编码。然后再用发射模块来发射这组编码。问题是发射的时间间隔,高低电平持续时间长短。
7
 楼主| 发表于 2010-11-26 13:23 | 只看该作者
针对PS2的这个问题那就用按住按钮 用时间检测的方式来控制
我的红外已经解决了点动 跟按住的问题了,就是检测以后是不是一直都还有信号,有信号就接着来,没信号就不动

[ 本帖最后由 xqi2 于 2010-11-26 13:29 编辑 ]
8
发表于 2010-11-26 13:26 | 只看该作者
不,你没听明白我的意思。我发射的红外信号。我的红外接收模块可以接收和编码。而电视不行。同样的一组编码。
9
 楼主| 发表于 2010-11-26 13:27 | 只看该作者

回复 6楼 px601 的帖子

你还要做转发码??
我暂时只有一个东西 只做到了接受,没做过转发,基本上是100%  红外更深入的问题 可以晚上来探讨,你也可以传给我你的红外芯片的资料  我也是家里的电脑才有红外的程序, 我很久没写红外了  都是直接拿来用了  很多需要重新回忆
10
 楼主| 发表于 2010-11-26 13:30 | 只看该作者

回复 8楼 px601 的帖子

你想控制机器人 然后用机器人控制电视???
都玩到这一步了啊???
11
 楼主| 发表于 2010-11-26 13:38 | 只看该作者

回复 8楼 px601 的帖子

你又是何种职业?  如果单从 底层控制 我根本就不如你们 很多问题 我也解决不了
我是机械的自己来  其他的学习, 不行的二次开发
12
发表于 2010-11-26 13:51 | 只看该作者
我也是爱好者。我做的另一种机器人想要实现这个功能。简单说我就是想让单片机代替电视遥控。
13
发表于 2010-11-26 13:52 | 只看该作者
你的意思是你是用电视遥控控制你的机器人。你只是接收电视遥控的信号。我是不但要接收,还要能发射他的信号。
14
 楼主| 发表于 2010-11-26 16:02 | 只看该作者
既然你电视接收不了 那么说明你的转发的信号肯定跟遥控器所发射的信号是不同的
我觉得你红外遥控并没有完全的解码 只能是大概的满足你的接收 尤其是波与波之间的脉冲时间,解码的程式由你定,你只需要大概解码就能接收 而并不能改变电视里面的东西  所以你的解码程序必然有问题  并不是很好
15
发表于 2010-11-26 16:45 | 只看该作者
我觉的不是我的解码有问题。应该是我发射的编码的高低电平时间长短有问题。我把长虹电视遥控用红外接收后,知道了编码,再发送就不行。我改了高低电平的时间,就可以了。
16
 楼主| 发表于 2010-11-26 17:19 | 只看该作者
那你到底是解决了 还是没有解决??
我真是理解不了了
还有我想问问你  你的PS2的遥控器的接收端  接的是单片机的什么端??
TTL吗  是在没有用过所以我不知道
17
 楼主| 发表于 2010-11-26 17:20 | 只看该作者
在这里 我希望我们以后用的遥控器 尽量也是通用件,用PS2的 或者是红外的 都可以用一个通用的红外,如果有哪位大哥把PS2的或者红外的解决了,希望也能够开源,提供源码,买指定的遥控器就可以直接用了  是在是没有必要做重复劳动,而且是大量的重复劳动
18
发表于 2010-11-27 10:53 | 只看该作者
int clock = 2;
int ATT = 3;
int RX = 4;
int TX = 5;
int ACK = 6;
char TMP;
void setup () {
Serial.begin(19200);
pinMode(clock,OUTPUT);
pinMode(ATT,OUTPUT);
pinMode(RX,INPUT);
pinMode(TX,OUTPUT);
pinMode(ACK,INPUT);
}

unsigned char psx_data(unsigned char out_byte); /*  This is an example of a forward declaration or "prototype" */
void lcdDisplay(unsigned char); /* Also note your parameters don't have to match names... you only need the types and commas, FYI the moar yuo know */

void loop() {
          unsigned char data_1;
          unsigned char data_2;
        digitalWrite(ATT, LOW); // lower ATT

        psx_data(0x01); // send a start command to the psx controller
        unsigned char type = psx_data(0x42); // send a data request to psx controller + get controller type

        psx_data(0x00); // get 'here comes data' code

        data_1 = psx_data(0x00); // get controller data byte 1
        data_2 = psx_data(0x00); // get controller data byte 2

        digitalWrite(ATT, HIGH); // raise ATT

          lcdDisplay(type);
}

unsigned char psx_data(unsigned char out_byte)
{
        unsigned char in_byte; // data received from PSX controller
        unsigned char mask_byte;
        unsigned char bit_counter;

        mask_byte = 1;
        in_byte = 0;

        // for each bit in the transmitted byte
        for (bit_counter = 0; bit_counter < 8; bit_counter++)
        {
                // CLK low
                digitalWrite(clock,LOW);

                // set up CMD line (data out to controller)
                if (out_byte & mask_byte) digitalWrite(TX,HIGH);
                else digitalWrite(TX,LOW);

                // shift the mask bit for the next comparison
                mask_byte <<= 1;

                    delay(1);
                // CLK high
                digitalWrite(TX,HIGH);

                // load the current controller data bit on the bus into our return byte
                if (digitalRead(RX) == 1) in_byte |= 0x80;
                // and right-shift to line up the next bit (last bit has final value, no need to shift)
                if (bit_counter < 7) in_byte >>= 1;
                    delay(1);
        }
        return in_byte;
}

//talks to my matrix orbital LCD display
void lcdDisplay (unsigned char x) {
         Serial.print(254,BYTE);
         Serial.print("X");
         Serial.print("Sample: ");
         Serial.print(x, DEC);
}
http://www.arduino.cc/playground/Main/AnalogPSXLibrary

[ 本帖最后由 px601 于 2010-11-27 10:55 编辑 ]
19
发表于 2010-11-27 10:54 | 只看该作者
我的红外遥控没有解决,我只能遥控成功一种电视。
20
发表于 2010-11-27 10:58 | 只看该作者
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表