python+arduino

Тема в разделе "Arduino & Shields", создана пользователем Mishakolok, 30 июн 2015.

  1. Mishakolok

    Mishakolok Нуб

    Здравствуйте, решил написать программу на питоне, которая отправляла символ на ардуино, а тот печатал бы его на жк экране. Через монитор порта( который в IDE arduino) все работает, а вот когда через программу получается бред. Что моем коде не так?
    Python:
    Код (Text):
    import serial
    port='COM4' #называем порт
    name=raw_input("Input:")
    ser=serial.Serial(port,9600)
    ser.write(name) #отправляем
    print ser.readline() #получаем ответ от ардуино
     
    Arduino
    Код (Text):
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600); //connecting
    }
    char n=' ';
    void loop() {
    if(Serial.available()){  //looking for symbol
      lcd.begin(16,2);
      n=Serial.read(); //found it
      lcd.print(n);  //print
      Serial.println(n);  //sending to computer
      delay(5000);
      lcd.clear();

    }
    }
     
  2. Limoney

    Limoney Гик

    Монитор порта IDE arduino добавляет при передачи символы завершения строки. Список настроек символов завершения строки рядом со списком скорости передачи. У тебя отправляется не символ, а строка.
    Код (Text):
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

    String inString = "";
    char inChar;

    void setup() {
      // put your setup code here, to run once:
      inString.reserve(16); // резервируем 16 символов
      lcd.begin(16, 2);
      Serial.begin(9600); //connecting
      delay(100);
    }

    void loop() {
      while (Serial.available()>0) {
        inChar = (char)Serial.read(); // прочитать символ
        if (inChar != '\n') {
          inString = inString + inChar; // добавляем символ к строке
        } else {
          lcd.print(inString); // выводим строку на LCD
          Serial.println(inString);
          inString = "";  // обнуляем строку для следующего чтения
          delay(5000);
          lcd.clear();
        }
      }
    }
     
  3. Mishakolok

    Mishakolok Нуб

    Я в мониторе выставил "без новой строки", но даже с твоим кодом у меня не получается через python. Но все равно спасибо.
     
  4. geher

    geher Гуру

    Возможно, просто не согласованы параметры последовательного порта (количество бит данных, стоповых бит, наличие контроля четности, способ управления потоком). Надо либо задать для порта в системе значения по умолчанию или явно указать параметры при открытии порта.
    Я при доступе к ардуине через БТ использовал такое:
    Код (Text):
    ser=serial.Serial(port,9600, timeout=1, xonxoff=False, dsrdtr=False, interCharTimeout=False)