Я получаю код ошибки «недопустимые типы 'float [5] [float]' для индекса массива» на pinMode (myPin [i], OUTPUT) и строку после
void setup(){
int baudrate=9600;
Serial.begin(baudrate);
Serial.println("First input number of blinks.");
Serial.println("");
Serial.flush();
}
void loop(){
float num;
float myPin[5]={3,5,6,9,10};
Serial.println("Enter number of blinks, Press ENTER");
num= getNum();
Serial.print("Number of blinks = "); Serial.println(num, DEC);
for (float i=1; i<=num; i=i+1) {
float read;
read=digitalRead(12);
if (read=LOW) {
for(float i=1; i<=5; i=i+1) {
Serial.print("The blinks are moving forward.");
pinMode(myPin[i] ,OUTPUT)
digitalWrite(myPin[i],HIGH)
delay(500)
digitalWrite(float myPin[i],LOW)
}
}
else {
for (float i=5; i>=1; i=i-1) {
Serial.print("The blinks are moving backwards.");
digitalWrite(LED_pin(i),HIGH)
delay(500)
digitalWrite(float LED_pin[i],LOW)
}
}
}
}
// Определение пользовательской функции
float getNum() {
float num;
char junk = ' ';
while (Serial.available() == 0) ;
// Подождем, пока в буфере ввода появится символ
{
num = Serial.parseFloat();
while (Serial.available() > 0) // .parseFloat() может оставлять нечисловые символы
{
junk = Serial.read() ; // очищаем буфер клавиатуры
}
}
return num;
}//конец getNum
@Rees Rademann, 👍-1
2 ответа
for(float i=1; i<=5; i=i+1)
, вероятно, должен быть for(int i=0; i<5; i=i+1 )
. i
в myPin[i]
должен быть целым числом. Как правило, очень редко используется тип с плавающей запятой в качестве переменной итерации. Кроме того, массивы отсчитываются от 0, поэтому итерация должна проходить от 0 до 4.
В этом коде есть несколько проблем, кроме тех, которые правильно указаны из PMF в своем ответе:
Вы должны заменить каждый экземпляр
float
наint
не только в индексы петель. В этом коде нигде не используются числа с плавающей запятой.Проверка
if (read=LOW)
присваивает значениеLOW
переменнойпрочитать
. Для того, чтобы сделать сравнение вместо задания, вы необходимо использовать оператор==
.LED_pin
никогда не определяется. Вероятно, вы имели в видуmyPin
.LED_pin(i)
должен бытьmyPin[i]
(с квадратными скобками).Все операторы вида
имя_функции(параметры...);
должны завершаться точкой с запятой.Не повторяйте тип переменной, когда вы используете ее: тип именуется только тогда, когда вы его объявляете.
Не объявляйте переменные, которые вы никогда не используете (например,
ненужные
). Если ты хочешь чтобы удалить символ из последовательного порта, просто вызовитеSerial.read();
без присвоения возвращаемого значения.
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Ошибка A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode. [upload] Error 2
- Текстовая часть превышает доступное место на плате
- Arduino - ошибка "expected primary-expression before '.' token"
- Почему IDE не может найти плату, несмотря на то, что она четко видна и выбрана?
- Ошибка переменной does not name a type!
- Функция, объявленная в другом файле, не распознана (undefined reference to)
- Arduino sketch использует слишком много места в памяти?