Управление светодиодами с разных пиноы
- Войдите на сайт для отправки комментариев
Вс, 21/02/2021 - 17:24
написал код, при вводе в COM порт определенное значение загорается один и тот же светодиод
написал код посмотрите пожалуйста где может быть ошибка
#define RED 11
#define GREEN 10
#define BLUE5 9
#define BLUE4 8
#define BLUE3 7
#define BLUE2 6
#define BLUE1 12
#define BLACK 13
bool state = 0;
void setup() {
Serial.begin(19200);
pinMode(BLUE2, OUTPUT);
pinMode(BLUE1, OUTPUT);
pinMode(BLUE3, OUTPUT);
pinMode(BLUE4, OUTPUT);
pinMode(BLUE5, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(BLACK, OUTPUT);
}
void loop() {
while (Serial.available() > 0)
{
char val= Serial.parseInt();
if (Serial.read()-'\n'){
if (val < 2.5){
digitalWrite(BLUE1, HIGH);
delay(10000);
digitalWrite(BLUE1, LOW);
}
else if (val >= 2.5 && val < 4.0){
digitalWrite(BLUE2, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(BLUE2, LOW);
}
else if (val >= 4.0 && val < 6.0){
digitalWrite(BLUE3, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(BLUE3, LOW);
}
else if (val >= 6.0 && val < 7.3){
digitalWrite(BLUE4, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(BLUE4, LOW);
}
else if (val >= 7.3 , val < 12.0){
digitalWrite(BLUE5, HIGH);
Serial.println("Filter is working");
delay(500);
digitalWrite(BLUE5, LOW);
}
else if (val >= 12.0 && val < 14.5 ){
digitalWrite(GREEN, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(GREEN, LOW);
}
else if (val >= 14.5 && val < 21.5){
digitalWrite(RED, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(RED, LOW);
}
else if (val >= 21.5 && val < 30.0){
digitalWrite(BLACK, HIGH);
Serial.println("Filter is working");
delay(10000);
digitalWrite(BLACK, LOW);
}
}
Serial.flush();
}
}
в строке №ХЗ
Вот здесь.
А также в том, что Вы забыли написать, а что собственно Вы хотели сделать.
Ну,
Просто программер спрашивает у программера.... Я даже отвечать боюсь...
соррян,первый раз здесь,поэтому не сделал сразу
суть такая: к 6-13 цифровым пинам паралельно подключены биполярные транзисторы.Перед транзисторами стоят резисторы(собирал все по схеме).Каждый транзистор отвечает за срабатывание реле, тем самых начинает работать полосовой фильтр определенного диапазона.Каждый светодиод служит для указания того,что есть питание на данном участке цепи.
Идея была такая: писав определенное число, из конретного диапазона,должно подаваться питание только на тот участок,в котором данное число входит в диапазон.
Написав код,указанный ниже, при компиляции/загрузке в ардуино уно никаких ошибок нет,но при вводе любого числа срабатывает только 12 пин и питание подается только на один участок.
Но, вообще, меня заинтересовал этот приём:
if
(
Serial
.read()-
'\n'
)
Что он означает?
Но, вообще, меня заинтересовал этот приём:
Что он означает?
Насколько я понимаю - эквивалентно
Оригинальная, кстати, запись :-)
Насколько я понимаю - эквивалентно
Оригинальная, кстати, запись :-)
Я, конечно, не врач, но вот терзают мен сомнения по поводу эквивалентности)) Мне вообще тяжело представить, что там должно получиться при -'\n'
ну вообще это подразумевало,что после введения числа, передача в буфер будет окончена.
суть такая: к 6-13 цифровым пинам паралельно подключены биполярные транзисторы.
Насколько я понимаю, даже электронный элемент с двумя выводами можно подключить "параллельно", минимум, двумя способами. А при трех выводах количество способов существенно увеличивается. Это даже не говоря о том, что пины с 6 по 13 - это 8 штук, что также далеко от двух.
В общем, пока не разместите подробную схему, нет предмета для обсуждения.
Схема, конечно, хорошо, но указанная ТС ошибка в первую очередь обьясняется совершенно несуразным кодом. Ну правда, ведь прям начиная с первой строчки ЛУП каждая строка просто шыдевр :)
Чтобы сделать вывод о том, что это работать не будет - схема не требуется
Насколько я понимаю - эквивалентно
Оригинальная, кстати, запись :-)
Я, конечно, не врач, но вот терзают мен сомнения по поводу эквивалентности)) Мне вообще тяжело представить, что там должно получиться при -'\n'
if ('\n' - '\n') => if (0) => if (false)
if ('\r' - '\n') => if (3) => if (true)
if ('\t' - '\n') => if (-1) => if (true)
if ('\n' != '\n') => if (false)
if ('\r' != '\n') => if (true)
if ('\n' - '\n') => if (0) => if (false)
if ('\r' - '\n') => if (3) => if (true)
if ('\t' - '\n') => if (-1) => if (true)
if ('\n' != '\n') => if (false)
if ('\r' != '\n') => if (true)
Возьму на вооружение ))
Я, конечно, не врач, но вот терзают мен сомнения по поводу эквивалентности))
Давите Гада!
А то с этими сомнительными червяками дорефлексируетесь, как щедринский герой, которому вечно: «чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать» (М.Е. Салтыков-Щедрин, «Культурные люди»)
ну вообще это подразумевало,что после введения числа, передача в буфер будет окончена.
Слова понятны, а смысл воспринимается примерно так: https://youtu.be/bq6gMJgguHY
if ('\n' - '\n') => if (0) => if (false)
Если задумываешься (даже если взгляд задерживается на тексте), значит уже плохо!
Тем более, что нет никакой причины не писать просто.
написал код
Это не код
это дичайшая дичь
Arduino has a special float read function that you can use that will parse the data from the serial port.
https://www.arduino.cc/reference/en/language/functions/communication/serial/parsefloat/
as an example
// get the ASCII string and convert the resulting string into an floa
float value = Serial.parseFloat(SKIP_ALL, '\n');