Я получаю код ошибки «недопустимые типы 'float [5] [float]' для индекса массива» на pinMode (myPin [i], OUTPUT) и строку после

error
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

, 👍-1


2 ответа


0

for(float i=1; i<=5; i=i+1), вероятно, должен быть for(int i=0; i<5; i=i+1 ). i в myPin[i] должен быть целым числом. Как правило, очень редко используется тип с плавающей запятой в качестве переменной итерации. Кроме того, массивы отсчитываются от 0, поэтому итерация должна проходить от 0 до 4.

,

0

В этом коде есть несколько проблем, кроме тех, которые правильно указаны из PMF в своем ответе:

  • Вы должны заменить каждый экземпляр float на int не только в индексы петель. В этом коде нигде не используются числа с плавающей запятой.

  • Проверка if (read=LOW) присваивает значение LOW переменной прочитать. Для того, чтобы сделать сравнение вместо задания, вы необходимо использовать оператор ==.

  • LED_pin никогда не определяется. Вероятно, вы имели в виду myPin.

  • LED_pin(i) должен быть myPin[i] (с квадратными скобками).

  • Все операторы вида имя_функции(параметры...); должны завершаться точкой с запятой.

  • Не повторяйте тип переменной, когда вы используете ее: тип именуется только тогда, когда вы его объявляете.

  • Не объявляйте переменные, которые вы никогда не используете (например, ненужные). Если ты хочешь чтобы удалить символ из последовательного порта, просто вызовите Serial.read(); без присвоения возвращаемого значения.

,