Всем привет Итак, имеется мега, к которой подключены различные датчики. При отправке в порт единички нам должны выдаваться данные, собранные с этих самых датчиков. Т.е. мы отправляем в порт единичку - а нам выводятся всякие значения с датчиков. Проблема в следующем - первые примерно 10 раз все работает прекрасно и данные выводятся. А вот после десятого ввода единички ничего уже не выводится, т.е. порт просто молчит, сколько бы единичек я не вводил. Из-за чего такое может быть?
Посмотрите отсюда. Работало. Вы не упомянули какой прогой из ПК данные гоните в Ардуино. Я когда прогу писал (Визуал Бейсик) для ПК, данные которой должен получать этот скетч - именно в ПК-шном коде появлялся затык после нескольких передач. И на Ардуину ничего не отправлялось. Пришлось повозиться. С год назад выкладывал на сайте тот код. Код (C++): * ************************************************** * Программа расширителя (размножителя) портов ПК. * * * ************************************************** */ String inputString = ""; // a String to hold incoming data String PinNum = ""; // a String number of Pin String Command =""; // a String name of command String PinVol =""; // a String volume of command bool stringComplete = false; // whether the string is complete int I, L; //========================================================================= void setup() { // put your setup code here, to run once inputString.reserve(200); // reserve 200 bytes for the inputString for (I = 2; I < 20; I++) { // конфигурирование выводов Ардуины pinMode(I, OUTPUT); digitalWrite(I, LOW); } Serial.begin(9600, SERIAL_8N1); } //========================================================================= void loop() { // put your main code here, to run repeatedly: if (stringComplete) { // Если строка получена полностью if (inputString.substring(0, 6) == "A-o-L ") { // Если строка начинается с "A-o-L " Command = inputString.substring(6, 9); // Выделяем команду PinNum = inputString.substring(9, 12); // Выделяем номер пина текстовый I = PinNum.toInt(); // Номер пина в виде переменной if (Command == "On ") { // Если на позиции стоит "On " digitalWrite(I, HIGH); } if (Command == "Off") { // Если на позиции стоит "Off" digitalWrite(I, LOW); } if (Command == "PWM") { // Если на позиции стоит "PWM" PinVol = inputString.substring(16); L= PinVol.toInt(); analogWrite(I, L); } Serial.print(Command); // print the string when a newline arrives: Serial.println(I); inputString = ""; // clear the string: stringComplete = false; } } } // Бесконечный цикл //========================================================================= /* SerialEvent occurs whenever a new data comes in the hardware serial RX. This routine is run between each time loop() runs, so using delay inside loop can delay response. Multiple bytes of data may be available. */ void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); // get the new byte inputString += inChar; // add it to the inputString if (inChar == '\n') { // if the incoming character is a newline, set a stringComplete = true; // flag so the main loop can do something about it: } } } //=========================================================================
Такая небрежность. Я уже чаще думаю на английском, чем на русском. Ну чтож тут поделаешь. В коде куски из справочной литературы, а в переводчики я не нанимался. Кому надо - переведет и английский под-учит.