Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: NixieTube.cpp
- Revision:
- 1:0470cc006ce7
- Parent:
- 0:34f3e0f37c55
- Child:
- 2:bb85bae1c1de
--- a/NixieTube.cpp Mon Dec 05 21:35:57 2016 +0000
+++ b/NixieTube.cpp Wed Dec 14 05:27:15 2016 +0000
@@ -13,10 +13,8 @@
#define TUBE_4_CATH 0x100000
#define TUBE_5_CATH 0x200000
#define TUBE_6_CATH 0x400000
-#define START_THREAD 1
-Mutex nixie_mutex;
-NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _thread(&NixieTube::threadStarter, this, osPriorityNormal,1024),_sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){
+NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){
digit1 = 1;
digit2 = 2;
digit3 = 3;
@@ -24,27 +22,43 @@
delay1 = 0.0005;
delay2 = 0.0045;
brightness = 0;
+ curr_tube = 1;
_cen.write(1.0);
_cen.period_us(10000);
- _thread.signal_set(START_THREAD);
-}
-
-void NixieTube::threadStarter(void const *p) {
- NixieTube *instance = (NixieTube*)p;
- instance->threadWorker();
+ std::printf("Starting Object\r\n");
+ tickSeq.attach(this, &NixieTube::nixie_shiftout, 0.001 );
+ std::printf("Sucess Ticker Started\r\n");
}
-void NixieTube::threadWorker() {
- _thread.signal_wait(START_THREAD);
- while(1) {
- nixie_thread();
- }
-}
-
NixieTube::~NixieTube()
{
}
-
+
+void NixieTube::nixie_shiftout() {
+
+
+ switch (curr_tube) {
+ case 1:
+ send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH);
+ break;
+ case 2:
+ send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH);
+ break;
+ case 3:
+ send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH);
+ break;
+ case 4:
+ send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH);
+ break;
+ default:
+ curr_tube = 1;
+ }
+ curr_tube++;
+ if (curr_tube == 5) {
+ curr_tube = 1;
+ }
+}
+
int NixieTube::nixie_id_convert(int digit) {
if (digit == 0 || digit == -1) {
return digit + 1;
@@ -66,39 +80,13 @@
for (int i=23; i >= 0; i--) {
_sdi = buffer & (1 << i);
_scl = 1;
- _scl = 0; // Whats going on here?
+ _scl = 0;
}
_rcl = 1;
- _rcl = 0; // Whats going on here?
+ _rcl = 0;
}
-
-void NixieTube::nixie_thread() {
- while (1) {
- nixie_mutex.lock();
- send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH);
- Thread::wait(1);
- send_nixie_shiftreg(0, 0, 0);
- Thread::wait(1);
- send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH);
- Thread::wait(1);
- send_nixie_shiftreg(0, 0, 0);
- Thread::wait(1);
- send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH);
- Thread::wait(1);
- send_nixie_shiftreg(0, 0, 0);
- Thread::wait(1);
- send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH);
- Thread::wait(1);
- send_nixie_shiftreg(0, 0, 0);
- Thread::wait(1);
- nixie_mutex.unlock();
- }
-}
-void NixieTube::start_nixie(){
- //thread = new Thread(nixie_thread, this);
- }
-void NixieTube::update_nixie_tube(int ref,int val){
+void NixieTube::update_individual_nixie_tube(int ref,int val){
switch(ref){
case(1):
digit1 = val;
@@ -110,7 +98,17 @@
digit4 = val;
}
}
+
+void NixieTube::update_all_nixie_tube(int val1,int val2,int val3,int val4){
+ digit1 = val1;
+ digit2 = val2;
+ digit3 = val3;
+ digit4 = val4;
+ }
void NixieTube::set_dim(float duty,int pulsewidth){
_cen.write(duty);
_cen.period_us(pulsewidth);
-}
\ No newline at end of file
+}
+void NixieTube::debug_digits(){
+ std::printf("Tube1: %d,Tube2: %d,Tube3: %d,Tube4: %d\r\n",digit1,digit2,digit3,digit4);
+ }