Теряется связь с ком-портом ардуино Uno при работе

werder1
Offline
Зарегистрирован: 29.06.2017

Добрый день.
В плату Arduino Uno загружен скетч, который считывает (примерно 4 раза в секунду) поворот колесика от мыши и передает данные через Сom-port на ПК с помощью стандартного usb-кабеля. Вращение колеса в первые несколько минут выдает результат на ПК хорошо, без сбоев, но через некоторое время (через минуты 3 или 4) теряется свзяь с com-портом, и ардуино пишет "Com7 не найден", хотя ПК видит все время нужный порт в диспетчере устройств и при перезагрузке ардуино (если вытащить/вставить кабель usb) проблема исчезает (но данные в это время теряются!). А данные нужно считывать без сбоев на протяжении 10 минут. Битрейт в Serial менял, не помогает. Программа не содержит циклов и не зацикливается. Как можно решить проблему сбоев, связанных с потерей связи с ком-портом? 

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

Хрустальный шар нам протереть и настроить.А то упорно показываетошибкуу в хз какой строке

werder1
Offline
Зарегистрирован: 29.06.2017
Исходный код программы:
1)	byte AInput = 2;
2)	byte BInput = 3;
3)	byte lastState = 0;
4)	int steps = 0; // счетчик угла поворота
5)	int  cw = 0; // направление поворота
6)	byte AState = 0;
7)	byte BState = 0;
8)	byte State = 0;
9)	unsigned long currentTime=0;
10)	unsigned long loopTime=0;
11)	
12)	void doEncoderA(){ // процедура вычисления угла поворота и направления поворота
13)	 AState = digitalRead(AInput);
14)	BState = digitalRead(BInput) << 1;
15)	State = AState | BState;
16)	if (lastState != State){
17)	switch (State) {
18)	 case 0:
19)	if (lastState == 2){
20)	steps++; 
21)	cw = 1; // по часовой стрелке
22)	delay(50);}
23)	 else if(lastState == 1){
24)	 steps--;
25)	 cw = -1; // против часовой стрелки
26)	delay(50);}
27)	break;
28)	case 1:
29)	if (lastState == 0){
30)	steps++;
31)	 cw = 1;
32)	delay(50); }
33)	else if(lastState == 3){
34)	steps--;
35)	cw = -1;
36)	delay(50);}
37)	break;
38)	case 2:
39)	if (lastState == 3){
40)	steps++;
41)	cw = 1;
42)	delay(50);}
43)	else if(lastState == 0){
44)	steps--;
45)	cw = -1;
46)	delay(50);}
47)	break;
48)	 case 3:
49)	if (lastState == 1){
50)	steps++;
51)	cw = 1;
52)	delay(50);}
53)	else if(lastState == 2){
54)	steps--;
55)	cw = -1;
56)	delay(50); }
57)	break;} 
58)	lastState = State;
59)	 interrupts();}
60)	
61)	void setup() { // прерывания на цифровых пинах 2 и 3
62)	Serial.begin(57600);
63)	pinMode(AInput, INPUT);
64)	pinMode(BInput, INPUT);
65)	attachInterrupt(0, doEncoderA, CHANGE);
66)	attachInterrupt(1, doEncoderA, CHANGE);
67)	digitalWrite(AInput, HIGH);
68)	digitalWrite(BInput, HIGH);
69)	currentTime = millis();
70)	loopTime = currentTime; }
71)	
72)	void loop() { // вывод через ком-порт
73)	doEncoderA();
74)	currentTime = millis();
75)	 if(currentTime >= (loopTime + 50)){      
76)	delay(200);
77)	 Serial.print(steps);}
78)	loopTime = currentTime;}