k3ng / k3ng_rotator_controller Goto Github PK
View Code? Open in Web Editor NEWK3NG Arduino Amateur Radio Rotator Controller
Home Page: http://blog.radioartisan.com/yaesu-rotator-computer-serial-interface/
License: GNU General Public License v3.0
K3NG Arduino Amateur Radio Rotator Controller
Home Page: http://blog.radioartisan.com/yaesu-rotator-computer-serial-interface/
License: GNU General Public License v3.0
HI K3NG
I have some problems:
I am using LSM303, the elevation angle is around the X-axis, and the azimuth is in the X direction (if it is in the same direction on the Y-axis).
The rotator is placed north, with a range of 360 degrees
Rotator > preset angle, preset angle > 180 degrees, it can run ccw
Rotator > preset angle, preset angle <180 degrees, only run cw, but this is an impossible task, it can not cross the 360 degree line.
If the rotator is placed south, the rotation range is 360 degrees.
I also have problems with crossing the 180 degree line.Once it is less than 180 degrees ,it can't run ccw.
The azimuth of the rotator in the 0-180 degree interval cannot be locked, but the azimuth can be normally locked in the 180-360 degree interval.
I don't know these problems with the code or with my settings. Would I get your help?
GL 73 TU!
Replace the current master/slave terminology with local and remote units. Implement all of the current master/slave commands as backslash commands and add new ones so that the remote unit can act autonomously. This would mean that the remote could do slow start, slow down, etc. and drive stepper motors as master to slave control of remote pins is not fast enough to do these functions.
Also, the remote should shutdown any rotation actions if it loses contact with the local unit for more than X seconds.
Proposed Local / Remote Commands:
\AZ - query AZ
\EL - query EL
\AS - AZ status
\ES - EL Status
\PG - Ping
\GA - go to AZ
\GE - go to EL
\RL - rotate left
\RR - rotate right
\RU - elevate up
\RD - elevate down
\SA - stop azimuth rotation
\SE - stop elevation rotation
\SS - stop all rotation
\DOxx - digital pin initialize as output; xx = pin # (01, 02, A0,etc.)
\DIxx - digital pin initialize as input; xx = pin #
\DPxx - digital pin initialize as input with pullup; xx = pin #
\DRxx - digital pin read; xx = pin #
\DLxx - digital pin write low; xx = pin #
\DHxx - digital pin write high; xx = pin #
\DTxxyyyy - digital pin tone output; xx = pin #, yyyy = frequency
\NTxx - no tone; xx = pin #
\ARxx - analog pin read; xx = pin #
\AWxxyyy - analog pin write; xx = pin #, yyy = value to write (0 - 255)
\SWxy - serial write byte; x = serial port # (0, 1, 2, 3), y = byte to write
\SDx - deactivate serial read event; x = port #
\SSxyyyyyy... - serial write sting; x = port #, yyyy = string of characters to send (variable length)
\SAx - activate serial read event; x = port #
\RB - reboot
\CL - read the clock
Have the unit take readings from an analog pin, perform math on the value, and have it display on the LCD with a label and units.
Hi my 16x2 i2c lcd is not showing any thing
Hello everyone.
I am using a MEGA 2560, incremental encoder CWZ6C Omron, tinyGPS Neo6M and 4x20 display ... it occurs that on the screen appear two lines written "Azimuth º" but does not appear the direction of the antenna ... however when turning preset encoder appears the target angle. Please, can someone help me why the display shows the two lines without the data ... and how do I add lat / long on the fourth line? Thank you. PY5DK
I would have thought this code by now would have been used and compiled by many users, yet all I get is a screen full of errors, this is the screen dump, can anyone help with why?
Arduino: 1.6.9 (Windows 10), Board: "Arduino/Genuino Uno"
In file included from sketch\libraries\TimerFive\TimerFive.h:16:0,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp: In function 'void TIMER5_OVF_vect()':
sketch\libraries\TimerFive\TimerFive.cpp:20:5: warning: 'TIMER5_OVF_vect' appears to be a misspelled signal handler [enabled by default]
ISR(TIMER5_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::initialize(long int)':
sketch\libraries\TimerFive\TimerFive.cpp:27:3: error: 'TCCR5A' was not declared in this scope
TCCR5A = 0; // clear control register A
^
sketch\libraries\TimerFive\TimerFive.cpp:28:3: error: 'TCCR5B' was not declared in this scope
TCCR5B = _BV(WGM53); // set mode as phase and frequency correct pwm, stop the timer
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:28:16: error: 'WGM53' was not declared in this scope
TCCR5B = _BV(WGM53); // set mode as phase and frequency correct pwm, stop the timer
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::setPeriod(long int)':
sketch\libraries\TimerFive\TimerFive.cpp:35:62: error: 'CS50' was not declared in this scope
if(cycles < RESOLUTION) clockSelectBits = _BV(CS50); // no prescale, full xtal
^
sketch\libraries\TimerFive\TimerFive.cpp:36:62: error: 'CS51' was not declared in this scope
else if((cycles >>= 3) < RESOLUTION) clockSelectBits = _BV(CS51); // prescale by /8
^
sketch\libraries\TimerFive\TimerFive.cpp:37:62: error: 'CS51' was not declared in this scope
else if((cycles >>= 3) < RESOLUTION) clockSelectBits = _BV(CS51) | _BV(CS50); // prescale by /64
^
sketch\libraries\TimerFive\TimerFive.cpp:37:74: error: 'CS50' was not declared in this scope
else if((cycles >>= 3) < RESOLUTION) clockSelectBits = _BV(CS51) | _BV(CS50); // prescale by /64
^
sketch\libraries\TimerFive\TimerFive.cpp:38:62: error: 'CS52' was not declared in this scope
else if((cycles >>= 2) < RESOLUTION) clockSelectBits = _BV(CS52); // prescale by /256
^
sketch\libraries\TimerFive\TimerFive.cpp:39:62: error: 'CS52' was not declared in this scope
else if((cycles >>= 2) < RESOLUTION) clockSelectBits = _BV(CS52) | _BV(CS50); // prescale by /1024
^
sketch\libraries\TimerFive\TimerFive.cpp:39:74: error: 'CS50' was not declared in this scope
else if((cycles >>= 2) < RESOLUTION) clockSelectBits = _BV(CS52) | _BV(CS50); // prescale by /1024
^
sketch\libraries\TimerFive\TimerFive.cpp:40:62: error: 'CS52' was not declared in this scope
else cycles = RESOLUTION - 1, clockSelectBits = _BV(CS52) | _BV(CS50); // request was out of bounds, set as maximum
^
sketch\libraries\TimerFive\TimerFive.cpp:40:74: error: 'CS50' was not declared in this scope
else cycles = RESOLUTION - 1, clockSelectBits = _BV(CS52) | _BV(CS50); // request was out of bounds, set as maximum
^
sketch\libraries\TimerFive\TimerFive.cpp:41:3: error: 'ICR5' was not declared in this scope
ICR5 = pwmPeriod = cycles; // ICR1 is TOP in p & f correct pwm mode
^
sketch\libraries\TimerFive\TimerFive.cpp:42:3: error: 'TCCR5B' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52));
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:42:19: error: 'CS50' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52));
^
sketch\libraries\TimerFive\TimerFive.cpp:42:31: error: 'CS51' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52));
^
sketch\libraries\TimerFive\TimerFive.cpp:42:43: error: 'CS52' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52));
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::setPwmDuty(char, int)':
sketch\libraries\TimerFive\TimerFive.cpp:51:17: error: 'OCR5A' was not declared in this scope
if(pin == 46) OCR5A = dutyCycle;
^
sketch\libraries\TimerFive\TimerFive.cpp:52:17: error: 'OCR5B' was not declared in this scope
if(pin == 45) OCR5B = dutyCycle;
^
sketch\libraries\TimerFive\TimerFive.cpp:53:17: error: 'OCR5C' was not declared in this scope
if(pin == 44) OCR5C = dutyCycle;
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::pwm(char, int, long int)':
sketch\libraries\TimerFive\TimerFive.cpp:62:19: error: 'DDRE' was not declared in this scope
if(pin == 46) { DDRE |= _BV(PORTL3); TCCR5A |= _BV(COM5A1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:62:31: error: 'PORTL3' was not declared in this scope
if(pin == 46) { DDRE |= _BV(PORTL3); TCCR5A |= _BV(COM5A1); }
^
sketch\libraries\TimerFive\TimerFive.cpp:62:40: error: 'TCCR5A' was not declared in this scope
if(pin == 46) { DDRE |= _BV(PORTL3); TCCR5A |= _BV(COM5A1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:62:54: error: 'COM5A1' was not declared in this scope
if(pin == 46) { DDRE |= _BV(PORTL3); TCCR5A |= _BV(COM5A1); }
^
sketch\libraries\TimerFive\TimerFive.cpp:63:19: error: 'DDRE' was not declared in this scope
if(pin == 45) { DDRE |= _BV(PORTL4); TCCR5A |= _BV(COM5B1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:63:31: error: 'PORTL4' was not declared in this scope
if(pin == 45) { DDRE |= _BV(PORTL4); TCCR5A |= _BV(COM5B1); }
^
sketch\libraries\TimerFive\TimerFive.cpp:63:40: error: 'TCCR5A' was not declared in this scope
if(pin == 45) { DDRE |= _BV(PORTL4); TCCR5A |= _BV(COM5B1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:63:54: error: 'COM5B1' was not declared in this scope
if(pin == 45) { DDRE |= _BV(PORTL4); TCCR5A |= _BV(COM5B1); }
^
sketch\libraries\TimerFive\TimerFive.cpp:64:19: error: 'DDRE' was not declared in this scope
if(pin == 44) { DDRE |= _BV(PORTL5); TCCR5A |= _BV(COM5C1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:64:31: error: 'PORTL5' was not declared in this scope
if(pin == 44) { DDRE |= _BV(PORTL5); TCCR5A |= _BV(COM5C1); }
^
sketch\libraries\TimerFive\TimerFive.cpp:64:40: error: 'TCCR5A' was not declared in this scope
if(pin == 44) { DDRE |= _BV(PORTL5); TCCR5A |= _BV(COM5C1); }
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:64:54: error: 'COM5C1' was not declared in this scope
if(pin == 44) { DDRE |= _BV(PORTL5); TCCR5A |= _BV(COM5C1); }
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::disablePwm(char)':
sketch\libraries\TimerFive\TimerFive.cpp:71:17: error: 'TCCR5A' was not declared in this scope
if(pin == 46) TCCR5A &= ~_BV(COM5A1); // clear the bit that enables pwm on PE3
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:71:32: error: 'COM5A1' was not declared in this scope
if(pin == 46) TCCR5A &= ~_BV(COM5A1); // clear the bit that enables pwm on PE3
^
sketch\libraries\TimerFive\TimerFive.cpp:72:17: error: 'TCCR5A' was not declared in this scope
if(pin == 45) TCCR5A &= ~_BV(COM5B1); // clear the bit that enables pwm on PE4
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:72:32: error: 'COM5B1' was not declared in this scope
if(pin == 45) TCCR5A &= ~_BV(COM5B1); // clear the bit that enables pwm on PE4
^
sketch\libraries\TimerFive\TimerFive.cpp:73:17: error: 'TCCR5A' was not declared in this scope
if(pin == 44) TCCR5A &= ~_BV(COM5C1); // clear the bit that enables pwm on PE5
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:73:32: error: 'COM5C1' was not declared in this scope
if(pin == 44) TCCR5A &= ~_BV(COM5C1); // clear the bit that enables pwm on PE5
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::attachInterrupt(void (*)(), long int)':
sketch\libraries\TimerFive\TimerFive.cpp:80:3: error: 'TIMSK5' was not declared in this scope
TIMSK5 = _BV(TOIE5); // sets the timer overflow interrupt enable bit
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:80:16: error: 'TOIE5' was not declared in this scope
TIMSK5 = _BV(TOIE5); // sets the timer overflow interrupt enable bit
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::detachInterrupt()':
sketch\libraries\TimerFive\TimerFive.cpp:87:3: error: 'TIMSK5' was not declared in this scope
TIMSK5 &= ~_BV(TOIE5); // clears the timer overflow interrupt enable bit
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:87:18: error: 'TOIE5' was not declared in this scope
TIMSK5 &= ~_BV(TOIE5); // clears the timer overflow interrupt enable bit
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::start()':
sketch\libraries\TimerFive\TimerFive.cpp:92:3: error: 'TCCR5B' was not declared in this scope
TCCR5B |= clockSelectBits;
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::stop()':
sketch\libraries\TimerFive\TimerFive.cpp:97:3: error: 'TCCR5B' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52)); // clears all clock selects bits
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
from sketch\libraries\TimerFive\TimerFive.h:15,
from sketch\libraries\TimerFive\TimerFive.cpp:16:
sketch\libraries\TimerFive\TimerFive.cpp:97:19: error: 'CS50' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52)); // clears all clock selects bits
^
sketch\libraries\TimerFive\TimerFive.cpp:97:31: error: 'CS51' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52)); // clears all clock selects bits
^
sketch\libraries\TimerFive\TimerFive.cpp:97:43: error: 'CS52' was not declared in this scope
TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52)); // clears all clock selects bits
^
sketch\libraries\TimerFive\TimerFive.cpp: In member function 'void TimerFive::restart()':
sketch\libraries\TimerFive\TimerFive.cpp:102:3: error: 'TCNT5' was not declared in this scope
TCNT5 = 0;
^
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Originally requested by PA3FPQ
Work in progress.
Hello K3NG ,
I am using this type of OLED 👍
http://cdn-reichelt.de/documents/datenblatt/A400/DS_OLED_EA.pdf
But sometimes line 1 and 2 are swapped together. And, when I update the arduino mega program,
OLED freezed with stranges chars displayed on it. There is a need to adapt code for this display ?
Best regards and 73's
Pierre
When i put
#define POLOLU_LSM_303_MIN_ARRAY {-822, -644, -1151}
to rotor_settings.h, i get strange behavior of the controller. I set the azimuth, the controller starts rotating the rotor, but when the target is reached does not stop. Elevation is ok. Position readings are good. If I do not have this line, everything is ok.
Matthew Cook [email protected] [radioartisan] [email protected]
12:09 AM (22 hours ago)
to radioartisan
Goody,
How interested are you in splitting this project into separate classes? I'd be certainly happy to assist, I've already dabbled with pulling the debug_output() out and into it's own class and have that working, along with strings stored in flash. Working well. However this Git thing would be a learning exercise for this black duck, never made it past SVN ;-)
73
Matthew
VK5ZM
Basically take everything that is in the periodic debug log and output it in a user-friendly format.
Hi K3NG,
I have a problem on compilation 👍
k3ng_rotator_controller.ino: In function 'char* idle_status()':
k3ng_rotator_controller.ino:3455:12: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
return("");
When disabling LCD 4 bit, no problem
Any idea ?
73's
Pierre
This feature will enable the rotator to automatically correct the azimuth and/or elevation should drift occur.
Cant find anywhere to email you I need to know if I can use a servo as the motor.
Thanks
de 2E0LIG
I'm seeing some worrying looking warnings when compiling:
k3ng_rotator_controller.ino: In function 'char* idle_status()':
k3ng_rotator_controller.ino:3512:12: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
and
k3ng_rotator_controller.ino:7412:150: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
k3ngdisplay.print_center_timed_message("\x4B\x33\x4E\x47","\x52\x6F\x74\x6F\x72\x20\x43\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72",SPLASH_SCREEN_TIME);
I can upload, but when it boots I see the initial splash screen then the board resets over and over.
IR Receiver - use a small remote to use for direction
Submitted by Kevin, Zl1KFM
What is the recommended arduino for this project it needs to run 2X TB6600 drivers going to 2X nema 17 steppers. I have a NANO but cant find the info I found before on how to interface the TB6600 to the NANO I can only find info for interfacing an UNO to the TB6600 and an UNO is too big I need to kjeep size down
Hey,
this question is not directly related to this software, but I hope somebody could help me out:
I'm currently writing a web frontend for rotators. Currently, the Yaesu G232 protocol is supported. However I don't have a yaesu rotator available here.
The command C
and C2
allow to query the heading of the rotator. Can somebody confirm me the range of the response, in particular when the rotator is overlapping. Does the rotator return 0...359
or 0...449
?
It would be useful to know in order to implement the visualisation of Overlap properly.
Any help appreciated!
73 Tobias
DH1TW
I would like to print out the whole k3ng_rotator_controller wiki documentation.
How to do??
Change to CW, CCW, UP, and DWN.
The az and el values to the right of the decimal are always zero, not rounded, always 0 but the slave display shows the correct value including the decimals.
Reported by Eric WB6KCN
Hi. I'm building a controller based around this code with a 192x64 KS0108 Graphics LCD and the openGLCD library. There doesn't seem to be any support for graphics LCDs? Given the relative cheapness of such a display, it would make an interesting addition. Happy to send you my modifications once they're done. I have the basic display drawing routines in place, just need to interface to this project now!
George M1GEO
Hi, I'm using firmware and hardware from Remote QTH and sometime I have problem because the start of rotation cw or ccw, is faster than the brake solenoid and the rotor obviously does not start. I think that a small delay of 0,5 - 1 second should be enought to solve the problem. Thank you in advance if some friend could help me to solve this problem.
73 Maurizio iw5bms
How do I make code fit on a nano with remoteqth kit?
Limit switch support for limits and parking
Reqested by John Scherer N0CTL
Hello K3NG!
I trying make an your controller with 16x2 Display.
The head is shown in this way:
Azimuth XXX.X
zimuth XXX.X
The XXX.X are same in both rows. AZ/EL control feature is enabled. Problem is, that is no Elevation XXX.X text on the second row. Do you have any idea, where is the problem? Thank you!
Create a command to align the antenna with an object based on lattitude and longitude inputted. Also add the capability to read NMEA strings to determine the coordinates of the tracked object.
Hi,
I'm new on BugReproting using Github so I hope I won't mess it up...
On Line 6993 normal_az_speed_voltage is used as start value for slow down. I would except current_az_speed_voltage here. In line 6990 the same value is used for debugging output.
I changed it on my local branch because my motor driver need current_az_speed_voltage on the above mentioned line to work correctly.
Thanks for this fine code of source code,
Olli, DH2WQ
hello,i wanth to make this project but i have difficulties.please maybe you can give a complete and up to date electrical schematics and the program that works whit all the pieces from the schematics.i am new in this but i wanth to push my limits so please help me in this...73
I just realise, that some tracking software using comma to separate tenth of degrees in EASYCOM protocol. But K3NG rotator use a dot. Is it possible to change it somewhere in the code?
Thank you!
Thanks for this software. I'm in the middle of modifying my CDE Ham IV rotator for computer control. Would like to share my Dutch language translation to contribute.
73,
David ON4BDS
Is it possible to include in the code a set of preset positions for say 4 quick buttons?
I would like to be able to push 1 of 4 buttons that will go to a preset position that I use most of the time
Button 1 – North America
Button 2 – Europe/Great Britain
Button 3 – Australia
Button 4 – Eastern Russian (Wives City)
Just an idea.
Cheers Kevin.
Manuel Verde Salmerón [email protected] [radioartisan] [email protected]
Oct 17 (5 days ago)
to radioartisan
Hello
There a way to assign a button, so that the rotor moves at a certain angle.?
Like button makes park
Regards
I am using an OLED 20x4 display successfuly. The display has no backlight and is too bright for night if no manual switch changes are being made. I loaded the sketch below and the noDisplay() blanks the OLED and display() turns it back on. I have a grounding switch on the hardware into the Mega digital port to turn off the display. I need at least code in k3ngdisplay to access the native LiquidCrystal library noDisplay(), display() functions.
Thanks,
Duane KA1LM
/* KA1LM
LiquidCrystal Library - display() and noDisplay()
Tested with Newhaven Display International NHD-0420DZW-AG5 green on black
Demonstrates the use a 20x4 OLED display.
This sketch prints "Hello World!" to the OLED and uses the
display() and noDisplay() functions to turn on and off
the display.
The circuit:
* LCD RS pin 4 to digital pin 2
* LCD Enable pin 6 to digital pin 3
* LCD D4 pin 11 to digital pin 4
* LCD D5 pin 12 to digital pin 5
* LCD D6 pin 13 to digital pin 6
* LCD D7 pin 14 to digital pin 7
* LCD R/W pin 5 to ground
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
#include <SPI.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(2,3,4,5,6,7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(20,4);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// Turn off the display:
lcd.noDisplay();
delay(500);
// Turn on the display:
lcd.display();
delay(2500);
}
Hello,
Can US Digital MA3 be used with K3NG Rotator?
Many thanks
Francesco
What would you think about an auto-park feature, where the controller, if it doesn't receive a command for a configurable amount of time (eg. 15 minutes), moves the rotator into a specific "parking" position?
The idea here is if you live in a area with strong-but-intermittent wind, you may want to park your rotator in a specific position, to minimize the wind load on an antenna mast/tower/etc. Having it auto-park after a timeout, would make it more reliable, and avoid needing to manually park it each time.
As I come up to speed on this code base, I'll see if I can build it, and send you a pull request. I'm just getting started, though, so it might be a little while.
Lloyd - KC7NGB
Requested by Gui
Every time I initiate rotor control I get "Runtime error 8020 Comm port opening error" Yes I'm sharing the comm port with the Arduino, but your instructions say this is ok, the port is set to 9600 and "Easycomm" protocol is selected. The Arduino blinking led for the comm port activity flashes perfectly but then I initiate a move and I get the error and the program crashes every time. Any ideas please? It was somewhat more stable before I initiated AZ/EL but that's what I need, and the project is in breadboard stage but otherwise stable.
There may be an issue with the LCD display code logic, which I found when setting the "LCDxxxROW" and "OPTION_DISPLAYxxx" defines. Would like to see it confirmed before sending a patch.
The issue is that in the main .ino file, the variable "row_override[]" array is indexed incorrectly ; It's off by one.
Here's the problem:
The suggested fix would be to modify all the "row_override[LCD_xxx]" references to "row_override[LCD_xxx - 1]" . That should fix the misaligned indexes.
Due to the error, this issue occurs only when you using something like row 4, so it sometimes causes a issue and sometimes not.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.