Почему моя схема работает только тогда, когда я не использую последовательный порт?

Я новичок в работе с Arduino (и схемами в целом), поэтому, когда мне поручили создать простую кнопочную схему для управления состоянием светодиода и отправки сообщения обратно с помощью Serial.println( ), чтобы показать, что кнопка была нажата, я заметил, что светодиод тускло горит, когда я нажимаю кнопку, чтобы включить ее. Однако, когда я вообще не использую последовательный порт в своем коде, он работает идеально, как и ожидалось.

Мой код:

const int ledPort = 8; 
const int detPort = 7; 
void setup() {
  pinMode(ledPort, OUTPUT); 
  pinMode(detPort, INPUT); 
  digitalWrite(ledPort, HIGH); 
  Serial.begin(9600); 
}

void loop() {

  if (digitalRead(detPort) == HIGH) {
    digitalWrite(ledPort, LOW);
    Serial.println("9"); 
    delay(500); 
  }
  else {
    digitalWrite(ledPort, HIGH); 

Моя схема:

https://imgur.com/a/evP1O40

Моя плата: MEGA2560

, 👍-1

Обсуждение

Ваша схема не имеет никакого смысла. Можете ли вы нарисовать, как все это на самом деле связано вместе, на правильной схеме, а не на фотографиях, на которых трудно увидеть, что и куда?, @Majenko

Пожалуйста, [отредактируйте] свой вопрос, чтобы изображение было видно без необходимости переходить по ссылке., @the busybee


2 ответа


Лучший ответ:

0

Ваша цепь подключена неправильно.
Вам будет проще просто следовать этому официальному руководству, которое покажет вам, как использовать кнопку для включения светодиода. Даже если у вас есть мега, он вам подойдет.

Там вы увидите упрощенное изображение проводки: рисунок проводки

Кроме того, там есть правильный код:

/* Базовое цифровое чтение
* ------------------
*
* включает и выключает светодиод (LED), подключенный к цифровому
* контакт 13, при нажатии кнопки, прикрепленной к контакту 7. Он иллюстрирует
* концепция Active-Low, заключающаяся в соединении кнопок с помощью
* Подтягивающий резистор от 1 кОм до 10 кОм.
*
* Создано 1 декабря 2005 г.
* авторское лево 2005 DojoDave <http://www.0j0.org>
* http://arduino.berlios.de
*
*/

int ledPin = 13; // выбираем пин для светодиода
int inPin = 7;   // выбираем входной пин (для кнопки)
int val = 0;     // переменная для чтения состояния пина

void setup() {
  pinMode(ledPin, OUTPUT);  // объявляем светодиод как выход
  pinMode(inPin, INPUT);    // объявляем кнопку как вход
}

void loop(){
  val = digitalRead(inPin);  // чтение входного значения
  if (val == HIGH) {         // проверяем, является ли вход ВЫСОКИМ (кнопка отпущена)
    digitalWrite(ledPin, LOW);  // выключаем светодиод
  } else {
    digitalWrite(ledPin, HIGH);  // включить светодиод
  }
}

Схема очень важна Кроме того, когда вы пытаетесь посмотреть на картинку и построить схему, вы обнаружите, как трудно увидеть, как все взаимосвязано. Это поможет вам понять, насколько важной может быть простая схема.
Я попытался превратить изображение с сайта Arduino в схему, и моя интерпретация может быть неправильной, или фактическая схема, построенная на сайте Arduino, может быть неправильной. Если у кого-то есть замечания, я приму их во внимание.

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

схема

,

Последовательного резистора для светодиода нет..., @Sim Son

@SimSon Да, немного странно, что схема с сайта Arduino не добавляет ее. Это потому, что они просто вставили один контакт светодиода в GND, а другой — в PIN13 на разъеме Arduino., @raddevus

Ага, понятно. Они используют зеленый / синий светодиод, так что в этом случае это может быть хорошо. Не твоя вина..., @Sim Son


0

Ваша схема мне тоже непонятна :) Я не вижу, в частности, откуда светодиод получает заземление.

Попробуйте начать со схемы, показанной здесь, и сообщите об этом!

Удачи!

,