Разборки со switch

shemovoi
Offline
Зарегистрирован: 15.09.2013

Приветствую, разбираюсь с оператором switch/case. А проблемма собственно вот в чем. Хочу ваот таким образом устроить программу, чтоб при выполнении условия программа делала определенный код. Но компилятор выдает ошибку такую - exit status 1

'power_1' was not declared in this scope
Возможно, что есть другая реализация программы хотел бы услышать, как правильно и получить толчек. Спасибо заранее.
void loop()
 {
  pir = digitalRead(pirsens);
  fot = analogRead(fotosens);
  //Serial.println(fot);


  if(fot <= 500 && pir == true)
    {
      stat = 1;
    }
 if(fot <= 500 && pir == false)
    {
      stat = 2;
    }
  if(fot >=500 && pir == false)
    {
      stat = 3;
    }

    switch(stat)
    {
      case 1: power); break;
      case 2: night(); break;
      case 3: off(); break;
      
    }

    void power()
    {
      for(value = 255; value >=0; value-=5)   //плавно гасим
  { 
    analogWrite(ledpin, value); 
    delay(30); 
  }
  delay(1000);
    }
 }
 

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Скобка в 23 строке.....

shemovoi
Offline
Зарегистрирован: 15.09.2013

Нет, дело не в ней. это здесь я ни чаянно ее удалил

на самом деле все нормально 

 switch(stat)
    {
      case 1: power(); break;
      case 2: night(); break;
      case 3: off(); break;
      
    }

 

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

Для понимания нужно привести ВЕСЬ код включая объявление глобальных переменных и сетап.

И как то глупо объявлять функцию ВНУТРИ цикла loop!

Должно быть

#include **** (при необходимости)
#define ***** (при необходимости)
void setup()
{
*************************
}
void loop()
{
*************************
  power();
}
void power()
{
*************************
}

 

shemovoi
Offline
Зарегистрирован: 15.09.2013
#define oneled 10      // пин диодной ленты
#define pirsens 9  // пин датчика движения
#define fotosens A0  // пин датчика света
int night = 30;
int pause = 5000;
boolean pir;
int fot;
int value = 0;
int  stat;

void setup() 
{
  //Serial.begin(9600);
  pinMode(oneled, OUTPUT);
  pinMode(pirsens, INPUT);
  pinMode(fotosens, INPUT);
}

void loop()
 {
  pir = digitalRead(pirsens);
  fot = analogRead(fotosens);
  //Serial.println(fot);


  if(fot <= 500 && pir == true)
    {
      stat = 1;
    }
 if(fot <= 500 && pir == false)
    {
      stat = 2;
    }
  if(fot >=500 && pir == false)
    {
      stat = 3;
    }

    switch(stat)
    {
      case 1: power(); break;
      case 2: night(); break;
      case 3: off(); break;
      
    }

    void power()
    {
      for(value = 255; value >=0; value-=5)   //плавно гасим
  { 
    analogWrite(ledpin, value); 
    delay(30); 
  }
  delay(1000);
    }
 }
 

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

строки 47-55 надо вынести после 56.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну?

Код выложили, а сообщение компилятора кто будет выкладывать? Полностью, а не огрызком.

shemovoi
Offline
Зарегистрирован: 15.09.2013

То есть чтоб void power не находилась внутри void loop так? И так с каждой и всегда верно?)

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015
void setup()
{
}
void loop()
{
}

void power()
{
      for(value = 255; value >=0; value-=5)   //плавно гасим
	  {
	    analogWrite(ledpin, value);
	    delay(30);
	  }
	  delay(1000);
}

и учись сразу структуировать текст скетча!

shemovoi
Offline
Зарегистрирован: 15.09.2013

понял, спасибо)

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

https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%A1%D0%B8_%28%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0%29

https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%81%D1%82%D1%83%D0%BF_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29

http://lib.ru/CTOTOR/kernigan.txt_with-big-pictures.html

Абрам 30 лет молился богу - я работаю в поте лица, не пропускаю молитв и всегда прошу помочь мне! Ну почему боже ты не можешь дать мне например миллион долларов?

БОГ - Абрам, дай мне шанс - КУПИ ЛОТЕРЕЮ!

Ребята, прочтите книжку! (Керниган и Ритчи) Куча вопросов отпадет.....

Ну а на десерт - 4х томник Кнута "Искусство программирования"- классика жанра ;)

https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F