Перейти к содержанию
    

Зажигание светодиода при помощи кнопки

Я никогда не писал программы, занимался железом, поэтому сильно не пинайте за глупые вопросы.

Решил дома разобраться с ардуино. Плата - ARDUINO DUE. Задача - при нажатии кнопки должен загореться светодиод, а затем погаснуть. Время свечения задается с СОМ порта в секундах. Например, если хотим зажечь на 2 секунды, вводим "2". Кнопка подкючена к пину 6, светодиод - к пину 3. Код привожу полностью. Подскажите, в чем моя ошибка.

unsigned int time_on;
void setup() {
  pinMode(3, OUTPUT);
  pinMode(6, INPUT_PULLUP);
  Serial.begin(9600);
             }
void loop() {
  if (Serial.available()>0) {
  int in_data = Serial.parseInt();
    time_on=in_data;
                             }
                             
while(digitalRead(6)== LOW) {
    digitalWrite(3, HIGH);
    delay(1000*time_on);
    digitalWrite(3, LOW);
                             }
                     }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно описать, что происходит.

Светится светодиод или нет?

Как пересылаете числа в порт?

К тому же при нажатии "2" в порт передается ASCII код 50 а не 2.

https://www.ibm.com/docs/ru/sdse/6.4.0?topic=configuration-ascii-characters-from-33-126

Лучше использовать Serial.read()

https://www.arduino.cc/reference/en/language/functions/communication/serial/read/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/15/2022 at 4:12 PM, misyachniy said:

Лучше использовать Serial.read()

Я проверял с Serial.read, результат тот же. 

 

On 10/15/2022 at 4:12 PM, misyachniy said:

при нажатии "2" в порт передается ASCII код 50 а не 2.

Это мне понятно, потому я и использую функцию Serial.parseInt(), чтоб перевести char в decimal.

Выяснилось, что эта функция работает некорректно и после одного (или нескольких) правильных децимальных цифр посылает ноль. Соответственно Integer  time_on принимает нулевое значение, поэтому светодиод не загорается.

Я нашел готовый скетч который делает это корректно:  Here is the complete code to use Serial.read() to read in the enthe entire message и когда я вставил его вместо Serial.parseInt(), все заработало правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваша самая первая ошибка в том, что исходный текст должен быть правильно/аккуратно оформлен и вставляться через тег Code.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, v05 сказал:

Ваша самая первая ошибка в том, что исходный текст должен быть правильно/аккуратно оформлен и вставляться через тег Code.

А вторая - используете для отладки форум, а не отладочный вывод) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...