Как заставить светодиоды включаться в соответствии с непрерывным вводом Python?
Я пытаюсь сделать тюнер. К плате Arduino подключены 3 светодиода, каждый из которых соответствует одной ситуации (слишком высокий, низкий или правильный).
Python обрабатывает обнаружение ноты в соответствии с входным сигналом микрофона и определяет, какой светодиод должен быть включен, но поскольку это живой тюнер, Python отправляет информацию довольно быстро.
Я придумал, как включать светодиоды по одному и держать их включенными до тех пор, пока входной сигнал не изменится, но это работает только на низкой скорости, когда я делаю это вручную с помощью программы на Python, например, такой:
code=1
while code!=0:
code=input("Code?")
ser.write(code.encode('utf-8'))
Если я попробую сделать это с помощью кода Python, например:
code= '5'
while 1:
ser.write(code.encode('utf-8'))
тогда светодиоды просто остаются выключенными.
Вот мой код Arduino:
int hauteur = 0;
void setup() {
pinMode (2, OUTPUT); //красный штифт
pinMode (6, OUTPUT); //зеленый вывод
pinMode (5, OUTPUT); //желтый пин
Serial.begin(9600);
}
void loop() {
if(Serial.available ()) {
hauteur = Serial.parseInt();
while (hauteur==2) {
(digitalWrite(2,HIGH));
if (Serial.available ()) { hauteur=Serial.parseInt(); }
}
digitalWrite(2,LOW);
while (hauteur==5){
(digitalWrite(5,HIGH));
if (Serial.available ()) { hauteur=Serial.parseInt(); }
}
digitalWrite(5,LOW);
while (hauteur==6){
(digitalWrite(6,HIGH));
if (Serial.available ()) { hauteur=Serial.parseInt(); }
}
digitalWrite(6,LOW);
Serial.flush();
}
}
Если 2, 5 или 6 получены с достаточным интервалом между ними, то плата делает то, что должна делать, и включает соответствующий светодиод. Как мне сократить этот необходимый промежуток времени, чтобы получить изменение света в реальном времени, как у живого тюнера?
@sheyy_dt, 👍-1
Обсуждение1 ответ
Вам не нужно парсить Int для одной цифры. Используйте Serial.read().
hauteur = Serial.read() - 48; // 48 — это ascii-код «0»
или лучше отправлять байты из python, а не цифровые символы
- Последовательная связь Arduino с Python: отправка массива
- Сброс последовательного порта Arduino в последовательном мониторе и Python
- Реализовать связь Visible Light с помощью Arduino
- Serial Comm. проблема синхронизации между Arduino и Pyserial
- Последовательная связь между python и arduino
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- серийные данные портятся
- Акцептант векселей ИКТ
Попробуйте отправить не только число, но и завершающий нецифровой символ в качестве разделителя (например, "\n" символ новой строки), @chrisl
для чего Serial.flush()? вы ничего не выводите на Serial in loop(), @Juraj
создайте две переменные. текущий вывод и следующий вывод. прочитайте значение следующего вывода и ничего не делайте, если следующий вывод такой же, как текущий вывод. если они отличаются, установите для следующего вывода высокий уровень, для текущего вывода низкий уровень и установите для текущего вывода значение следующего вывода., @Juraj
Ваш код Arduino очень плохо отформатирован, и поэтому его трудно читать... пожалуйста, исправьте отступы......... Ваш второй фрагмент кода Python также имеет плохие отступы, и он не будет работать так, как ожидается, @jsotola