Требуется разработать прикладное программное обеспечение, которое при запуске будет выполнять функции калькулятора. Язык программирования не имеет значения. Ожидается реализация основных операций калькулятора.
Написать программу для arduino
Разработка приложений для ПК.
Доработка существующего продукта.
Имеется устройство на базе Arduino Nano в связке с приемником CC2500. Приемник подключен к Ардуино через интерфейс SPI. Данное устройство принимает сигнал на частоте 2,4 Ггц. Имеется код на Arduino IDE взаимодействия ардуино и примника СС2500, код сканирует диапазон сигналов и показывает самый сильный сигнал.
Необходимо переработать данный код для подключения 4 приемников к ардуино по интерфейсу SPI. Программа должна считывать сигнал с 4-х приемников по очереди во всем диапазоне частот 2,4ГГц. Находить самый сильный сигнал на 4- х приемников, а потом сравнивать эти сигналы между собой.
Далее необходимо написать GUI ( графический интерфейс пользователя) чтобы выводить сравнение сигналов на ПК по COM порту (UART). Данные выводить ввиде : Номер приемника- уровень сигнала, Номер приемника- Самый сильный сигнал.
Ниже приведен код который необходимо править.
// Hardware-specific library
#include
//#include
#include "cc2500_REG.h"
#define TFT_CS 9 // display Select
#define SCAN_CS 10 // scanner Select
#define TFT_RST 7 // display Reset (0 if use Arduino reset)
#define TFT_DC 8 // display Data/Command control line
#define RSSI_TRESHOLD 100 // treshold of RSSI alarm level
#define RSSI_OFFSET 95 // offset for displayed data
#define RSSI_OVERSAMPLE 50 // number of measures for each channel to found a max RSSI value
#define MAX_CHAN_QTY 205 // max number of channel for spacing 405.456543MHz
#define MAX_DISP_LINE 159 // max horizontal display resolution
#define MAX_SAMPLING 10 // qty of samples in each iteration (1...100)
byte cal[MAX_CHAN_QTY], rssi_data[MAX_DISP_LINE], data;
byte RSSI_data;
int RSSI_dbm, RSSI_max;
void setup(void) {
Serial.begin(9600);
pinMode(TFT_CS, OUTPUT);
pinMode(SCAN_CS,OUTPUT);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2); // max SPI speed, 1/2 F_CLOCK
digitalWrite(TFT_CS,HIGH);
digitalWrite(SCAN_CS,HIGH);
init_CC2500(); // initialise CC2500 registers
for (int i=0; i
{
WriteReg(CHANNR, i); // set channel
WriteReg(SIDLE, 0x3D); // idle mode
WriteReg(SCAL, 0x3D); // start manual calibration
delayMicroseconds(800); // wait for calibration
data = ReadReg(FSCAL1); // read calibration value
cal = data; // and store it
}
WriteReg(CHANNR, 0x00); // set channel
WriteReg(SFSTXON, 0x3D); // calibrate and wait
delayMicroseconds(800); // settling time, refer to datasheet
WriteReg(SRX, 0x3D);
}
void loop() {
for (int i=0; i
{
WriteReg(CHANNR, i); // set channel
WriteReg(FSCAL1, cal); // restore calibration value for this channel
delayMicroseconds(300); // settling time, refer to datasheet
RSSI_max = -120;
for (int j=0; j
digitalWrite(SCAN_CS,LOW); // select the scanner chip
SPI.transfer(REG_RSSI); // read RSSI register
RSSI_data = SPI.transfer(0);
digitalWrite(SCAN_CS,HIGH);
// convert RSSI data from 2's complement to signed decimal
if(RSSI_data >= 128) {
RSSI_dbm = (RSSI_data-256)/2-70;
}
else {
RSSI_dbm = RSSI_data/2-70;
}
if (RSSI_dbm > RSSI_max) RSSI_max = RSSI_dbm; // keep maximum
}
RSSI_max += RSSI_OFFSET;
if(RSSI_max > 110) RSSI_max = 110;
if(RSSI_max
rssi_data = RSSI_max;
//tft.drawFastVLine(i, 17, 110-RSSI_max, ST7735_BLACK);
//tft.drawFastVLine(i, 127-RSSI_max, RSSI_max, ST7735_GREEN);
}
//DrawScreen();
Serial.print(CHANNR);
Serial.print(rssi_data[CHANNR]);
}
void init_CC2500(){
WriteReg(SRES,0x3D); // software reset for CC2500
WriteReg(FSCTRL1,0x0F); // Frequency Synthesizer Control
WriteReg(PKTCTRL0,0x12); // Packet Automation Control
WriteReg(FREQ2,0x5C); // Frequency control word, high byte
WriteReg(FREQ1,0x4E); // Frequency control word, middle byte
WriteReg(FREQ0,0xDE); // Frequency control word, low byte
WriteReg(MDMCFG4,0x0D); // Modem Configuration
WriteReg(MDMCFG3,0x3B); // Modem Configuration
WriteReg(MDMCFG2,0x00); // Modem Configuration 0x30 - OOK modulation, 0x00 - FSK modulation (better sensitivity)
WriteReg(MDMCFG1,0x23); // Modem Configuration
WriteReg(MDMCFG0,0xFF); // Modem Configuration
WriteReg(MCSM1,0x0F); // Always stay in RX mode
WriteReg(MCSM0,0x04); // Main Radio Control State Machine Configuration
WriteReg(FOCCFG,0x15); // Frequency Offset Compensation configuration
WriteReg(AGCCTRL2,0x83); // AGC Control
WriteReg(AGCCTRL1,0x00); // AGC Control
WriteReg(AGCCTRL0,0x91); // AGC Control
WriteReg(FSCAL3,0xEA); // Frequency Synthesizer Calibration
WriteReg(FSCAL2,0x0A); // Frequency Synthesizer Calibration
WriteReg(FSCAL1,0x00); // Frequency Synthesizer Calibration
WriteReg(FSCAL0,0x11); // Frequency Synthesizer Calibration
}
void WriteReg(char addr, char value){
digitalWrite(SCAN_CS,LOW);
while (digitalRead(MISO) == HIGH) {
};
SPI.transfer(addr);
SPI.transfer(value);
digitalWrite(SCAN_CS,HIGH);
}
char ReadReg(char addr){
addr = addr + 0x80;
digitalWrite(SCAN_CS,LOW);
while (digitalRead(MISO) == HIGH) {
};
SPI.transfer(addr);
char y = SPI.transfer(0);
digitalWrite(SCAN_CS,HIGH);
return y;
}.
Заявки фрилансеров
Похожие заказы
- $3Прикладное ПО1 исполнительЗакрыт2 года назад
Необходимо разработать программу на Ассемблере, которая будет обрабатывать 1000 чисел и выделять из них четные. Укажите алгоритм и структуру кода для выполнения задачи.
Прикладное ПО1 заявкаЗакрыт2 года назадТребуется опытный специалист по C/C++ и ассемблеру для обратной разработки программы весом 100кб. Задача включает обфускацию кода, изменение имен переменных и функций, добавление бесполезных инструкций, шифрование строк и другие методы защиты от декомпиляции. Автоматизированные способы не подходят. Специалисты с успешными проектами приветствуются.
Прикладное ПО1 исполнительЗавершен2 года назадТребуется разработать чат-бота на Python для сбора уникальных комментариев с постов в Telegram. Бот должен проверять уникальность комментариев, исключая совпадения по последовательности из трех слов. Также нужна возможность изменения целевого поста в настройках бота. Запуск бота планируется с компьютера без хостинга, сроки гибкие.
Прикладное ПО6 заявокЗакрыт2 года назад- $100
Разработайте приложение на PHP для парсинга просмотров последних трех постов в 1000 телеграм-каналах с использованием библиотеки MadelineProto. Сбор данных должен происходить каждые 5 минут и отправляться по API. Необходимо использовать покупные аккаунты и прокси для предотвращения блокировок. Аккаунты и прокси будут предоставлены.
Прикладное ПОнет заявокЗакрыт2 года назад Необходимо адаптировать JavaScript код, используемый в расширении для Chrome, чтобы он мог исполняться из консоли браузера. Задача требует модификации существующего кода для обеспечения его корректной работы вне контекста расширения.
Прикладное ПО1 заявкаЗакрыт2 года назадТребуется доработка проекта на Django, работающего с Telegram. Необходимо привязать домен к серверу, добавить поля для привязки прокси к аккаунту и реализовать сбор и отправку сообщений через прокси. Исходники и дамп БД предоставлены, но отсутствует файл с зависимостями.
Прикладное ПО1 заявкаЗакрыт2 года назад- $5
Необходимо разработать автоматизированную систему для библиотеки, обеспечивающую выдачу и прием книг, а также учет читателей. Система должна запоминать, какие книги у какого читателя, вести учет штрафов за просроченные и утерянные книги, и не допускать выдачу книги, которая уже на руках. Каждая книга в библиотеке должна быть уникальной.
Прикладное ПО5 заявокЗакрыт2 года назад - $30
Необходима консультация по реализации MDB для вендингового аппарата и получению телеметрии. Требуется объяснение алгоритма работы и принципа разбора протокола. Оплата в USDT.
Прикладное ПОнет заявокЗакрыт2 года назад Необхідно створити аплікацію для обробки тікової історії валют, включаючи парсер та функціонал для арифметичної аналітики. Докладні вимоги наведені в ТЗ у pdf файлі.
Прикладное ПО3 заявкиЗакрыт2 года назад