Не получается вызвать функцию

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Занимаюсь недавно. Изучаю как могу. 

Проблема в том, не могу вызвать функцию с кнопок. С клавиатуры все получается, а вот с кнопки никак не могу. 

 #include <Wire.h>

byte L = 0b00000010;
#define TDA 0x45
#define MAD_L 0x02
void LPlus(){
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
void LMinus(){
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {
  pinMode(10,INPUT);
  pinMode(9,INPUT); 
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
  Serial.begin(9600);
}
 
void loop() {
  boolean plus = digitalRead(10);
  boolean minus = digitalRead(9);
 if (Serial.available()){
  if(plus==1) digitalWrite(LPlus(););
  if(minus==1) digitalWrite(LMinus(););
    Serial.print('-');Serial.print (plus);
    Serial.print('+');Serial.print (Minus); }}
sadman41
Offline
Зарегистрирован: 19.10.2016

Так же проблема в том, что код в таком виде скорее всего не будет комментировать и, даже, возможно что и читать.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну да , а еще не придумывайте "свой синтаксис Си"   if(plus==1) digitalWrite(LPlus(););. Пользуйтесь традиционным синтаксисом  .

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Aleksey4574 пишет:

  if(plus==1) digitalWrite(LPlus(););
  if(minus==1) digitalWrite(LMinus(););

Да, сурово...

Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками? 

bwn
Offline
Зарегистрирован: 25.08.2014

asam пишет:

Aleksey4574 пишет:

  if(plus==1) digitalWrite(LPlus(););
  if(minus==1) digitalWrite(LMinus(););

Да, сурово...

Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками? 

Так что непонятного то, записать в номер пина, который вернет не возвращающая функция, неизвестный уровень или наоборот.))))

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Я ж написал что недавно занимаюсь. Что обсирать то сразу

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

С комментариями конечно беда. Сегодня допишу

bwn
Offline
Зарегистрирован: 25.08.2014

А про синтаксис почитать, прям на этом форуме, не?

Да, и головную тему в "песочнице" почитайте, на всякий случай. 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

хорошо буду иметь ввиду

Aleksey4574
Offline
Зарегистрирован: 17.02.2019
/*регулировка громкости третьего канала 
 *для TDA 7448*/
#include <Wire.h>//подключение библиотеки
 
