从零开始打造一个GOTO系统(2)
本帖最后由 open 于 2016-3-12 12:00 编辑前言:学习进度很慢哦。所以学到哪写到哪了。前面一篇写了如果在stellarium在模拟赤道仪所在位置。接下来是让stellarium控制赤道仪指向目标了。 首先要理解stellarium接下来所发送的命令。这里同样复制论坛中的资料。
当在stellarium 中按下 crtl+1 或者slew , 则向下位机发送
#:Q#:Sr 04:06:12# 发送目标RA值
回复1,则再发送 回复1 ,表示ok
# :Sd +76:24:55# 发送目标DEC值
回复1,则在发送 回复1 ,表示ok
MS# MS# 命令发送就是告诉下位机,你可以move了 ,应该这是叫 move scope 接下来就是要处理stellarium所发送的命令了。代码如下。延续上一篇的的代码略为修改。
#include <stdlib.h>
char input; //用作接收Stellarium发送的命令
char txRA; //用作返回RA给Stellarium
char txDEC; //用作返回DEC给Stellarium
long RAtel, DECtel; //用作记录赤道仪RA DEC
long RAtarget, DECtarget; //有作接收Stellarium发送来的 RA DEC 值
long raHH, raMM, raSS; //RA
char SIGNtel; // DEC: 43 = + 45 = -
long decDEG, decMM, decSS; // DEC
void setup() {
Serial.begin(9600); //端口波特比
RAtarget = RAtel = 9110; //初始化赤道仪RA值在Stellarium上标识 以秒计算 北极星RA 02:31:50# 2*3600+31*60+50
DECtarget = DECtel = 321351; //初始化赤道仪DEC值在Stellarium上标识 以秒计算 北极星DEC +89*15:51# 89*3600+15*60+51
}
void loop() {
if(Serial.available()>0){
RecvCommand(); //接收Stellarium命令
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
void RecvCommand(){
int i=0;
input = Serial.read();
delay(5);
while((input = Serial.read()) != '#'){
delay(5);
}
input='\0';
if(input==':' && input=='G' && input=='R' && input=='#'){ //命令 #:GR# stellarium询问现在望远镜指向的RA值
transmitRA(); //发送赤道仪AR值给stellarium
}
if(input==':' && input=='G' && input=='D' && input=='#'){ //命令#:GD# stellarium询问现在望远镜指向的DEC值
transmitDEC(); //发送赤道仪DEC值给stellarium
}
//if(input==':' && input=='Q' && input=='#'){ //命令 #:Q# stellarium 要求赤道仪停止运行??????先注释掉不用
//
// }
if(input==':' && input=='S' && input=='r'){ //#:Q#:Sr 04:06:12#stellarium发送目标RA值命令
getRA(); //取得stellarium发送目标RA值
}
if(input==':' && input=='S' && input=='d'){ //# :Sd +76:24:55# stellarium发送目标DEC值命令
getDEC(); //取得stellarium发送目标DEC值
}
if(input==':' && input=='M' && input=='S' && input=='#'){ //:MS# 当 stellarium 发送完 目标 RA DEC 后 告诉赤道仪可以移动了.
Serial.print("0"); //回复stellarium 0 表示结束
RAtel = RAtarget; //更新赤道仪的RA值为目标RA值
DECtel = DECtarget; //更新赤道仪的DEC值为目标DEC值
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
void transmitRA(){ // 发送赤道仪AR值给stellarium
raHH = RAtel/3600;
raMM = (RAtel-raHH*3600)/60;
raSS = (RAtel-raHH*3600)-raMM*60;
sprintf(txRA, "%02d:%02d:%02d#", int(raHH), int(raMM), int(raSS));
Serial.print(txRA);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
void transmitDEC(){ // 发送赤道仪DEC值给stellarium
(DECtel < 0) ? SIGNtel = 45: SIGNtel = 43; // DEC值 有 正 负 之分在ansi码中 43是 +45是 - 如 +76:24:55#-76:24:55#
decDEG = abs(DECtel)/3600;
decMM = (abs(DECtel) - decDEG*3600)/60;
decSS = (abs(DECtel) - decDEG*3600) - decMM*60;
sprintf(txDEC, "%c%02d%c%02d:%02d#", SIGNtel, int(decDEG), 42, int(decMM), int(decSS));
Serial.print(txDEC);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
void getRA(){ //取得stellarium发送过来的RA值 格式是 :Sr HH:MM:SS#
Serial.print("1"); //回复stellarium 1 表示OK 让stellarium 继续发送DEC
RAtarget = (atol(input+4))*3600 + (atol(input+7))*60 + atol(input+10); //保存
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
void getDEC(){ //取得stellarium发送过来的DEC值 格式是 :Sd +DD*MM:SS#
Serial.print("1"); //回复stellarium 1 表示OK 让stellarium 继续
DECtarget = (atol(input+5))*3600 + (atol(input+8))*60 + atol(input+11);
if (input == '-'){ //判断是不是 -
DECtarget *=(-1); //如果是 把值改为负值
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------- 当在stellarium 中按下 crtl+1 或者slew 赤道仪会移动到指定目标。效果如下(不懂发视频,上个视频连接吧):
http://v.youku.com/v_show/id_XMTQ5NzMxNDE4MA==.html 楼主厉害! 厉害,到现在我连个步进电机都没搞定{:5_302:} 火星蒙面侠 发表于 2016-3-12 16:59
厉害,到现在我连个步进电机都没搞定
至今我也不懂怎么整步进电机。我还没有买步进电机
open 发表于 2016-3-14 11:37
至今我也不懂怎么整步进电机。我还没有买步进电机
我做过一个脱离电脑的GOTO,你可以搜索我的帖子。。硬件我会,有空可以多交流哈。。至于这个操作这个stellarium软件,结合起来应该是非常简单的。。。
这个不错 天籁 发表于 2016-4-3 17:20
我做过一个脱离电脑的GOTO,你可以搜索我的帖子。。硬件我会,有空可以多交流哈。。至于这个操作这个stel ...
请教老兄,你做的星图是用什么投影系的?点击拾取是怎么逆变换的?我现在做的星图是正投影,点击拾取老出问题,准确率很低。
xiaoguilink 发表于 2016-4-3 20:24
请教老兄,你做的星图是用什么投影系的?点击拾取是怎么逆变换的?我现在做的星图是正投影,点击拾取老出 ...
极射赤平投影,stellarium就是用这个投影。点击拾取是搜索显示坐标中靠触点最近的那个星。
天籁 发表于 2016-4-20 12:35
极射赤平投影,stellarium就是用这个投影。点击拾取是搜索显示坐标中靠触点最近的那个星。
...
能否告知具体算法,该投影的变换矩阵一直查不到,自己也不会算,拾取的逆变换也是方便的话留个QQ,有偿。
页:
[1]