Werkend proto
This commit is contained in:
@@ -231,6 +231,8 @@ stdio.h
|
||||
-
|
||||
string.h
|
||||
-
|
||||
time.h
|
||||
-
|
||||
pico/stdlib.h
|
||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/pico/stdlib.h
|
||||
pico/binary_info.h
|
||||
|
Binary file not shown.
Binary file not shown.
45474
build/src/main.dis
45474
build/src/main.dis
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
7273
build/src/main.hex
7273
build/src/main.hex
File diff suppressed because it is too large
Load Diff
Binary file not shown.
14
src/Config.h
14
src/Config.h
@@ -18,6 +18,9 @@
|
||||
|
||||
#endif
|
||||
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
|
||||
const long serialBaudRate = 38400;
|
||||
const int rssiOffset = 292;
|
||||
|
||||
@@ -28,7 +31,7 @@
|
||||
int loraPreamble = 8;
|
||||
int loraCodingRate = 5;
|
||||
int loraTxPower = 17;
|
||||
int LoRaPaSelect = 0;
|
||||
int LoRaPaSelect = 1;
|
||||
uint32_t loraBandwidth = 125E3;
|
||||
uint32_t loraFrequency = 433775000;
|
||||
|
||||
@@ -66,5 +69,14 @@
|
||||
|
||||
uint8_t FirmwareVersion[20] = { 'V','1',',','C','o','n','t','r', 'o','l','l','e','r',' ','0','1', 0} ;
|
||||
} AprsSettings;
|
||||
|
||||
struct status {
|
||||
bool PowerSupply24V;
|
||||
bool PowerSupply12V;
|
||||
bool PowerSupply5V;
|
||||
bool ControlRelay;
|
||||
|
||||
uint8_t StatusString[6] = { '0','0','0','0','0',0};
|
||||
} Status;
|
||||
|
||||
#endif
|
||||
|
151
src/main.cpp
151
src/main.cpp
@@ -1,5 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include "pico/stdlib.h"
|
||||
#include "pico/binary_info.h"
|
||||
#include "LoRa-RP2040.h"
|
||||
@@ -12,14 +13,24 @@ void getPacketData(int packetLength);
|
||||
int compare_strings(uint8_t a[], uint8_t b[]);
|
||||
bool is_message_for_me (uint8_t data[], uint8_t mycall[]);
|
||||
|
||||
/* declaration for receive functions */
|
||||
uint16_t decode_packet ();
|
||||
void ComposeAprsFrame(uint8_t payload[]);
|
||||
|
||||
/* declaration for transmit functions */
|
||||
void ComposeAprsFrame(uint8_t payload[]);
|
||||
bool TransmitRequest = false;
|
||||
void transmit();
|
||||
|
||||
|
||||
const uint PowerSupply24VControl = 6;
|
||||
const uint PowerSupply12VControl = 5;
|
||||
const uint PowerSupply5VControl = 4;
|
||||
const uint RelayOffControl = 2;
|
||||
const uint RelayOnControl = 3;
|
||||
|
||||
int main() {
|
||||
|
||||
uint16_t ServerCommand = 0;
|
||||
uint16_t TxDelay = 0;
|
||||
|
||||
/* Among others, this initializes the USB-serial port at 115200bps 8N1 */
|
||||
stdio_init_all();
|
||||
@@ -27,6 +38,31 @@ int main() {
|
||||
// Buffers
|
||||
memset(rxBuffer, 0, sizeof(rxBuffer));
|
||||
memset(txBuffer, 0, sizeof(txBuffer));
|
||||
|
||||
gpio_init(PowerSupply24VControl);
|
||||
gpio_init(PowerSupply12VControl);
|
||||
gpio_init(PowerSupply5VControl);
|
||||
gpio_init(RelayOffControl);
|
||||
gpio_init(RelayOnControl);
|
||||
|
||||
gpio_set_dir(PowerSupply24VControl, GPIO_OUT);
|
||||
gpio_set_dir(PowerSupply12VControl, GPIO_OUT);
|
||||
gpio_set_dir(PowerSupply5VControl, GPIO_OUT);
|
||||
gpio_set_dir(RelayOffControl, GPIO_OUT);
|
||||
gpio_set_dir(RelayOnControl, GPIO_OUT);
|
||||
|
||||
gpio_put(PowerSupply24VControl, 0);
|
||||
Status.PowerSupply24V = OFF;
|
||||
gpio_put(PowerSupply12VControl, 0);
|
||||
Status.PowerSupply12V = OFF;
|
||||
gpio_put(PowerSupply5VControl, 1);
|
||||
Status.PowerSupply5V = OFF;
|
||||
|
||||
gpio_put(RelayOffControl, 1);
|
||||
sleep_ms(250);
|
||||
gpio_put(RelayOffControl, 0);
|
||||
gpio_put(RelayOnControl, 0);
|
||||
Status.ControlRelay = OFF;
|
||||
|
||||
sleep_ms(5000);
|
||||
|
||||
@@ -58,20 +94,101 @@ int main() {
|
||||
|
||||
if (ServerCommand) {
|
||||
|
||||
if (ServerCommand == 1) {
|
||||
ComposeAprsFrame(AprsSettings.FirmwareVersion);
|
||||
// Wait for 100ms before responding
|
||||
sleep_ms(5000);
|
||||
transmit();
|
||||
sleep_ms(5000);
|
||||
transmit();
|
||||
sleep_ms(5000);
|
||||
transmit();
|
||||
sleep_ms(5000);
|
||||
transmit();
|
||||
switch(ServerCommand) {
|
||||
|
||||
case 1 :
|
||||
ComposeAprsFrame(AprsSettings.FirmwareVersion);
|
||||
break;
|
||||
// Send status of output pins
|
||||
case 6 :
|
||||
if (Status.PowerSupply24V == ON)
|
||||
Status.StatusString[3] = '1';
|
||||
else
|
||||
Status.StatusString[3] = '0';
|
||||
|
||||
if (Status.PowerSupply12V == ON)
|
||||
Status.StatusString[2] = '1';
|
||||
else
|
||||
Status.StatusString[2] = '0';
|
||||
|
||||
if (Status.PowerSupply5V == ON)
|
||||
Status.StatusString[1] = '1';
|
||||
else
|
||||
Status.StatusString[1] = '0';
|
||||
|
||||
if (Status.ControlRelay == ON)
|
||||
Status.StatusString[0] = '1';
|
||||
else
|
||||
Status.StatusString[0] = '0';
|
||||
|
||||
ComposeAprsFrame(Status.StatusString);
|
||||
|
||||
// Switch off 24V power supply
|
||||
case 30 :
|
||||
gpio_put(PowerSupply24VControl, 0);
|
||||
Status.PowerSupply24V = OFF;
|
||||
break;
|
||||
// Switch on 24V power supply
|
||||
case 31 :
|
||||
gpio_put(PowerSupply24VControl, 1);
|
||||
Status.PowerSupply24V = ON;
|
||||
break;
|
||||
// Switch off 12V power supply
|
||||
case 32 :
|
||||
gpio_put(PowerSupply12VControl, 0);
|
||||
Status.PowerSupply12V = OFF;
|
||||
break;
|
||||
// Switch on 12V power supply
|
||||
case 33 :
|
||||
gpio_put(PowerSupply12VControl, 1);
|
||||
Status.PowerSupply12V = ON;
|
||||
break;
|
||||
// Switch off 5V power supply
|
||||
case 34 :
|
||||
gpio_put(PowerSupply5VControl, 1);
|
||||
Status.PowerSupply5V = OFF;
|
||||
break;
|
||||
// Switch on 5V power supply
|
||||
case 35 :
|
||||
gpio_put(PowerSupply5VControl, 0);
|
||||
Status.PowerSupply5V = ON;
|
||||
break;
|
||||
// Switch off relay
|
||||
case 36 :
|
||||
gpio_put(RelayOffControl, 1);
|
||||
sleep_ms(250);
|
||||
gpio_put(RelayOffControl, 0);
|
||||
Status.ControlRelay = OFF;
|
||||
break;
|
||||
// Switch on 24V relay
|
||||
case 37 :
|
||||
gpio_put(RelayOnControl, 1);
|
||||
sleep_ms(250);
|
||||
gpio_put(RelayOnControl, 0);
|
||||
Status.ControlRelay = ON;
|
||||
break;
|
||||
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
||||
ServerCommand = 0;
|
||||
}
|
||||
|
||||
/* A message is ready to be send */
|
||||
if (TransmitRequest) {
|
||||
|
||||
if ( TxDelay == 0 ) {
|
||||
// Generate pseudo random value between 0-1024
|
||||
TxDelay = time_us_32()&0x3FF;
|
||||
}
|
||||
|
||||
/* If TxDelay times out: send message */
|
||||
if ( TxDelay-- == 1 ) {
|
||||
transmit();
|
||||
TransmitRequest = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -290,9 +407,6 @@ uint16_t decode_packet ()
|
||||
printf("Message from server: %s (command %u)\n", aprs_message, aprs_server_command);
|
||||
if (aprs_acknowledge_request) {
|
||||
ComposeAprsFrame(aprs_acknowledge_number);
|
||||
// Wait for 100ms before responding with acknowledge
|
||||
sleep_ms(100);
|
||||
transmit();
|
||||
printf("Acknowledge request: %s\n", aprs_acknowledge_number);
|
||||
}
|
||||
|
||||
@@ -364,6 +478,8 @@ void ComposeAprsFrame(uint8_t payload[])
|
||||
uint16_t BufferPosition = 0;
|
||||
uint16_t cnt = 0;
|
||||
|
||||
memset(txBuffer, 0, sizeof(txBuffer));
|
||||
|
||||
// APRS header
|
||||
txBuffer[BufferPosition++] = '<';
|
||||
txBuffer[BufferPosition++] = 0xff;
|
||||
@@ -411,6 +527,9 @@ void ComposeAprsFrame(uint8_t payload[])
|
||||
txBuffer[BufferPosition++] = payload[cnt];
|
||||
cnt++;
|
||||
}
|
||||
|
||||
// Set variable to indicate a send request
|
||||
TransmitRequest = true;
|
||||
printf("%s\n", txBuffer);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user