Не получается вызвать функцию
- Войдите на сайт для отправки комментариев
Вс, 17/02/2019 - 23:58
Занимаюсь недавно. Изучаю как могу.
Проблема в том, не могу вызвать функцию с кнопок. С клавиатуры все получается, а вот с кнопки никак не могу.
#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); }}
Так же проблема в том, что код в таком виде скорее всего не будет комментировать и, даже, возможно что и читать.
Ну да , а еще не придумывайте "свой синтаксис Си" if(plus==1) digitalWrite(LPlus(););. Пользуйтесь традиционным синтаксисом .
if(plus==1) digitalWrite(LPlus(););
if(minus==1) digitalWrite(LMinus(););
Да, сурово...
Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками?
if(plus==1) digitalWrite(LPlus(););
if(minus==1) digitalWrite(LMinus(););
Да, сурово...
Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками?
Так что непонятного то, записать в номер пина, который вернет не возвращающая функция, неизвестный уровень или наоборот.))))
Я ж написал что недавно занимаюсь. Что обсирать то сразу
С комментариями конечно беда. Сегодня допишу
А про синтаксис почитать, прям на этом форуме, не?
Да, и головную тему в "песочнице" почитайте, на всякий случай.
хорошо буду иметь ввиду
Что совой об пень, что пнём об сову.
ааа. шутки жуть
Код запостите по правилам форума!!!!
ааа. шутки жуть
Так это вы шутник. Песочницу так и не почитали, бибис на сообщество положили, код номально не вставили, а теперь удивляетесь.
так сразу так и сказали б. Обязательно перечитаю.
Никого не хотел обидеть. Иль навредить
Суть . Есть уилитель 5.1. Управлялась пультом. Хотелось бы переделать на энкодер. Пытаюсь делать все поэтапно. Для начала один канал.
Через COM порт получилось. Теперь пытаюсь сделать на кнопки.
Проще конечно найти скеч для энкодера,да и прошивку подобрать.
Хочется самому сделать. И каждый этап понять. Возникают сложности.
3 дня рою интернет,пока пришел только к этому.
if(plus==1) digitalWrite(LPlus(););
if(minus==1) digitalWrite(LMinus(););
Объясните, пожалуйста, какого эффекта вы пытаетесь добиться вышеприведенными строками?
Так все таки - чего вы хотите получить использую этот код?
пытаюсь нажатием кнопки вызвать функцию
Изучил if нужно фигурные скобки поставить. но не работает
Ну, вы ее вызываете (даже две ) а результата, то вы какого ожидаете?
Функция плюс прибавляет бит а минус убавляет. С каждым прибавленным битом громкость уменьшается,а убавленным увеличивается,судя из даташита TDA/ Так и работает через COM
Вот загадочные у вас строки 44 и 48.
Точнее при нажатии одной кнопки добавляется,при нажатии другой убавляется
прочитал что функции мжно присвоить переменную. Или я что то не так сделал?
прочитал что функции мжно присвоить переменную. Или я что то не так сделал?
http://cppstudio.com/post/396/
11
19
изначально были void
Тогда выдает ошибку на 42 строчке
Синтаксис вы тоже не читали.
Поясняю, в начале цикла вы объявляете две переменные. Даже не учитывая то, что дальше вы с ними делаете что-то непонятное, цикл ходит по кругу (очень быстро для млекопитающих) и в каждом заходе инициирует их заново. Наводит на мысли?
P/S Либо проморгал, либо код поменяли, но это стало неважным, за исключением скорости.
То есть переменные нужно было обьявить в начале кода?
То есть переменные нужно было определить в начале кода?
То есть переменные нужно было обьявить в начале кода?
Не, return;
Если функция не обьявлена void, значит Вы что то хотите из нее возвращать.Вы и присваиваете ея инту.
только вот функция возаращает директивой return. У Всс её не нашел.
а как Вы думаете, что и как Ваши Lplus и Lminus возвращают?
то есть при обьявлении переменной в начале кода функция loop ее не задействует пока не вернешь ее
Внутри функции должно быть например
return 5;
тогда при
minus =LMinus;
Minus станет равным 5
то есть при обьявлении переменной в начале кода функция loop ее не задействует пока не вернешь ее
Она ее инициирует рандомным значением (почитайте про глобальные и локальные переменные, а также static), а чтобы присвоить ей значение из функции, та должна что-то вернуть командой return.
И вообще незаметно , как Вы обрабатываете энкодер.
пока я пытаюсь сделать один канал на 2 кнопки. Что бы понять как конкретно этим управлять. Потом энкодер
пытаюсь нажатием кнопки вызвать функцию
И каким боком функция digitalWrite() к нажатию кнопки? Может Вы таки почитаете её описанеие? Заодно почитайте описание функции digitalRead(). Найдите между ними разницу.
спасибо. получилось
А после ифов, вы фигурные скобки все же ставьте, пусть и в одну строчку написано. Автоматизм частенько полезен. ИМХО.
спасибо
теперь проблема в том что на COM порт выводит значения, а вот в TDA они не пишутся
Потому что Wire.begin() Пушкин уже замахался делать за всех и уехал на ПМЖ в Европу.
спасибо получилось. только все резко
delay(100): в loop() отсутсвует.
Давите дребезг, изменяйте значение громкости только по изменению состояния кнопки, а не постоянно, пока она нажата.
спасибо
это уже завтра. время 00:30