byte L = 0b00000010;//назначение переменной,и стартовая громкость третьего канала.
#define TDA 0x45//адрес микросхемы
#define MAD_L 0x02//адрес третьего канала
void LPlus(){//добавление громкости на 1
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
void LMinus(){//убавление громкости на 1
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {//отправка стартовых значений
Serial.begin(9600);
  Wire.begin();  
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
 
void loop() {//регулировка громкости через порт
 if (Serial.available()){
  int val = Serial.read();
  if(val=='1'){
   LPlus();
   Serial.print('+'); }
  if (val == '2'){
    LMinus();
    Serial.print('-');}}}
 
 
 
 
 
Это начальная прошивка. Все работает. 
Только вот на кнопки переделать не могу. 
И подсказать куда копать никто не может. 
Синтаксис. Дак где ж в этой куче найти это. 
sadman41
Offline
Зарегистрирован: 19.10.2016

Что совой об пень, что пнём об сову.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

ааа. шутки жуть

inspiritus
Offline
Зарегистрирован: 17.12.2012

Код запостите по правилам форума!!!!

bwn
Offline
Зарегистрирован: 25.08.2014

Aleksey4574 пишет:

ааа. шутки жуть

Так это вы шутник. Песочницу так и не почитали, бибис на сообщество положили, код номально не вставили, а теперь удивляетесь.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

так сразу так и сказали б. Обязательно перечитаю.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019
#include <Wire.h>//регулировка третьего канала

int plus=10;
int minus=9;
byte L = 0b00000010;//громкость третьего канала

#define TDA 0x45//адрес микросхемы

#define MAD_L 0x02//адрес канала

int LPlus(){//громкость +1
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
int LMinus(){//громкость -1
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {//начальная громкость 
  pinMode(plus,INPUT);
  pinMode(minus,INPUT); 
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
  Serial.begin(9600);
}

void loop() {//регулировка
if (Serial.available()){
int Plus; //переменная плюса
 Plus = LPlus();
int Minus; //переменная минуса
 Minus = LMinus();
 if (plus == HIGH){
  Plus;
  Serial.print('+');
 }
 if (minus == HIGH){
  Minus;
  Serial.print('-');
 }
 }}
 

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Никого не хотел обидеть. Иль навредить

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Суть . Есть уилитель 5.1. Управлялась пультом. Хотелось бы переделать на энкодер. Пытаюсь делать все поэтапно. Для начала один канал. 

Через COM порт получилось. Теперь пытаюсь сделать на кнопки. 

Проще конечно найти скеч для энкодера,да и прошивку подобрать.

Хочется самому сделать. И каждый этап понять. Возникают сложности. 

3 дня рою интернет,пока пришел только к этому.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

asam пишет:

Aleksey4574 пишет:

  if(plus==1) digitalWrite(LPlus(););
  if(minus==1) digitalWrite(LMinus(););

Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками? 

Так все таки - чего вы хотите получить использую этот код?

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

пытаюсь нажатием кнопки вызвать функцию

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Изучил if нужно фигурные скобки поставить. но не работает

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ну, вы ее вызываете (даже две ) а результата, то вы какого ожидаете?

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Функция плюс прибавляет бит а минус убавляет.  С каждым прибавленным битом громкость уменьшается,а убавленным увеличивается,судя из даташита TDA/ Так и работает через COM

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот загадочные у вас строки 44 и 48.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

Точнее при нажатии одной кнопки добавляется,при нажатии другой убавляется

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

прочитал что функции мжно присвоить переменную. Или я что то не так сделал?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Aleksey4574 пишет:

прочитал что функции мжно присвоить переменную. Или я что то не так сделал?

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

// структура объявления функций не возвращающих значений
void /*имя функции*/(/*параметры функции*/) // заголовок функции
{
// тело функции
}
// структура объявления функций возвращающих значения
/*возвращаемый тип данных*/ /*имя функции*/(/*параметры функции*/) // заголовок функции
{
// тело функции
 return /*возвращаемое значение*/;
}

http://cppstudio.com/post/396/

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

11 

19

изначально были void

Тогда выдает ошибку на 42 строчке

 

bwn
Offline
Зарегистрирован: 25.08.2014

Синтаксис вы тоже не читали.
Поясняю, в начале цикла вы объявляете две переменные. Даже не учитывая то, что дальше вы с ними делаете что-то непонятное, цикл ходит по кругу (очень быстро для млекопитающих) и в каждом заходе инициирует их заново. Наводит на мысли?

P/S Либо проморгал, либо код поменяли, но это стало неважным, за исключением скорости.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

То есть переменные нужно было обьявить в начале кода?

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Aleksey4574 пишет:

То есть переменные нужно было определить в начале кода?

 

Тип переменой в начале и обязательно вернуть return-ом хоть в конце, хоть в середине.

int func() {
  int a = 5;
  return a;
}
int b;
void setup() {
b=func();
}
void loop() {
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

Aleksey4574 пишет:

То есть переменные нужно было обьявить в начале кода?

Не, return;

inspiritus
Offline
Зарегистрирован: 17.12.2012

Если функция не обьявлена void, значит Вы что то хотите из нее возвращать.Вы и присваиваете ея инту.

только вот функция возаращает директивой return. У Всс её не нашел.

а как Вы думаете, что и как Ваши Lplus и Lminus возвращают?

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

то есть при обьявлении переменной в начале кода функция loop ее не задействует пока не вернешь ее 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Внутри функции должно быть например

return 5;

тогда при

minus =LMinus; 

Minus станет равным 5

bwn
Offline
Зарегистрирован: 25.08.2014

Aleksey4574 пишет:

то есть при обьявлении переменной в начале кода функция loop ее не задействует пока не вернешь ее 

Она ее инициирует рандомным значением (почитайте про глобальные и локальные переменные, а также static), а чтобы присвоить ей значение из функции, та должна что-то вернуть командой return.

inspiritus
Offline
Зарегистрирован: 17.12.2012

И вообще незаметно , как Вы обрабатываете энкодер.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

пока я пытаюсь сделать один канал на 2 кнопки. Что бы понять как конкретно этим управлять. Потом энкодер 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Aleksey4574 пишет:

пытаюсь нажатием кнопки вызвать функцию

И каким боком функция digitalWrite() к нажатию кнопки? Может Вы таки почитаете её описанеие? Заодно почитайте описание функции digitalRead(). Найдите между ними разницу.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

спасибо. получилось

#include <Wire.h>//регулировка третьего канала
int val1 = 0;
int val = 0;
int plus = 10;
int minus = 9;
byte L = 0b00000010;//громкость третьего канала

#define TDA 0x45//адрес микросхемы

#define MAD_L 0x02//адрес канала

void LPlus(){//громкость +1
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
void LMinus(){//громкость -1
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {//начальная громкость 
  pinMode(plus,INPUT);
  pinMode(minus,INPUT); 
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
  Serial.begin(9600);
}

void loop() {//регулировка
val = digitalRead(plus);
val1 = digitalRead(minus);
if (val==1){
  LPlus();
  Serial.print('+');
}
if (val1==1){
  LMinus();
  Serial.print('-');
}
 }
 

 

bwn
Offline
Зарегистрирован: 25.08.2014

А после ифов, вы фигурные скобки все же ставьте, пусть и в одну строчку написано. Автоматизм частенько полезен. ИМХО.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

спасибо

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

теперь проблема в том что на COM порт выводит значения, а вот в TDA они не пишутся

sadman41
Offline
Зарегистрирован: 19.10.2016

Потому что Wire.begin() Пушкин уже замахался делать за всех и уехал на ПМЖ в Европу.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019
#include <Wire.h>//регулировка третьего канала
int val1 = 0;
int val = 0;
int plus = 10;
int minus = 9;
byte L = 0b00000010;//громкость третьего канала

#define TDA 0x45//адрес микросхемы

#define MAD_L 0x02//адрес канала

void LPlus(){//громкость +1
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
void LMinus(){//громкость -1
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {//начальная громкость 
 Serial.begin(9600);
  Wire.begin();
  pinMode(plus,INPUT);
  pinMode(minus,INPUT); 
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
  Serial.begin(9600);
}

void loop() {//регулировка
//if (Serial.available()){
val = digitalRead(plus);
val1 = digitalRead(minus);
if (val==1){
  LPlus();
  Serial.print('-');
}
if (val1==1){
  LMinus();
  Serial.print('+');
}
 }
 

 

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

спасибо получилось. только все резко

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

delay(100): в loop() отсутсвует.

sadman41
Offline
Зарегистрирован: 19.10.2016

Давите дребезг, изменяйте значение громкости только по изменению состояния кнопки, а не постоянно, пока она нажата.

Aleksey4574
Offline
Зарегистрирован: 17.02.2019
#include <Wire.h>//регулировка третьего канала
int val1 = 0;
int val = 0;
int plus = 10;
int minus = 9;
byte L = 0b00000010;//громкость третьего канала

#define TDA 0x45//адрес микросхемы

#define MAD_L 0x02//адрес канала

void LPlus(){//громкость +1
  if (L < 0b11111111) L++; 
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission(); 
}
void LMinus(){//громкость -1
  if (L > 0b00000000) L--;
Serial.print(L,BIN);
  Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
}
void setup() {//начальная громкость 
 Serial.begin(9600);
  Wire.begin();
  pinMode(plus,INPUT);
  pinMode(minus,INPUT); 
Wire.beginTransmission(TDA);
  Wire.write (MAD_L);
  Wire.write (L);
  Wire.endTransmission();
  Serial.begin(9600);
}

void loop() {//регулировка
//if (Serial.available()){
val = digitalRead(plus);
val1 = digitalRead(minus);
if (val==1){
  delay(300);
  LPlus();
  Serial.print('-');
}
if (val1==1){
  delay(300);
  LMinus();
  Serial.print('+');
}
 }
 

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

спасибо

 

Aleksey4574
Offline
Зарегистрирован: 17.02.2019

это уже завтра. время 00:30