From 903e4d2add54dd422f70bdd75a9cf8dfe76aad30 Mon Sep 17 00:00:00 2001 From: Wolfgang Bachschwell Date: Sat, 15 Aug 2020 17:19:38 +0200 Subject: [PATCH] Updated ports to the new numbers for the actual board, added FreqSync Warning light --- lib/FT817_NBS/FT817_NBS.cpp | 120 +++++++++++++++--------------- lib/FT817_NBS/FT817_NBS.h | 15 +++- platformio.ini | 11 +++ src/main.cpp | 141 ++++++++++++++++++++++-------------- 4 files changed, 168 insertions(+), 119 deletions(-) diff --git a/lib/FT817_NBS/FT817_NBS.cpp b/lib/FT817_NBS/FT817_NBS.cpp index a1c9e07..825449d 100644 --- a/lib/FT817_NBS/FT817_NBS.cpp +++ b/lib/FT817_NBS/FT817_NBS.cpp @@ -1,17 +1,15 @@ #include -FT817_NBS::FT817_NBS(SoftwareSerial *connection){ - serial = connection; -} +FT817_NBS::FT817_NBS(SoftwareSerial *connection) { serial = connection; } -unsigned long FT817_NBS::bcdToInt(uint8_t bcd){ +unsigned long FT817_NBS::bcdToInt(uint8_t bcd) { int byte = (bcd & 0xF0) >> 4; byte *= 10; byte += bcd & 0x0F; return byte; } -uint8_t FT817_NBS::intToBcd(unsigned long value){ +uint8_t FT817_NBS::intToBcd(unsigned long value) { unsigned long tens = value / 10; value -= tens * 10; unsigned long singles = value; @@ -20,7 +18,7 @@ uint8_t FT817_NBS::intToBcd(unsigned long value){ return returnValue; } -unsigned long FT817_NBS::getDevicer(int step){ +unsigned long FT817_NBS::getDevicer(int step) { switch (step) { case 0: return 1000000; @@ -35,49 +33,50 @@ unsigned long FT817_NBS::getDevicer(int step){ return 1; break; default: - //Serial.println("SHIT"); //CAN'T HAPPEN + // Serial.println("SHIT"); //CAN'T HAPPEN return 1; break; } } -FT817_NBS::SignalMode FT817_NBS::getSignalMode(uint8_t numericValue){ - switch (numericValue){ - case 0x0: - return FT817_NBS::SignalMode::LSB; - break; - case 0x01: - return FT817_NBS::SignalMode::USB; - break; - case 0x02: - return FT817_NBS::SignalMode::CW; - break; - case 0x03: - return FT817_NBS::SignalMode::CWR; - break; - case 0x4: - return FT817_NBS::SignalMode::AM; - break; - case 0x6: - return FT817_NBS::SignalMode::WFM; - break; - case 0x8: - return FT817_NBS::SignalMode::FM; - break; - case 0xA: - return FT817_NBS::SignalMode::DIG; - break; - case 0xC: - return FT817_NBS::SignalMode::PKT; - break; - default: - return FT817_NBS::SignalMode::UNKNOWN; - break; +FT817_NBS::SignalMode FT817_NBS::getSignalMode(uint8_t numericValue) { + switch (numericValue) { + case 0x0: + return FT817_NBS::SignalMode::LSB; + break; + case 0x01: + return FT817_NBS::SignalMode::USB; + break; + case 0x02: + return FT817_NBS::SignalMode::CW; + break; + case 0x03: + return FT817_NBS::SignalMode::CWR; + break; + case 0x4: + return FT817_NBS::SignalMode::AM; + break; + case 0x6: + return FT817_NBS::SignalMode::WFM; + break; + case 0x8: + return FT817_NBS::SignalMode::FM; + break; + case 0xA: + return FT817_NBS::SignalMode::DIG; + break; + case 0xC: + return FT817_NBS::SignalMode::PKT; + break; + default: + return FT817_NBS::SignalMode::UNKNOWN; + break; } } -void FT817_NBS::convertFromValueToBcd(uint8_t *buffer, unsigned long actualValue){ - for(int partsLeft = 0;partsLeft < 4; partsLeft++){ +void FT817_NBS::convertFromValueToBcd(uint8_t *buffer, + unsigned long actualValue) { + for (int partsLeft = 0; partsLeft < 4; partsLeft++) { unsigned long part = actualValue / getDevicer(partsLeft); actualValue -= part * getDevicer(partsLeft); uint8_t bcd = intToBcd(part); @@ -85,9 +84,9 @@ void FT817_NBS::convertFromValueToBcd(uint8_t *buffer, unsigned long actualValue } } -unsigned long FT817_NBS::convertFromBcdToValue(uint8_t *buffer){ +unsigned long FT817_NBS::convertFromBcdToValue(uint8_t *buffer) { unsigned long actualValue = 0; - for(int partsleft = 0; partsleft < 4; partsleft++){ + for (int partsleft = 0; partsleft < 4; partsleft++) { unsigned long multiplier = getDevicer(partsleft); unsigned long partValue = bcdToInt(buffer[partsleft]); actualValue += (partValue * multiplier); @@ -95,34 +94,34 @@ unsigned long FT817_NBS::convertFromBcdToValue(uint8_t *buffer){ return actualValue; } -void FT817_NBS::clearAvailableBytes(){ - if(serial->available() != 0){ //Emptying ft817.available() +void FT817_NBS::clearAvailableBytes() { + if (serial->available() != 0) { // Emptying ft817.available() uint8_t throwAwayBuffer[serial->available()]; serial->readBytes(&throwAwayBuffer[0], serial->available()); } } -void FT817_NBS::sendCommand(uint8_t *bytes, size_t len){ - for (unsigned int i = 0; i < len; i++){ +void FT817_NBS::sendCommand(uint8_t *bytes, size_t len) { + for (unsigned int i = 0; i < len; i++) { serial->write(bytes[i]); - //Serial.print(String(bytes[i], HEX)); + // Serial.print(String(bytes[i], HEX)); delay(1); } } -void FT817_NBS::toggleAB(){ +void FT817_NBS::toggleAB() { clearAvailableBytes(); - uint8_t data[] = {0x0,0x0,0x0,0x0,0x81}; + uint8_t data[] = {0x0, 0x0, 0x0, 0x0, 0x81}; sendCommand(&data[0], sizeof(data)); } -FT817_NBS::Frequency FT817_NBS::getFrequency(){ +FT817_NBS::Frequency FT817_NBS::getFrequency() { clearAvailableBytes(); - uint8_t data[] = {0x0,0x0,0x0,0x0,0x3}; + uint8_t data[] = {0x0, 0x0, 0x0, 0x0, 0x3}; sendCommand(&data[0], sizeof(data)); delay(10); - + uint8_t buffer[5]; serial->readBytes(&buffer[0], sizeof(buffer)); FT817_NBS::Frequency frequency; @@ -131,7 +130,7 @@ FT817_NBS::Frequency FT817_NBS::getFrequency(){ return frequency; } -void FT817_NBS::setFrequency(unsigned long frequency){ +void FT817_NBS::setFrequency(unsigned long frequency) { clearAvailableBytes(); uint8_t data[5]; convertFromValueToBcd(&data[0], frequency); @@ -139,21 +138,20 @@ void FT817_NBS::setFrequency(unsigned long frequency){ sendCommand(&data[0], sizeof(data)); } -void FT817_NBS::setMode(FT817_NBS::SignalMode mode){ - if(mode == SignalMode::UNKNOWN || mode == SignalMode::WFM){ +void FT817_NBS::setMode(FT817_NBS::SignalMode mode) { + if (mode == SignalMode::UNKNOWN || mode == SignalMode::WFM) { return; } - uint8_t value = (uint8_t) mode; + uint8_t value = (uint8_t)mode; uint8_t data[5] = {value, 0x0, 0x0, 0x0, 0x7}; sendCommand(&data[0], sizeof(data)); } -void FT817_NBS::setSplit(bool on){ +void FT817_NBS::setSplit(bool on) { uint8_t data[5] = {0x0, 0x0, 0x0, 0x0}; - if(on){ + if (on) { data[4] = 0x2; - } - else{ + } else { data[4] = 0x82; } sendCommand(&data[0], sizeof(data)); diff --git a/lib/FT817_NBS/FT817_NBS.h b/lib/FT817_NBS/FT817_NBS.h index 83223f6..8b7da02 100644 --- a/lib/FT817_NBS/FT817_NBS.h +++ b/lib/FT817_NBS/FT817_NBS.h @@ -6,7 +6,18 @@ class FT817_NBS { public: - enum SignalMode {LSB = 0x0, USB = 0x1, CW = 0x2, CWR = 0x3, AM = 0x4, WFM = 0x6, FM = 0x8, DIG = 0xA, PKT = 0xC, UNKNOWN}; + enum SignalMode { + LSB = 0x0, + USB = 0x1, + CW = 0x2, + CWR = 0x3, + AM = 0x4, + WFM = 0x6, + FM = 0x8, + DIG = 0xA, + PKT = 0xC, + UNKNOWN + }; private: SoftwareSerial *serial; @@ -26,7 +37,7 @@ public: unsigned long frequency; FT817_NBS::SignalMode mode; }; - + FT817_NBS::Frequency getFrequency(); void setFrequency(unsigned long frequency); void toggleAB(); diff --git a/platformio.ini b/platformio.ini index ea23b77..b3b9b26 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,3 +12,14 @@ platform = atmelavr board = uno framework = arduino + +; upload_protocol = stk500v2 + +upload_protocol = stk500v1 +; edit these lines +upload_port = /dev/tty.usbmodem14101 +upload_speed = 19200 +; each flag in a new line +upload_flags = + -P$UPLOAD_PORT + -b$UPLOAD_SPEED diff --git a/src/main.cpp b/src/main.cpp index cb2e662..4ede18a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,13 +1,20 @@ #include -#include #include +#include -#define SET_FREQ 4 -#define SWITCH_AB 5 -#define SWITCH_USB_CW 7 -#define INIT 9 -#define LOWER_FREQ_BEACON 6 -#define HIGHER_FREQ_BEACON 8 +#define LOWER_FREQ_BEACON A0 +#define INIT A1 +#define HIGHER_FREQ_BEACON A2 +#define SWITCH_USB_CW A3 +#define SET_FREQ A4 +#define SWITCH_AB A5 + +#define LED_LOWER_FREQ_BEACON 4 +#define LED_INIT 5 +#define LED_HIGHER_FREQ_BEACON 6 +#define LED_SWITCH_USB_CW 7 +#define LED_SET_FREQ 8 +#define LED_SWITCH_AB 9 SoftwareSerial radio = SoftwareSerial(2, 3); FT817_NBS ft817(&radio); @@ -17,6 +24,8 @@ void switchUsbCw(); void initRadio(); bool setBeaconHigh(); bool setBeaconLow(); +void checkSync(); +void slowBlinkerClock(); void setup() { // put your setup code here, to run once: @@ -28,6 +37,15 @@ void setup() { pinMode(INIT, INPUT_PULLUP); pinMode(HIGHER_FREQ_BEACON, INPUT_PULLUP); pinMode(LOWER_FREQ_BEACON, INPUT_PULLUP); + + pinMode(LED_INIT, OUTPUT); + pinMode(LED_SET_FREQ, OUTPUT); + digitalWrite(LED_INIT, HIGH); + delay(500); + digitalWrite(LED_INIT, LOW); + digitalWrite(LED_SET_FREQ, HIGH); + delay(500); + digitalWrite(LED_SET_FREQ, LOW); } bool pressBlockSetFreq = false; @@ -36,123 +54,118 @@ bool pressBlockSwitchUsbCW = false; bool pressBlockInit = false; bool pressBlockLowerFreqBeacon = false; bool pressBlockHigherFreqBeacon = false; +bool slowBlinker = false; unsigned long pressLengthInit = 0; +unsigned long lastSyncFrequency = 0; +unsigned long lastBlinkToggle = 0; void loop() { // put your main code here, to run repeatedly: - if (digitalRead(SET_FREQ) == LOW && !pressBlockSetFreq){ + if (digitalRead(SET_FREQ) == LOW && !pressBlockSetFreq) { pressBlockSetFreq = true; setFreq(); - } - else if(digitalRead(SET_FREQ) != LOW){ + } else if (digitalRead(SET_FREQ) != LOW) { pressBlockSetFreq = false; delay(20); } - if (digitalRead(SWITCH_AB) == LOW && !pressBlockSwitchAB){ + if (digitalRead(SWITCH_AB) == LOW && !pressBlockSwitchAB) { ft817.toggleAB(); pressBlockSwitchAB = true; - - } - else if(digitalRead(SWITCH_AB) != LOW){ + } else if (digitalRead(SWITCH_AB) != LOW) { pressBlockSwitchAB = false; delay(20); } - if (digitalRead(SWITCH_USB_CW) == LOW && !pressBlockSwitchUsbCW){ + if (digitalRead(SWITCH_USB_CW) == LOW && !pressBlockSwitchUsbCW) { switchUsbCw(); pressBlockSwitchUsbCW = true; - - } - else if(digitalRead(SWITCH_USB_CW) != LOW){ + } else if (digitalRead(SWITCH_USB_CW) != LOW) { pressBlockSwitchUsbCW = false; delay(20); } - - if(digitalRead(INIT) == LOW && !pressBlockInit){ + + if (digitalRead(INIT) == LOW && !pressBlockInit) { pressLengthInit = millis() + 1000; pressBlockInit = true; - } - else if(digitalRead(INIT) == LOW) { - if(pressLengthInit != 0 && pressLengthInit <= millis()){ + } else if (digitalRead(INIT) == LOW) { + if (pressLengthInit != 0 && pressLengthInit <= millis()) { pressLengthInit = 0; initRadio(); } - } - else{ + } else { pressLengthInit = 0; pressBlockInit = false; delay(20); } - if (digitalRead(HIGHER_FREQ_BEACON) == LOW && !pressBlockHigherFreqBeacon){ + if (digitalRead(HIGHER_FREQ_BEACON) == LOW && !pressBlockHigherFreqBeacon) { setBeaconHigh(); pressBlockHigherFreqBeacon = true; - - } - else if(digitalRead(HIGHER_FREQ_BEACON) != LOW){ + } else if (digitalRead(HIGHER_FREQ_BEACON) != LOW) { pressBlockHigherFreqBeacon = false; delay(20); } - if (digitalRead(LOWER_FREQ_BEACON) == LOW && !pressBlockLowerFreqBeacon){ + if (digitalRead(LOWER_FREQ_BEACON) == LOW && !pressBlockLowerFreqBeacon) { setBeaconLow(); pressBlockLowerFreqBeacon = true; - - } - else if(digitalRead(LOWER_FREQ_BEACON) != LOW){ + } else if (digitalRead(LOWER_FREQ_BEACON) != LOW) { pressBlockLowerFreqBeacon = false; delay(20); } + + checkSync(); + slowBlinkerClock(); } -void setFreq(){ - unsigned long frequency = ft817.getFrequency().frequency; +void setFreq() { + unsigned long rxFrequency = ft817.getFrequency().frequency; - if(frequency < 28850000){ + if (rxFrequency < 28850000) { Serial.println("Please go into the 70 cm Band!"); return; } delay(300); - unsigned long newFrequency = frequency - 28850000; + unsigned long txFrequency = rxFrequency - 28850000; + lastSyncFrequency = rxFrequency; ft817.toggleAB(); delay(300); - ft817.setFrequency(newFrequency); + ft817.setFrequency(txFrequency); delay(300); ft817.toggleAB(); } -void switchUsbCw(){ +void switchUsbCw() { FT817_NBS::SignalMode mode = ft817.getFrequency().mode; FT817_NBS::SignalMode newMode; - if (mode == FT817_NBS::SignalMode::USB){ + if (mode == FT817_NBS::SignalMode::USB) { newMode = FT817_NBS::SignalMode::CW; - } - else{ + } else { newMode = FT817_NBS::SignalMode::USB; } delay(300); ft817.setMode(newMode); - + delay(300); ft817.toggleAB(); delay(300); ft817.setMode(newMode); - + delay(300); ft817.toggleAB(); } -void initRadio(){ +void initRadio() { ft817.setMode(FT817_NBS::SignalMode::USB); delay(300); ft817.setFrequency(14420000); @@ -161,40 +174,56 @@ void initRadio(){ delay(300); ft817.setMode(FT817_NBS::SignalMode::USB); delay(300); - ft817.setFrequency(43250000); //43274500, 43250000 + ft817.setFrequency(43250000); // 43274500, 43250000 delay(300); ft817.setSplit(true); } -bool setBeacon(unsigned long frequency, FT817_NBS::SignalMode mode, bool firstVFO){ +bool setBeacon(unsigned long frequency, FT817_NBS::SignalMode mode, + bool firstVFO) { unsigned long result = ft817.getFrequency().frequency; - if(result >= 43000000 && result <= 44000000){ + if (result >= 43000000 && result <= 44000000) { delay(300); ft817.setMode(mode); delay(300); ft817.setFrequency(frequency); return true; - } - else{ + } else { delay(300); ft817.toggleAB(); - if(firstVFO){ + if (firstVFO) { delay(300); return setBeacon(frequency, mode, false); - } - else{ - Serial.println("Could not set beacon. Please initialise the radio first."); + } else { + Serial.println( + "Could not set beacon. Please initialise the radio first."); return false; } } } -bool setBeaconHigh(){ +bool setBeaconHigh() { return setBeacon(43274500, FT817_NBS::SignalMode::USB, true); } -bool setBeaconLow(){ +bool setBeaconLow() { return setBeacon(43250000, FT817_NBS::SignalMode::CW, true); } +void checkSync() { + unsigned long latest_rxFrequency = ft817.getFrequency().frequency; + if (abs(latest_rxFrequency - lastSyncFrequency) >= 250) { + digitalWrite(LED_SET_FREQ, HIGH); + } else if (abs(latest_rxFrequency - lastSyncFrequency) == 0) { + digitalWrite(LED_SET_FREQ, LOW); + } else if (abs(latest_rxFrequency - lastSyncFrequency) < 250) { + digitalWrite(LED_SET_FREQ, slowBlinker); + } +} +void slowBlinkerClock() { + if ((millis() - lastBlinkToggle) >= 1000) { + lastBlinkToggle = millis(); + slowBlinker = !slowBlinker; + } +}