Проблема с Arduino и pySerial

1

У меня проблема. Недавно я купил доску Arduino Uno. Я попытался сделать что-то смешное, как контроль ввода с моего компьютера. Я использовал Python с pySerial, и программа следующая:

arduino = serial.Serial(portaCOM, 9600, timeout = 1)
... in loop ->
arduino.write(value)


  def sliderUpdate(self, event):
        pos = self.slider.GetValue()
        arduino.write(pos)
        time.sleep(.1)
        print arduino.readline()

try:
    arduino = serial.Serial(portaCOM, 9600, timeout = 1)
except:
    print "Errore di connessione alla porta seriale"

Значение записи должно отправить значение моей плате через USB. Загруженная на борту программа:

 const int ledPin = 11;
 byte brightness;

 void setup(){
     Serial.begin(9600);
     pinMode(ledPin, OUTPUT);
 }

 void loop(){
     while(Serial.available()){
         brightness = Serial.read();
         Serial.print(brightness);
         analogWrite(ledPin, brightness); //LED doesn't refresh the brightness
         delay(10);
     }
 }

Мой светодиод работает правильно. Я попытался с примером Fade, предоставленным Arduino, и он работает.

Я проверил, правильно ли программа передает данные. Да. Он возвращает то же, что и раньше.

Он должен получить отправленное значение и установить analaogWriter(pin, VALUE), но что-то не так или не работает.

Как я могу исправить эту проблему?

Решение

Код Arduino

const int ledPin = 11;
byte valoreLed;

void setup(){
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    while(Serial.available()){
        valoreLed = Serial.read();
        analogWrite(ledPin, valoreLed);
        delay(20);
    }
}

Код Python script:

pos = self.slider.GetValue()
arduino.write(chr(pos))

Спасибо всем!:)

  • 0
    Вы можете уточнить , что она делает? горит ли светодиод? это остается выключенным? Какие значения вы отправляете из Python? Можете ли вы добавить чтение в Python, чтобы убедиться, что значение возвращается к вам?
  • 0
    Также вы можете опубликовать больше своего кода на Python, возможно, у вас неправильный com-порт
Показать ещё 12 комментариев
Теги:
arduino
pyserial

5 ответов

2
Лучший ответ
  • Прежде всего, убедитесь, что ваш светодиод правильно подключен. Анод (более длинный штырь) к порту PWM 11 и катоду (более короткий контакт) к земле, также вам может потребоваться добавить резистор между катодом и землей в зависимости от светодиода.
  • Убедитесь, что вы пишете правильный порт с python (с которым связан кабель FTDI в вашей ОС).
  • Если вы не используете кабель FTDI с разъемом USB, убедитесь, что все контакты подключены к правильным входам.
  • Каково значение value в вашем примере? Попробуйте arduino.write(chr(0xFF)), горит ли светодиод?
  • 0
    все работает, это только проблема кода .. для 4) .. когда я посылаю chr (0xFF), светодиодный индикатор не светится
  • 0
    Я сделал ошибку .. с 0xFF остаться на максимуме .. читает значения в шестнадцатеричном формате ..
Показать ещё 1 комментарий
1

Я подозреваю, что arduino.readline() ждет новой строки, и код Arduino никогда не отправляет новую строку. Следовательно, код Python блокируется бесконечно после отправки первого значения.

1

Я вижу в ваших комментариях, что светодиод работает с первым символом, но вы не видите изменения с разными символами. Определенно убедитесь, что вы отправляете символы ASCII, которые значительно отличаются от предыдущих символов, например. отправьте ASCII 0, а затем ASCII 255.

Изменить: Поскольку вы говорите, что работает пример FadeLED, можете ли вы просто взять этот пример и добавить к нему функции последовательного порта? Например, только после получения последовательного символа исчезает. Это, по крайней мере, позволит вам убедиться, что последовательный порт и светодиоды могут сосуществовать в коде, который вы пишете. Кроме того, я предполагаю, что вы используете пример FadeLED из здесь. Если это так, убедитесь, что вы установили правильный номер контакта, поскольку ссылочный код использует контакт 9, но в вашем примере кода используется контакт 11.

Другое Редактирование: Вы говорите, что вы правильно возвращаете символы из Arduino, но вы используете функцию pySerial ReadLine, которая должна блокироваться до тех пор, пока не увидит новую строку, и я не вижу ничего в коде Arduino, который генерирует новую строку, которая сначала не был отправлен. Чтобы устранить количество переменных в вопросе, попробуйте использовать HyperTerminal или аналогичную программу COM-порта для отправки байтов в Arduino, а не в вашу программу Python. Например, вы можете отправлять символы пробела (ASCII 32) и "}" (ASCII 125), которые должны быть различны, чтобы создать видимую разницу в светодиоде.

  • 0
    Ну, я попробовал пример FadeLed, и он работает правильно ...
  • 0
    мы попробовали с другой простой программой, такой как fade, в примерах ad led работает отлично ... в python мы получаем ответ от arduino с правильным значением, которое мы ранее отправили ... но в этом случае analogwrite не обновляется
Показать ещё 2 комментария
0

"значение записи должно отправить значение на мою плату через USB"

Если это не опечатка, вы не можете использовать PySerial для доступа к USB-портам. Вместо этого есть pyUSB и, возможно, другие.

  • 1
    Arduino использует ftdi, который будет отображаться как com-порт и совместим с pyserial
0

Я бы начал с определения того, на какой стороне последовательного порта есть проблема.

Прежде всего, вы можете управлять светодиодом, используя жестко закодированный цикл на Arduino. Светодиод меняет свою яркость, как ожидалось?

Как только вы уйдете с пути, вы можете заставить Arduino сделать что-то явно правильное при отправке материала вручную из терминала (например, встроенного в IDE Arduino). Это может потребовать внесения изменений в код Arduino.

После этого я тогда сосредоточусь на коде Python, убедившись, что вы разговариваете с правильным COM-портами и т.д.

  • 0
    в Python мы получаем ответ от Arduino с правильным значением, которое мы ранее отправили .. но в этом случае analogwrite не обновляется
  • 0
    Ну, я попробовал, прежде чем просто включить светодиод. Затем я попробовал пример затухания, предоставленный Arduino ... все работает ... Теперь я пытаюсь передать нужные данные с помощью Python, и здесь у меня не получается.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню