Почему в строчке "#define RF pinMode(OUTPUT,12);" выдаёт ошибку?

wertcom
Offline
Зарегистрирован: 17.11.2017

В строчке "#define RF pinMode(OUTPUT,12);" выдаёт ошибку "expected ')' before ';' token". Если вставляю ещё одну скобку[#define RF pinMode(OUTPUT,12));] выдает ошибку "invalid use of void expression"

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

весь текст приведите. ошибка где-то выше

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Ну и как минимум pinMode(pin, mode) а не наоборот.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Автор код откуда-то криво скопипастил. pinmode это уже всё-таки другая строка, а после RF что-то протетрял. Ищите!

Анастас
Offline
Зарегистрирован: 18.11.2017

[quote=Penni]

Ну и как минимум pinMode(pin, mode) а не наоборот.

Действительно, вы правы: #define RF pinMode(12, OUTPUT)

и после #define ";" не ставится, вернее после скобок.

 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Анастас пишет:

и после #define ";" не ставится, вернее после скобок.

Зависит "от", что называется. Можно и ставить, иногда - ставить будет ошибкой:

#define ON HIGH // не ставим
#define MODE_OUTPUT(pin) pinMode((pin),OUTPUT); // тут можно и ставить, пофик


MODE_OUTPUT(13); // наша лишняя точка с запятой в define никому тут не мешает
digitalWrite(13,ON); // если бы стояла точка с запятой в define - была бы ошибка компиляции

 

Dessan07
Offline
Зарегистрирован: 22.11.2018

Не стал создавать новую тему, эта кажется про синтаксис в #define, и наиболее подходящая.

Подскажите пожалуйста как правильно записать замену команды HT.setLedNow(L_AKB); на две команды lcd.setCursor(3, 1);  lcd.print("O"); . Нужно для отладки, чтобы для макета не паять вторую светодиодную матрицу. Сразу скажу, что ctrl+F плохой вариант, ибо у каждого светодиода L_??? своя позиция, а писать сразу для светодиодов и удалить в будущем идущий подрят блок #define более заманчивый способ.  

Изначально пробовал #define  HT.setLedNow(L_AKB);       lcd.setCursor(3, 1);  lcd.print("O"); Но даже когда сократил и убрал ; всё равно как-то об точку спотывается при компиляции и ошибку выдаёт, пока есть в коде HT :(

Если в #define убираю после HT точку, ошибок не выдаёт. Может можно как-то экранировать эту точку?

#include "ht16k33.h"
HT16K33 HT;
#define L_AKB   0 
#define  HT.setLedNow(L_AKB)       lcd.print("O")

void setup() {
  HT.begin(0x00);
}

void loop() {
// HT.setLedNow(L_AKB); 
}

C:\temp\oshibka__define_\oshibka__define_.ino: In function 'void setup()':
oshibka__define_:4: error: expected primary-expression before '.' token
 #define  HT.setLedNow(L_AKB)       lcd.print("O")
                ^
C:\temp\oshibka__define_\oshibka__define_.ino:7:3: note: in expansion of macro 'HT'
   HT.begin(0x00);
   ^
oshibka__define_:4: error: expected ';' before 'lcd'
 #define  HT.setLedNow(L_AKB)       lcd.print("O")
                                                   ^
C:\temp\oshibka__define_\oshibka__define_.ino:7:3: note: in expansion of macro 'HT'
   HT.begin(0x00);
   ^
exit status 1
expected primary-expression before '.' token

P.S. Ок, паяю сижу новую матрицу...

ata3d
Offline
Зарегистрирован: 24.05.2017

У меня похожая ошибка в скачаной библиотеке. Выдает ошибку "was not declared in this scope OUTPUT" в 8-10 строке, 

HT1632::HT1632(uint8_t data_pin, uint8_t write_clock_pin, uint8_t chip_select_pin) {
  this->data_pin = data_pin;
  this->write_clock_pin = write_clock_pin;
  this->chip_select_pin = chip_select_pin;
}

void HT1632::initialize() {
  start_char_column_index = -31;
  pinMode(chip_select_pin, OUTPUT);
  pinMode(write_clock_pin, OUTPUT);
  pinMode(data_pin, OUTPUT);
  digitalWrite(chip_select_pin, HIGH);

а если их убрать , то в строке 

digitalWrite(chip_select_pin, HIGH);

'HIGH' was not declared in this scope