Форум программистов, компьютерный форум, киберфорум
Микропроцессоры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Сергей 190
365 / 348 / 74
Регистрация: 18.03.2015
Сообщений: 1,293

Чтение из Arduino

18.03.2015, 13:00. Показов 1654. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа профессионалы! Не могу решить следующую проблему.
Есть АРДУИНО Nano. Ардуино управляет шаговыми двигателями. Из «внешнего приложения» необходимо отправить 5 байт (в моем случае переменная znak1). После исполнения команд Ардуино возвращает три байта (переменная znak). «Внешнее приложение» должно дождаться этих трех байт и только после этого отправить следующие (или сообщить об аварийном останове).

Сейчас пытаюсь просто отправить значения и их прочитать.
Нужные данные получаются только тогда, когда в строке 49 system("pause") и в строках 41, 44, 50 Sleep( ).
Если поиграться задержками Sleep( ) или убрать system("pause") – результат всегда разный. Подскажите, пожалуйста, что я делаю не так?
При работе из консоли стандартной среды Arduino проблем нет.
Пишу в devcpp - 4.9.9.2

И, для справки, после включения компьютера из «внешнего приложения» ардуино вообще не работает. После однократного запуска консоли стандартной среды все в порядке. Но этот глюк происходит с Ардуино Nano. С Ардуино Mega такого нет.

Код Ардуино
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
int count = 0, i=1, ii=1,iii=1, Simvol [9], Sim=0,zad=1,colih=1,znak;   
int NAPRX =8;   // Направление  подключен к выводу   L297 - 17
int SHAGX = 9;  // ШАГ  подключен к выводу  L297 - 18
int NAPRY =11;  // Направление  подключен к выводу   L297 - 17
int SHAGY = 10;     // ШАГ  подключен к выводу  L297 - 18
int NAPRZ =12;  // Направление  
int SHAGZ = 13;     // ШАГ  
int sss = 1; 
int str=0;
void setup()  {
pinMode (NAPRX, OUTPUT);
pinMode (SHAGX, OUTPUT);
pinMode (NAPRY, OUTPUT);
pinMode (SHAGY, OUTPUT);
pinMode (NAPRZ, OUTPUT);
pinMode (SHAGZ, OUTPUT);
Serial.begin (9600) ;          // открывается последовательный порт на скорости 9600
}
void loop() {
  Serial.flush(); 
count = Serial.available(); // Сколько получили байт
delay(1);
 
if(count > 3){
for ( i=0; i<5; i++){       // Читаем все данные из порта
Simvol [i]=Serial.read()- '0';      // читаем байт
}
 
 
for( ii=2; ii<5; ii++){     // обрабатываем команды
 
if (Simvol[ii] ==1){        //1-0.1..0.0..0.0   Первый вправо First right
digitalWrite(NAPRX,LOW);
digitalWrite(SHAGX,HIGH);  
}  
if (Simvol [ii]==2){        //2-1.1..0.0..0.0   Первый влево First left
digitalWrite(NAPRX, HIGH);
digitalWrite(SHAGX, HIGH);  
}  
if (Simvol[ii] ==3){        //3-0.0..0.1..0.0   Второй вправо Second to the right
digitalWrite(NAPRY, LOW);
digitalWrite(SHAGY, HIGH); 
}  
if (Simvol [ii]==4){        //4-0.0..1.1..0.0   Второй влево Second left
digitalWrite(NAPRY, HIGH);
digitalWrite(SHAGY, HIGH); 
}  
if (Simvol [ii]==5){        //5-0.0..0.0..0.1   Третий вправо Third right
digitalWrite(NAPRZ,LOW);
digitalWrite(SHAGZ, HIGH); 
}  
if (Simvol [ii]==6){        //6-0.0..0.0..1.1   Третий влево The third left
digitalWrite(NAPRZ, HIGH);
digitalWrite(SHAGZ, HIGH); 
}  
}
delay(5);
digitalWrite(NAPRX, LOW);   //0-0.0..0.0..0.0 Снять все импульсы
digitalWrite(SHAGX, LOW);
digitalWrite(NAPRY, LOW);   
digitalWrite(SHAGY, LOW);
digitalWrite(SHAGZ, LOW);
digitalWrite(NAPRZ, LOW);   
znak=Simvol[0]*100+Simvol[1]*10+1;
Serial.print (znak); 
Serial.flush(); 
}
}

Код С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <conio.h>  
#include <fstream>
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <Windows.h>    
using namespace std;    
char buf[5], buf2[5];
char* pcComPort= "COM9"; 
HANDLE hCom, hEvent;
DWORD bytesRead, bWritten, dwParam, dwThreadId, b; 
BOOL fSuccess;
HANDLE hThread; 
long znak1;
int proverka,pzn;
 
