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