Назрел вопрос определения при старте ардуинки определить есть ли связь с компьютером или нет. На уровне setup , далее должны быть 2 варианта развития события - автономная работа или работа под управлением ПК. но это уже потом и просто.
Пока не нашел как реализовать наличие проводной связи с ПК. serial в любом случае выдает тру, вне зависимости от типа подключения питания (юсб или ноги) , при попытке получить кол-во байтов записанных write в любом случае считается, что все пишется.
@Старик Похабыч, Если под управлением ПК, значит предполагается какой-то обмен. Значит при старте Дуина должна сказать: "Я здесь!". Комп должен ответить: "Ага, управляю!"
Если не отвечает - значит не подключён или управляющая программа не работает.
Есть такой вариант, но есть желание сделать по другому, но не факт что получиться. Просто без подключения плата уходит в цикл с пониженным питанием и не вернется. Выполнит свои задачи и выключится. Можно некоторое время ждать пароль-отзыв, но я пока не думал детально о такой реализации.
Сам монитор IDE перезапускает ардуину.. пробовать processing буду. но в ней я ноль. да и с ардуино всего то 4 месяца развлекаюсь
Кое что вытанцовывается, но не совсем так, как хотелось бы.
Вот скетч, который ждет "позывного" от ком порта при подключении в течении 5 секунд, и ,если дожидается, то работает в режиме 1, иначе в режиме 0
Ниже код для Pascal ABC, который открывает порты по мере доступности, и пишет в них "позывной" , это все черновики, пробы пера, но может кому то будет интересно. не знаю. Если не интересно, могу не делиться )
C++:
uses GraphABC,System.IO.Ports,Timers;
const
MaxComPOrts = 10;
function TestOnePort(sp: serialport): boolean;
begin
result := false;
end;
var
ports: array [1..MaxComPorts] of SerialPort;
portsGood: array [1..MaxComPorts] of boolean;
TestComs: timer;
procedure MyDraw;
const
DX = 10;
DY = -15;
HSZ = 64;
VSZ = 21;
VDY = 25;
begin
LockDrawing;
for var i := 1 to MaxComPorts do
begin
if portsGood[i] then
Brush.Color := clGreen
else Brush.Color := clRed;
FillRect(DX, DY + i * VDY, DX + HSZ, DY + i * VDY + VSZ);
Font.Color := clWhite;
Font.Style := fsBold;
Font.Size := 12;
TextOut(DX + 4, DY + i * VDY + 1, 'COM' + i.ToString);
end;
Redraw;
end;
procedure TestComPortEvent;
var
s: string;
begin
TestComs.Stop;
for var i := 1 to MaxComPOrts do
begin
try
portsGood[i] := true;
ports[i].open;
ports[i].Write('DENNIS');
ports[i].Close;
except
portsGood[i] := false;
end;
end;
MyDraw;
TestComs.Start;
end;
begin
MyDraw;
RedrawProc := MyDraw;
for var i := 1 to MaxComPorts do
ports[i] := new SerialPort('COM' + i.ToString);
TestComs := new Timer(1000, TestComPortEvent);
TestComs.Start;
end.
Кое что вытанцовывается, но не совсем так, как хотелось бы.
Вот скетч, который ждет "позывного" от ком порта при подключении в течении 5 секунд, и ,если дожидается, то работает в режиме 1, иначе в режиме 0
Ниже код для Pascal ABC, который открывает порты по мере доступности, и пишет в них "позывной" , это все черновики, пробы пера, но может кому то будет интересно. не знаю. Если не интересно, могу не делиться )
C++:
uses GraphABC,System.IO.Ports,Timers;
const
MaxComPOrts = 10;
function TestOnePort(sp: serialport): boolean;
begin
result := false;
end;
var
ports: array [1..MaxComPorts] of SerialPort;
portsGood: array [1..MaxComPorts] of boolean;
TestComs: timer;
procedure MyDraw;
const
DX = 10;
DY = -15;
HSZ = 64;
VSZ = 21;
VDY = 25;
begin
LockDrawing;
for var i := 1 to MaxComPorts do
begin
if portsGood[i] then
Brush.Color := clGreen
else Brush.Color := clRed;
FillRect(DX, DY + i * VDY, DX + HSZ, DY + i * VDY + VSZ);
Font.Color := clWhite;
Font.Style := fsBold;
Font.Size := 12;
TextOut(DX + 4, DY + i * VDY + 1, 'COM' + i.ToString);
end;
Redraw;
end;
procedure TestComPortEvent;
var
s: string;
begin
TestComs.Stop;
for var i := 1 to MaxComPOrts do
begin
try
portsGood[i] := true;
ports[i].open;
ports[i].Write('DENNIS');
ports[i].Close;
except
portsGood[i] := false;
end;
end;
MyDraw;
TestComs.Start;
end;
begin
MyDraw;
RedrawProc := MyDraw;
for var i := 1 to MaxComPorts do
ports[i] := new SerialPort('COM' + i.ToString);
TestComs := new Timer(1000, TestComPortEvent);
TestComs.Start;
end.
Успех есть. Переменный. Научился более корректно распознавать подключенный порт в виде существует он или нет, а так же занят он или свободен со стороны ПК.
Но несколько поменялась концепция самого устройства. Изначально предполагалась связка нано+сд-карта+термодатчик+акб, устройство при включении с заданным интервалом заданное время записывает температуру на карту. А если подключено к компу, то нет - режим передачи данных. Но получалось громоздко. В результате сделал аттини85+EEPROM на 8кб+18B20+LIPO на 90ма. Все работает, но для чтения данных приходиться снимать память и переставлять на программатор на ардуино_isp , с блоком чтения памяти.
Сейчас обдумываю куда двигаться дальше. как варианты подключение устройства к нано через шлейф без изъятия памяти с общением по софтсериал. Но это несколько увеличит размеры устройства..
Со стороны ПК нет определенности в голове как должно работать. В ИДЕАЛЕ подключить устройство, запустить программу (или наоборот). программа нашла устройство, считала данные. Там же в проге возможности поменять интервалы и время работы устройства. Но не нравится именно перемещение памяти с устройства на читалку...
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.