Com port как связь программы на delphi с Arduino

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Да щаз, ага. И С# за собой потянула...

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DetSimen пишет:

Да щаз, ага. И С# за собой потянула...

Не понял, к чему это вы ? Считаете дельфи живее всех живых ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот когда в С++ искаропки будут свойства, делегаты, и виртуальные конструкторы, тада и поговорим, кто сдох. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я в дельфи, еслишто, с 1997 года. Нет ничего такого в С++, что нельзя запрграммировать на Delphi. Но не наоборот.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DetSimen пишет:

Я в дельфи, еслишто, с 1997 года. Нет ничего такого в С++, что нельзя запрграммировать на Delphi. Но не наоборот.

Дык а я почти согласен. Они мне нравятся. Только эмбед счаз уходит от этих сред , уж больно трудоемко. А клиенты хотят подешевле, их качество не интересует. Кстати последняя фраза - не правильная. В дельфи тоже нет ничего такого, что бы нельзя было сделать в СИ :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Просто попробуй НЕ вызвать конструктор базового класса из конструктора своего. Пропробуй. 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Ну я прям так пробывать не побегу, но в дельфах, в частном случае наверное сгенериться какой нибудь эксепшн. А зачем так ? Каково утилитарное назначение таких действий ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А тама смысл в том, что можно НЕ вызывать конструктор родителя, Полностью переопределив инициализацию класса. И безо всяких эксепшенов. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не пиши в конструкторе inherited, и будет щастя.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Мое мнение: для Desktop Win32+Any DB  ничего лучше Delphi - нету. Даже шарп не дотягивает. Там тоже все быстро, канеш, но через призму микрософт получается как клизьма через гланды. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

И этта, я не хотел бы разводить здесь срачь, С++ vs Delphi.  Все что можно, уже написано. Для каждой задачи -свой струмент. Мня вот сын прижал с ардуинами, вспоминаю и С++. Добьет FreePascal свой компилятор под AVR, не буду стрелять себе в ногу, перейду на него. 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Я бы тоже с удовольствием перешол на Делфи. Это мой первый язык на котором учился программировать. Для меня он удобнее, Не в обиду С++.

Добьет FreePascal свой компилятор под AVR,.  не плохо было бы если бы еще и библиотеки написанные на С++ можно было бы портировать в делфи среду, ну чтото типа АТМЕЛ Студии. цены бы не было.....

b707
Offline
Зарегистрирован: 26.05.2017

Baks пишет:

Я бы тоже с удовольствием перешол на Делфи. Это мой первый язык на котором учился программировать. Для меня он удобнее, Не в обиду С++.

Я тоже начинал на Дельфи... точнее на ТурбоПаскале, дельфи тогда еще не было. Но как-то не стремлюсь на него вернуться.

Предпочитаю Си. Си хорош своей распространенностью. Если какая-та система поддерживает только один язык - часто это Си. Если несколько языков - один из них ОБЯЗАТЕЛЬНО Си. А паскаль? где он? Этот как единственным иностранным выучить, к примеру, немецкий. Оно, конечно, круто... но английский лучше. В Германии на английском вы худо-бедно обьяснитесь, а в англии на немецком?

В принципе, не очень понимаю этих холиваров. Зная один язык программирования. довольно несложно перейти на другой. Я пробовал писать на Си. Паскале, Перле, Яве, питоне... Иногда одновременно...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

Baks пишет:

Я бы тоже с удовольствием перешол на Делфи. Это мой первый язык на котором учился программировать. Для меня он удобнее, Не в обиду С++.

Я тоже начинал на Дельфи... точнее на ТурбоПаскале, дельфи тогда еще не было. 

А я - на Фортране. Турбо-Паскаля (не говоря о Делфи) тогда еще не было.

Цитата:

В принципе, не очень понимаю этих холиваров. Зная один язык программирования. довольно несложно перейти на другой. Я пробовал писать на Си. Паскале, Перле, Яве, питоне... Иногда одновременно...

Так на то они и "холи-", что дело именно в религии, а не в практическом смысле.

Вообще же дело не в том, что Вы "знаете один язык программирования", а в том, что Вы умеете программировать. Научиться программировать - нужно не менее двух лет, а новый язык программирования можно освоить за пару недель. При освоении первого языка Вам нужно одновременно учиться программировать, а второго - уже нет.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

DetSimen пишет:

Мое мнение: для Desktop Win32+Any DB  ничего лучше Delphi - нету. Даже шарп не дотягивает. Там тоже все быстро, канеш, но через призму микрософт получается как клизьма через гланды. 

ой, ой девушка, ... смех да грех, не вздумайте это произнести в среде людей, действительно реально работающих в среде нет, пардон за тавтологию

Rix1970
Offline
Зарегистрирован: 16.06.2022

Здравствуйте. Я - новичок в программировании Arduino, у меня такой вопрос.
Каким образом по COM-порту (он - виртуальный?) можно осуществлять обмен данными между Delphi-программой на процессоре Intel® Celeron® J4105, Quad-Core 1.5-2.5GHZ и скетчем Arduino.ru на сопроцессоре Integrated Arduino Coprocessor ATSAMD21 ARM® Cortex®-M0+ в одноплатном компьютере ODYSSEY - X86J4105 (https://wiki.seeedstudio.com/ODYSSEY-X86J4105-GPIO/)?
У нас пока нет экземпляра такого компьютера, но мы планируем приобрести его (стоимость порядка 20 тыс. руб.), но для этого нужно предварительно убедиться, что из Delphi точно можно посылать сообщения в Arduino (по виртуальному COM-порту?).
На сайте https://wiki.seeedstudio.com/ODYSSEY-X86J4105 я не нашел примера кода.
Моя попытка написать скетч:

 

int incomingByte = 0;   // для хранения полученного байта
int ledPin = 13;                 // Светодиод, подключенный к вход/выходу 13
 
void setup() {
    Serial.begin(9600); // устанавливаем последовательное соединение
    pinMode(ledPin, OUTPUT);      // устанавливает режим работы - выход
}
 
void loop() {
    if (Serial.available() > 0) {  //если есть доступные данные
        // считываем байт
        incomingByte = Serial.read();

        //... Обработка кода incomingByte
        if (incomingByte) // А вообще в Arduino можно, например, написать снятие маски if (incomingByte & 0x1)?
        digitalWrite(ledPin, HIGH);   // включает светодиод
    }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

и как, работает?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Поставь вот эти компоненты

https://github.com/TurboPack/AsyncPro

и пользуйся на здоровье

Я получаю данные с заоконного термометра на комп  через беспроводное соединение на двух JDY-40, которые ведут себя как простой Serial (виртуальный).  Частичный код

procedure TForm2.FormShow(Sender: TObject);
begin
  Serial.InitPort;
  Serial.FlushInBuffer;
  Serial.FlushOutBuffer;
  InputString:=EmptyStr;
  Self.Left:=(Screen.Width - Self.Width) div 2;
  Self.Top:=10;
  ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm2.SerialTriggerAvail(CP: TObject; Count: Word);
var ch: AnsiChar;
begin
     ch := Serial.GetChar;
 
     if (ch > #31)
       then Perform(msg_SerialSend, int32(ch),0)
       else begin 
           if (ch = #10) then Perform(msg_SerialEnd,0,0);
       end;

end;

Картинка зимняя: 

 

Rix1970
Offline
Зарегистрирован: 16.06.2022

Мне сейчас непонятно, как обращаться из Delphi к такому COM-порту в Одиссее. Как к 'COM1'? Утащил из проекта на Delphi пример старого кода, который работал на обычном компьютере x86 с COM-портом:


uses CPort;
FCommPort: TComPort;

procedure DoInit;
begin
    FFailState := mdsReady;
    if FCommPort.Connected then
        FCommPort.Close;
    FCommPort.Port := 'COM1';
    FCommPort.BaudRate := FBaudRate;
    FCommPort.Stopbits := sbOneStopBit;
    FCommPort.Databits := dbEight;
    try
        FCommPort.Open;
        DoInitCommand;
    except
        MessageBox(0, PChar(Format('Ошибка инициализации порта COM %d',
            1)), 'Ошибка', MB_ICONERROR or MB_OK);
    end;
end;

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Rix1970 пишет:

Мне сейчас непонятно, как обращаться из Delphi к такому COM-порту в Одиссее. Как к 'COM1'?

Какой порт ему система назначит, к такому и будешь обращаться

Rix1970
Offline
Зарегистрирован: 16.06.2022

b707 пишет:

и как, работает?

Не знаю, пока еще не приобрели этот одноплатный компьютер ODYSSEY-X86J4105.

Rix1970
Offline
Зарегистрирован: 16.06.2022

DetSimen пишет:

Rix1970 пишет:

Мне сейчас непонятно, как обращаться из Delphi к такому COM-порту в Одиссее. Как к 'COM1'?

Какой порт ему система назначит, к такому и будешь обращаться

А как узнать, какой порт система назначит?

sadman41
Offline
Зарегистрирован: 19.10.2016

Зачем вам этот ПК, если даже простую инфу не можете найти?
https://yandex.ru/ < "ODYSSEY-X86J4105 обзор"

Rix1970
Offline
Зарегистрирован: 16.06.2022

sadman41 пишет:
Зачем вам этот ПК, если даже простую инфу не можете найти? https://yandex.ru/ < "ODYSSEY-X86J4105 обзор"

Прошу прощения, затупил.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я думаю, не стОит твоей конторе покупать этот Одиссей.  С таким программистом - деньги на ветер. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Я думаю, не стОит твоей конторе покупать этот Одиссей.  С таким программистом - деньги на ветер. 

 да ладно, пришлёт тебе, ты за гроши напишешь. что им надо, плата то заманчивая )))

 

 

 

vlad1451
Offline
Зарегистрирован: 09.11.2015
Добрый день. Застрял с одним вопросом. Есть устройство на микроконтроллере, которое передаёт в Com порт пакет данных. В пакете есть разделители строк (0А, то есть #10). Как правильно отлавливать данные байты. что бы Memo делал перевод строки? Принимается всё в Memo, работа с Com портом через компонент BComPort.
Данные имеют вот такой тип:
0A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A54 65 73 74 20 62 6F 61 72 64 20 4D 65 67 61 32 35 36 30 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D61 69 6E 20 70 61 72 61 6D 65 74 65 72 73 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D0A

Пытаюсь "выловить" так:

procedure TForm1.BComPort1RxChar(Sender: TObject; Count: Integer);
var
  S : String;
  Y, L : Integer;
 begin
    BComPort1.ReadStr(S, Count);  
     if CRLF.Checked and (S[Length(S)] = #13) then 
       begin
          S := S + #10;
          RzMemo1.Text := RzMemo1.Text + S;
     end;
 end;

Перепробовал кучу комбинаций, но перевод строки так и не заработал.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У тя #13($0D) в вышеупомянутом тексте нету, только #10($0A).  Вот его и лови

TeodorNetto
TeodorNetto аватар
Offline
Зарегистрирован: 03.06.2021

DetSimen пишет:

У тя #13($0D) в вышеупомянутом тексте нету, только #10($0A).  Вот его и лови

Идиот. Тебя не об том спрашивают