Arduino — выражение нельзя использовать как функцию :(
Скетч:
//XPERT MIND.
//This program is used to control a robot using a app that communicates with Arduino through a bluetooth module.
//Error Code Chart: Code 01; Turnradius is higher than Speed; Code 02; Speed is higher than 255;
#include "Arduino.h"
#include "SoftwareSerial.h"
#define in1 3 //L298n Motor Driver pins.
#define in2 4
#define in3 5
#define in4 6
#define enA 2
#define enB 7
#define klaksonON 8
#define klaksonOFF 8
#define ledON 9
#define ledOFF 9
int command; //Int to store app command state.
int Speed = 255; // 0 - 255.
int Speedsec;
int buttonState = 0;
int lastButtonState = 0;
int Turnradius = 0; //Set the radius of a turn, 0 - 255 Note:the robot will malfunction if this is higher than int Speed.
int brakeTime = 45;
int brkonoff = 1; //1 for the electronic braking system, 0 for normal.
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(ledOFF, OUTPUT); //Set the LED pin.
pinMode(ledON, OUTPUT); //Set the LED pin.
pinMode(klaksonOFF, OUTPUT);
pinMode(klaksonON, OUTPUT);
Serial.begin(9600); //Set the baud rate to your Bluetooth module.
}
void loop() {
if (Serial.available() > 0) {
command = Serial.read();
Stop(); //Initialize with motors stoped.
switch (command) {
case 'F':
forward();
break;
case 'B':
back();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'G':
forwardleft();
break;
case 'I':
forwardright();
break;
case 'H':
backleft();
break;
case 'J':
backright();
break;
case '0':
Speed = 100;
break;
case '1':
Speed = 140;
break;
case '2':
Speed = 153;
break;
case '3':
Speed = 165;
break;
case '4':
Speed = 178;
break;
case '5':
Speed = 191;
break;
case '6':
Speed = 204;
break;
case '7':
Speed = 216;
break;
case '8':
Speed = 229;
break;
case '9':
Speed = 242;
break;
case 'q':
Speed = 255;
break;
case 'V':
klaksonON();
break;
case 'v':
klaksonOFF();
break;
case 'W':
ledON();
break;
case 'w':
ledOFF();
break;
}
Speedsec = Turnradius;
if (brkonoff == 1) {
brakeOn();
} else {
brakeOff();
}
}
}
void forward() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in2, Speed);
analogWrite(in4, Speed);
}
void back() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in1, Speed);
analogWrite(in3, Speed);
}
void left() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in4, Speed);
analogWrite(in1, Speed);
}
void right() {
digitalWrite(enB, HIGH);
digitalWrite(enA, HIGH);
analogWrite(in3, Speed);
analogWrite(in2, Speed);
}
void forwardleft() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in2, Speedsec);
analogWrite(in4, Speed);
}
void forwardright() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in2, Speed);
analogWrite(in4, Speedsec);
}
void backright() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in1, Speed);
analogWrite(in3, Speedsec);
}
void backleft() {
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
analogWrite(in1, Speedsec);
analogWrite(in3, Speed);
}
void Stop() {
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, 0);
}
void klaksonON() {
tone(klaksonON, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie 8
}
void klaksonOFF() {
noTone(klaksonOFF);
}
void ledON() {
}
void ledOFF() {
}
void brakeOn() {
//Here's the future use: an electronic braking system!
// read the pushbutton input pin:
buttonState = command;
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (lastButtonState == 'F') {
if (buttonState == 'S') {
back();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'B') {
if (buttonState == 'S') {
forward();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'L') {
if (buttonState == 'S') {
right();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'R') {
if (buttonState == 'S') {
left();
delay(brakeTime);
Stop();
}
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;
}
void brakeOff() {
}
Выход:
--------------------------------------------------------------
Arduino:1.8.5 (Windows 10), Płytka:"Arduino/Genuino Uno"
C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino: In function 'void setup()':
C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino:35:21: warning: invalid conversion from 'void (*)()' to 'uint8_t {aka unsigned char}' [-fpermissive]
tone(Klakson, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie 8
^
In file included from C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino:4:0:
C:\Users\jjayy\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21\cores\arduino/Arduino.h:246:6: note: initializing argument 1 of 'void tone(uint8_t, unsigned int, long unsigned int)'
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
^
C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino: In function 'void loop()':
Samochodzik_z_lixbota.ino:104: error: expression cannot be used as a function
klaksonON();
^
Samochodzik_z_lixbota.ino:107: error: expression cannot be used as a function
klaksonOFF();
^
Samochodzik_z_lixbota.ino:110: error: expression cannot be used as a function
ledON();
^
Samochodzik_z_lixbota.ino:113: error: expression cannot be used as a function
ledOFF();
^
C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino: In function 'void Klakson()':
C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino:186:29: warning: invalid conversion from 'void (*)()' to 'uint8_t {aka unsigned char}' [-fpermissive]
digitalWrite(Klakson, HIGH);
^
In file included from C:\Users\jjayy\Desktop\Samochodzik_z_lixbota\Samochodzik_z_lixbota.ino\Samochodzik_z_lixbota.ino.ino:4:0:
C:\Users\jjayy\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21\cores\arduino/Arduino.h:134:6: note: initializing argument 1 of 'void digitalWrite(uint8_t, uint8_t)'
void digitalWrite(uint8_t, uint8_t);
^
exit status 1
expression cannot be used as a function
Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
@NiebieskiBanan , 👍0
Обсуждение2 ответа
Я бы порекомендовал найти руководство по основам C++.
В любом случае Klakson
— это функция, а не определение номера контакта.
С другой стороны, вызов klaksonON()
(который является просто #define) будет заменен на 8()
, что здесь абсурдно.
По сути вы путаете определения и функции.
Спасибо :D Я нашел свои ошибки и исправил их :) Да, я перепутал определения с функциями :p, @NiebieskiBanan
Начните с первой проблемы, которую обнаружит компилятор, а не с последней.
Название Клаксон
сбивает с толку, его можно прочитать как «Клакс-он». Можете ли вы назвать это Beep
?
Для номера контакта используйте термин pin
. Например: const int beepPin = 8;
.
Или, на вашем языке, const int klaksonPinie = 8;
Используйте один #define
или один const int
для вывода, а не два.
- Можно ли измерить скорость акселерометром? Насколько точно?
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Модуль Bluetooth HC-05 возвращает закодированные данные
- Мой модуль Bluetooth HC-05 не работает
- Модуль AT-команд HM10 BLE — не работает
- Программные обновления FOTA (микропрограммы по беспроводной сети) с Uno R3
- Создание Bluetooth-мыши с помощью Arduino
- Чтение характеристического значения BLE в Arduino Uno
В чем вопрос?, @Greenonline