int main() {
setlocale (LC_ALL, "RUS");
ifstream F;
DCB dcb;
//FILE* fout;   
hCom=CreateFile(pcComPort, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);  // открывает ком-порт в синхронном режиме
 
if (hCom==INVALID_HANDLE_VALUE){
printf("Ohibka otkritia %s\n", pcComPort);
while(!kbhit());
return 1;
    }
 
printf("COM port %s OK\n", pcComPort);
//GetCommState(hCom, &dcb); // читает текущие настройки ком-порта
//printf("Ckorostporta %s = %d\n", pcComPort, dcb.BaudRate);
hEvent= CreateEvent(NULL, FALSE, FALSE, NULL);  //*********  порт открыт
 
for (proverka=23; proverka<35 ;proverka++){
znak1=proverka*1000;
    
sprintf(buf,"%d",znak1);   
WriteFile(hCom,buf,5,&b, NULL); //Пишем в порт
cout<<"Пишем в порт "<<buf[0]<<","<<buf[1]<<","<<buf[2]<<","<<buf[3]<<","<<buf[4];//,system("pause");             
Sleep(555);
 
if (ReadFile(hCom, buf2, 3, &bytesRead, NULL)){ // читает из порта массив байтов
Sleep(55);
    }
 
cout<<"  Читаем порт "<<buf2[0]<<","<<buf2[1]<<","<<buf2[2];
cout<< endl;
system("pause");  
Sleep(55);          
    if (bytesRead>2){
        pzn=buf2[2];        
            if (pzn==49){
            cout<< "да"<<endl;                            
            }   
            else {
            cout<< "  NET  "<<endl;
            }   
    }
//  Sleep(55);
 
 
}       
F.close();          //закрытие потока
CloseHandle(hCom);  //"закрывает" порт
system("pause");
return 0;               
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2015, 13:00
Ответы с готовыми решениями:

Чтение 1-Wire на Arduino
Есть ли готовые скейтчи для прослушки шины 1-wire?

Чтение Arduino в C#
Здравствуйте. Задача в том, чтобы заставлять ардуино работать в нескольких режимах. Имеется LCD keypad shield, с помощью его и выбираются...

Delphi + Arduino (чтение из порта)
Доброго времени суток ребята. Подскажите, в общем не могу понять почему не идет считывание с порта в программе var buffer: String;...

4
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.03.2015, 13:07
Сергей 190, нужно правильно дожидаться наличия данных для чтения. (Sleep - это не правильно)
Вот большая статья для вдумчивого прочтения.
Конкретно твой вопрос рассматривается начиная отсюда.
2
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
18.03.2015, 21:31
после включения компьютера из «внешнего приложения»
из какого внешнего приложения включается компьютер?
0
 Аватар для Сергей 190
365 / 348 / 74
Регистрация: 18.03.2015
Сообщений: 1,293
19.03.2015, 11:37  [ТС]
Не правильно построил предложение. Компьютер включается как обычно.
«Внешнее приложение» это и есть моя программа.
После включения компьютера, или перезапуска, или отключения и подключение ардуины нужно один раз обратиться к ардуино через консоль стандартной среды.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
19.03.2015, 14:25
...если из стандартного гипертерминала читается, проблема в вашем приложении, собственно повторяться смысла нет, все в посту #2.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2015, 14:25
Помогаю со студенческими работами здесь

Чтение последовательных данных Arduino
Здравствуйте. В мои задачи входит реализовать чтение компьютером данных из последовательного порта от Arduino. Данные представляют собой...

SrrialPort (прием данных из arduino) чтение первых 7 букв из 10
Здраствуйте, arduino mega через Serial.Write (&quot;1234567890&quot;) пишет в числа (не обязательно в таком порядке), , мне нужно чтоб приложение...

Чтение данных из arduino автоматически без участия пользователя
Суть в следующем. Есть код для Ардуины : void setup() { Serial.begin(9600); } void loop() { for(int x =...

Чтение данных с виртуального COM-порта, построение графиков (термодатчики и аппаратная на Arduino)
Приветствую всех. Знаю, многие (а то и все) будут ругаться на меня, неуч и прочее, но в эту тему (программирования) полез, т.к. так уж...

Модуль распознавания речи + Arduino Pro mini + Arduino MP3-Sheild
Список компонентов: 1).Модуль распознавания речи.(напряжение питания от 4,5 до 5,5 Вольт DC) 2).Реле - 1 (ID:16-32)(с цифровым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru