#1 2018-10-16 22:55:31

Extryng
Учасник
Зареєстрований: 2018-10-16
Повідомлень: 4

Не отключается выход, при получении false значения.

Screenshot_20181016-2210122.pngЗдравствуйте, только начал изучать arduino (с помощью Tinkencad). И уже запутался в нескольких строках кода.

Задание:

1) При значении потенциометра <500: мигает красный светодиод.

2) При значении потенциометра >500: светит зеленый светодиодные и работает двигатель.


Что не работает:

- Когда значение потенциометра возвращается в значение <500, не отключаются выхода: 2 и А1


Подскажите пожалуйста, в чем дело. Спасибо.



void setup()
{
  Serial.begin(9600);
  pinMode(A5, INPUT);
  pinMode(4, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(A1, OUTPUT);
}

void loop()
{
  int x = analogRead(A5);
 
  if (x < 500)
  {
  digitalWrite(4, HIGH);
  delay(1000);
 
  digitalWrite(4, LOW);
  delay(1000);
  }
 
  else
  {
    digitalWrite(2, HIGH);
    analogWrite(A1, 250);
  }
 
  Serial.println(x);
  delay(1000);
}

Остання редакція Extryng (2018-10-16 23:18:12)

Неактивний

#2 2018-10-17 06:51:30

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Не отключается выход, при получении false значения.

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

Неактивний

#3 2018-10-17 12:57:02

Extryng
Учасник
Зареєстрований: 2018-10-16
Повідомлень: 4

Re: Не отключается выход, при получении false значения.

Спасибо большое, за подсказку.
Уже работает (исправленный код - прикрепил).

smile




void setup()
{
  Serial.begin(9600);
  pinMode(A5, INPUT);
  pinMode(4, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(A1, OUTPUT);
}

void loop()
{
  int x = analogRead(A5);
 
  if (x < 500)
  {
  digitalWrite(4, HIGH);
  delay(1000);
 
  digitalWrite(4, LOW);
  delay(1000);
  }
 
else (x > 500);
  {
    digitalWrite(2, HIGH);
    analogWrite(A1, 250);

if (x < 500)
   
{
    digitalWrite(2, LOW);
    analogWrite(A1, 0);
  }
  }
 
  Serial.println(x);
  delay(1000);

}

Остання редакція Extryng (2018-10-18 22:51:46)

Неактивний

#4 2018-10-17 13:38:47

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Не отключается выход, при получении false значения.

else (x > 500);
Сначала код научитесь правильно вставлять!

Неактивний

#5 2018-10-17 22:28:45

Extryng
Учасник
Зареєстрований: 2018-10-16
Повідомлень: 4

Re: Не отключается выход, при получении false значения.

Спасибо - учусь wink

Если в:   else (x > 500)
Убрать точку с запятой, программа - выдает ошибку.

Хотя по инструкции там она не нужна, сам удивился. И заметил, что проскакивает на выход: 2, A1 какое-то незначительный напряжение.

In function 'void loop()':
26:3: error: expected ';' before '{' token
42:1: error: expected '}' at end of input

Остання редакція Extryng (2018-10-18 22:52:35)

Неактивний

#6 2018-10-18 19:46:07

lkj
Учасник
Зареєстрований: 2016-02-03
Повідомлень: 104

Re: Не отключается выход, при получении false значения.

const uint8_t LEDGREEN  = 2;
const uint8_t LEDRED     = 4;
const uint8_t MOTOR     = A1;
const uint8_t POTLIN     = A5;
const uint16_t DELAY     = 1000;
const uint16_t VALUEPOT = 500;
const uint16_t VALUEMOTOR = 250;

void setup() {
  Serial.begin(9600);
  pinMode(POTLIN, INPUT);
  pinMode(MOTOR, OUTPUT);
  pinMode(LEDGREEN,  OUTPUT);
  pinMode(LEDRED,  OUTPUT);
}

void loop() {
  uint16_t x = analogRead(POTLIN);
  if (VALUEPOT < x) {
    digitalWrite(LEDGREEN, LOW);
    analogWrite(MOTOR, LOW);

    digitalWrite(LEDRED, HIGH);
    delay(DELAY);
    digitalWrite(LEDRED, LOW);
    delay(DELAY);
  } else {
    digitalWrite(LEDGREEN, HIGH);
    analogWrite(MOTOR, VALUEMOTOR);
  }
  Serial.println(x);
  delay(1000);
}

Неактивний

#7 2018-10-18 22:56:45

Extryng
Учасник
Зареєстрований: 2018-10-16
Повідомлень: 4

Re: Не отключается выход, при получении false значения.

Большое спасибо, за код lkj - красиво написано !

Буду учиться smile

Неактивний

#8 2018-10-24 15:28:24

by_ruslan
Учасник
Зареєстрований: 2016-02-08
Повідомлень: 16

Re: Не отключается выход, при получении false значения.

а разве так возможно?
analogWrite(A1, 250);
разве на аналоговый порт можно записать?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму