Почему он помещает ошибку: ожидаемый конструктор, деструктор или преобразование типа перед 'void' в коде arduino uno?

0

Этот код предназначен для открытия четырех светодиодов при открытии переключателя, и в зависимости от температуры есть еще два светодиода, открытые или закрытые, один красный и один зеленый.

const int sensorPin = A0;   
type void setup(){   
  pinMode(2,INPUT);//the switch  
  for(int pinNumber>2 && pinNumber<7);//four leds   
  pinMode(pinNumber,OUTPUT);  
  pinMode(7,OUTPUT);//green led  
  pinMode(8,OUTPUT);//red led   
}  
type void loop(){  
  for(int pinNumber>2 && pinNumber<7);  
  if(digitalRead(2)==LOW){//if the switch is off the 4 leds are off  
  digitalWrite(pinNumber, LOW);  
  }  
  else{  
  digitalWrite(pinNumber, HIGH);//if the switch is open the 4 leds are opened  
  }  
  int sensorVal = analogRead(sensorPin);  
  float voltage = (sensorVal/1024.0);  
  float temperature= (voltage -0.5)*100;   
  if(temperature < 40){  
  digitalWrite(7, HIGH);  
  digitalWrite(8, LOW);   
  }   
  else{   
  digitalWrite(7, LOW);   
  digitalWrite(8, HIGH);   
  }    
}
  • 0
    Пожалуйста, сделайте отступ в своем коде. Это в основном для вас .
  • 0
    type void loop(){ не является допустимым кодом C ++, просто скажите void loop(){ .
Показать ещё 1 комментарий
Теги:
arduino
arduino-uno

1 ответ

0

Проблемы с кодом
В вашем коде есть ряд проблем, которые помешали бы ему компилировать или работать так, как вы планируете.

Во-первых, как упоминалось в комментариях, вы не должны иметь type слова перед сигнатурами функций. Например, вместо type void loop() он должен быть просто void loop(). Это вызывает сообщение об ошибке. Компилятор просто этого не понимает.

Вторая главная проблема это ВАШЕ for петель. Правильный синтаксис в C++ таков:

for ( init; condition; iter)
{
}

Секция init запускается один раз до начала цикла и обычно используется для объявления/инициализации переменной счетчика. condition проверяется непосредственно перед каждой итерацией цикла и останавливается, как только оно приравнивается к false. Он обычно используется для проверки значения счетчика. Наконец, секция iter выполняется в конце каждой итерации цикла и обычно используется для увеличения/продвижения счетчика.

Это (обычно) важно не иметь полуточку сразу после цикла for, иначе ваше тело цикла пусто (т.е. оно не будет проходить через что-либо). Либо поместите после него один оператор, либо несколько операторов, окруженных фигурными фигурными скобками {... }.

В вашем случае, похоже, вы хотите, чтобы ваш цикл for прошел через значения 3, 4, 5 и 6. Для этого вам нужно сделать что-то вроде этого:

for (int pinNumber = 3; pinNumber < 7; ++pinNumber)
{
    // (loop body goes here)
}

Это объявляет счетчик циклов, называемый pinNumber, и запускает его со значением 3. После каждой итерации цикла счетчик поднимается на один (++pinNumber). Цикл останавливается, когда счетчик достигает 7.

Исправленный код
Объединив все это, я думаю, что этот код должен работать лучше:

const int sensorPin = A0;   
void setup()
{
    pinMode(2, INPUT);//the switch

    for (int pinNumber = 3; pinNumber < 7; ++pinNumber)
    {
        pinMode(pinNumber, OUTPUT);//four leds
    }

    pinMode(7, OUTPUT);//green led
    pinMode(8, OUTPUT);//red led
}

void loop()
{
    for (int pinNumber = 3; pinNumber < 7; ++pinNumber)
    {        
        if (digitalRead(2) == LOW)
        {
            //if the switch is off the 4 leds are off
            digitalWrite(pinNumber, LOW);
        }
        else
        {
            //if the switch is open the 4 leds are opened
            digitalWrite(pinNumber, HIGH);
        }
    }

    int sensorVal = analogRead(sensorPin);
    float voltage = (sensorVal / 1024.0);
    float temperature = (voltage - 0.5) * 100;
    if (temperature < 40)
    {
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
    }
    else
    {
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
    } 
}
  • 0
    Спасибо, это было действительно полезно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню