Как скомпилировать программу Arduino для настольного ПК

У меня есть программа для Arduino, которая выполняет последовательную связь только с небольшим количеством математики, и я пишу другую программу для связи с ней на втором Arduino. В целях тестирования я надеялся, что смогу запустить программу только для последовательного интерфейса на своем рабочем столе. Я знаю, что на Raspberry Pi можно работать, но я никогда этого не делал. Могу ли я сделать что-то подобное на окнах? Если нет, может ли кто-нибудь порекомендовать самый простой способ сделать это с помощью обычной программы на C++, которая потребует очень небольшого редактирования? Вот копия моего кода, если это полезно. По сути, он увеличивает и уменьшает переменную от 0 до 100.

int pos = 60;
bool flag=0;
int dly=50;
int vel=0;

const int buttonPin =  12;      // номер вывода светодиода

// переменные изменятся:
int buttonState = 0;         // переменная для чтения статуса кнопки


void setup() {
  pinMode(buttonPin, INPUT_PULLUP);

Serial.begin(115200);
}

void loop() {
    dly=50;
    buttonState = digitalRead(buttonPin);
    if (buttonState==0)dly=12;
    Serial.print(vel); //скорость
    Serial.print(",");
    Serial.println(pos); //должность
    delay(dly);
    if (pos==30)flag=1;
    if (flag==1) pos+=1;
    if (pos==100)flag=0;
    if (flag==0) pos-=1;
    vel=1000/dly;
    if (flag==0) vel*=-1;



}

, 👍3

Обсуждение

попробуй обработать... https://processing.org/ ....посмотри например скетчи которые делают серийный комм..., @jsotola

Я знаком с обработкой. Моя цель — иметь одну программу, которую я мог бы запускать в двух местах. В противном случае я могу просто использовать python или другой Arduino., @bob mcgrath


3 ответа


0

Это зависит от того, что именно вы хотите протестировать. Я предполагаю, что вы хотите запустить скетч «Только последовательный и математический» на ПК, в то же время обмениваясь данными по последовательному интерфейсу (через USB) с другим реальным Arduino. Это можно сделать, но вам придется изменить довольно много. Последовательные библиотеки для ПК отличаются от библиотек для Arduino. Также вы не можете просто скомпилировать код Arduino для ПК, это совершенно разные устройства.

В большинстве случаев последовательный код лучше тестировать на реальном оборудовании, проверяя, что на самом деле отправляется. Вы можете сделать это, подключившись к Arduino через Serial/USB с помощью соответствующей программы (Arduino Serial Monitor, Putty, ...), чтобы вы могли проверить функциональность вручную. Или напишите простой тестовый скетч для второго Ардуино.

Для тестирования математической части вы можете относительно легко написать так называемый модульный тест на ПК. Модульный тест проверяет ограниченную часть кода без или только с несколькими зависимостями. Большая часть математики одинакова на Arduino и ПК (при условии, что вы используете переменные одинакового размера и типа). Таким образом, вы можете поместить весь математический код в функцию, которая не содержит специфичного для Arduino кода, такого как код Serial. Просто математика. Затем вы можете скопировать эту функцию в исходный код программы для ПК на C++ и использовать ее для тестирования блока математических функций без участия Arduino.

Другим вариантом может быть использование симулятора Arduino. Но имейте в виду, что эти симуляторы никогда не могут быть такими же хорошими, как реальное оборудование, и вы можете увидеть различия в поведении смоделированных и реальных Arduino. Хотя это должно работать, пока ваша программа проста и не зависит от слишком большого количества внешнего оборудования или событий. Ваша текущая программа достаточно проста, чтобы с ней мог работать симулятор.

В целом: тестирование вашего кода вне реального Arduino имеет смысл в основном только тогда, когда у вас есть сложная программа, которая не включает специальный код Arduino, для работы которого потребуется аппаратное обеспечение. Если ваш проект не очень сложен, лучше протестировать его непосредственно на реальном оборудовании.

,

3

Если вы хотите запустить скетч Arduino на своем рабочем столе, вам просто нужно реализуйте базовую библиотеку Arduino для своего ПК.

Возможно, все не так плохо, как кажется. Если ваша программа делает только минимальные использование ядра Arduino, вы можете реализовать только те части, которые вам действительно нужны. необходимость. Например, этой частичной реализации достаточно для запуска вашего программа:

#include <cstdint>
#include <iostream>
#include <unistd.h>  // for usleep()

using std::cout;
using std::endl;

#define INPUT_PULLUP 2

void pinMode(uint8_t, uint8_t) {}

uint8_t digitalRead(uint8_t) { return 0; }

void delay(int t) { usleep(t * 1000UL); }

struct {
    void begin(int) {}
    template<typename T> void print(T x) { cout << x; }
    template<typename T> void println(T x) { cout << x << endl; }
} Serial;

int main()
{
    void setup();
    void loop();
    setup();
    for (;;) loop();
}

Я протестировал это в Linux, просто добавив вашу программу прямо ниже это. Если вы используете Windows, вам придется заменить usleep() функцией с соответствующим вызовом Windows (и <unistd.h> с соответствующий заголовок). Последовательный поток идет на стандартный вывод. Ты можете перенаправить его на последовательный порт USB, если хотите (тривиально сделать в Linux, я предполагаю, что это должно быть выполнимо в Windows). Вы также можете захотеть замените digitalRead() чем-то, что имитирует более реалистичный взаимодействие с пользователем.

Имейте в виду, что размеры основных типов данных могут различаться на Arduino и на ПК. На Arduino на базе AVR int и указатели являются 16-битными, а long — 32-битными. Это модель данных «IP16». Ан Для Arduino на базе ARM обычно используется ILP32, а для 64-битного ПК — LP64. если он не работает под управлением Windows, и в этом случае это LLP64. Это может сделать разница, особенно если некоторые из ваших расчетов подвержены переполнение с меньшими моделями данных.


Правка. Недавно я наткнулся на NCORE, собственное ядро для Ардуино. Это может хорошо подойти для того, что вы пытаетесь сделать. Из описания страницы:

Родное ядро позволяет компилировать и запускать скетчи Arduino на ПК, вообще без доработок. Он предоставляет нативные версии стандартные функции Arduino и интерпретатор командной строки для предоставления входные данные для скетча, которые обычно исходят от оборудования себя.

,

Это может быть способ сделать это. Мне просто интересно, зачем все это нужно для десктопа, а на raspberry pi и без этого могу запустить ино файл., @bob mcgrath

@bobmcgrath: Я думаю, кто-то уже реализовал довольно полное Arduino-совместимое ядро для Raspberry ... может быть, [WiringPi] (http://wiringpi.com/)?, @Edgar Bonet


0

Также существует arduino_ci, фреймворк для запуска модульных тестов с использованием библиотеки Arduino (возможно, также скетча) на вашем компьютере. Он содержит фиктивные реализации большинства функций Arduino и некоторых библиотек, а также дает модульное тестирование таких вещей, как последовательные буферы и значения выводов ввода-вывода.

Для вашего примера вы могли бы написать модульный тест, который просто использует stdin/stdout в качестве последовательного порта, а затем соединяет две из этих программ вместе, или, может быть, вы можете немного обобщить свой коммуникационный код в объект, а затем дважды создать его экземпляр. .

,