фоторезистор + 433мгц

artemon25
Offline
Зарегистрирован: 25.12.2015

доброго всем дня столкнулся с маленькой проблеммой по слиянию двух скетчей. есть скетч для 433мгц

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int relay7 = 7; //Реле будет тут
//int analogData = 0; //тут будут храниться данные с АЦП пин 0
//int ledstate = 0; //переменная состояния вкл-выкл

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // приемник на pin 2 (DATA)
  pinMode(relay7, OUTPUT);
  digitalWrite(relay7, LOW);
}
void loop() {


  if (mySwitch.available()) {

    int value = mySwitch.getReceivedValue();

    if (value == 0) {
      Serial.print("error code"); // Ошибка приемка кода
    } else {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );

    }
    if (mySwitch.getReceivedValue() == 5312960) {   // - код Включения1
      digitalWrite(relay7, HIGH);
    }
    if (mySwitch.getReceivedValue() ==  5312780) {   // - код выключения1
      digitalWrite(relay7, LOW);
    }
    mySwitch.resetAvailable();
  }
}

и есть скетч для фоторезистора


const int pinPhoto = A0;
const int led = 10;
int raw = 0;

void setup() {
  pinMode( pinPhoto, INPUT );
  pinMode( led, OUTPUT );
}

void loop() {
  raw = analogRead( pinPhoto );
  if( raw < 500)
    digitalWrite( led, HIGH );
  else
    digitalWrite( led, LOW );
  delay(200);
}

я его объединил

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int relay = 10; //Реле будет тут
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
const int pinPhoto = A0;
int raw = 0;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // приемник на pin 2 (DATA)
  pinMode( pinPhoto, INPUT ); 
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
}
 void loop() {
     

    if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("error code"); // Ошибка приемка кода
    } else {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
      
{

 raw = analogRead( pinPhoto );
  if( raw < 700)
    digitalWrite( relay, LOW );
  else
    digitalWrite( relay, HIGH );
  
}

    }
    if (mySwitch.getReceivedValue() == 5312960) {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
     if (mySwitch.getReceivedValue() ==  5312780) {   // - код выключения1
      digitalWrite(relay, LOW);
 }
 mySwitch.resetAvailable();
}
 }

скомпилировалось без ошибок но  он не работает тоесть 433 работает а вот фоторезистор не работает от сюда и вопрос где и что я не дописал.

заранее спасибо всем

artemon25
Offline
Зарегистрирован: 25.12.2015

не правильно вставил объудунённый скетч а вот правильный но он не работает

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int relay = 10; //Реле будет тут
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
const int pinPhoto = A0;
int raw = 0;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // приемник на pin 2 (DATA)
  pinMode( pinPhoto, INPUT ); 
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
}
 void loop() {
     

    if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("error code"); // Ошибка приемка кода
    } else {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
      
{

 raw = analogRead( pinPhoto );
  if( raw < 700)
    digitalWrite( relay, LOW );
  else
    digitalWrite( relay, HIGH );
  
}

    }
    if (mySwitch.getReceivedValue() == 5312960) {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
     if (mySwitch.getReceivedValue() ==  5312780) {   // - код выключения1
      digitalWrite(relay, LOW);
 }
 mySwitch.resetAvailable();
}
 }

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Уберите фигурные скобки в строках 30, 38. А вообще, похоже Вы притулили код фоторезистора не туда. Объясните подробно, как должна работать Ваша программа?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
(анекдот)
 В кабинете у психотерапевта.
- Доктор. Вот я слушаю радиопередачи. Там говорят , а теперь вопросы радиослушателей.Я задаю вопросы, всех слышат, а меня нет.Почему?
- Ну наверно вы не смогли до них дозвонится.
- А причем здесь телефон. Я же передачи по радио слушаю, а не по телефону. Так что вы, доктор, не то говорите.

ПС: Похоже и у вас такая проблема, если я конечно не ошибаюсь.

 

artemon25
Offline
Зарегистрирован: 25.12.2015

скобки убрал не помогло попробовал 4 строки в  void loop() перенести в самый низ получилось вот так

void loop() {
    
    if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("error code"); // Ошибка приемка кода
    } else {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
      
    
    }
    if (mySwitch.getReceivedValue() == 7688195) {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
     if (mySwitch.getReceivedValue() ==  7688204) {   // - код выключения1
      digitalWrite(relay, LOW);
      
       raw = analogRead( pinPhoto );
  if( raw < 500)
    digitalWrite( relay, LOW );
  else
    digitalWrite( relay, HIGH );
 }
 mySwitch.resetAvailable();
}
 }

 

не помогло всё равно 433 работает а фотик нет а вот попробовал перенести эти 4 строки вверх вот так

raw = analogRead( pinPhoto );
  if( raw < 500)
    digitalWrite( relay, LOW );
  else
    digitalWrite( relay, HIGH );
    
    if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("error code"); // Ошибка приемка кода
    } else {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
      
    
    }
    if (mySwitch.getReceivedValue() == 7688195) {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
     if (mySwitch.getReceivedValue() ==  7688204) {   // - код выключения1
      digitalWrite(relay, LOW);
      
      
 }
 mySwitch.resetAvailable();
}
 }

стало наооборот 433 не работает а вот фоторезистор заработал вот я и думаю куда вставить эти строуи чтоб они друг другу не мешали

artemon25
Offline
Зарегистрирован: 25.12.2015

qwone пишет:

(анекдот)
 В кабинете у психотерапевта.
- Доктор. Вот я слушаю радиопередачи. Там говорят , а теперь вопросы радиослушателей.Я задаю вопросы, всех слышат, а меня нет.Почему?
- Ну наверно вы не смогли до них дозвонится.
- А причем здесь телефон. Я же передачи по радио слушаю, а не по телефону. Так что вы, доктор, не то говорите.

ПС: Похоже и у вас такая проблема, если я конечно не ошибаюсь.

 

анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Jeka_M пишет:

Объясните подробно, как должна работать Ваша программа?

artemon25
Offline
Зарегистрирован: 25.12.2015

должно срабатывать реле при данных с фоторезистора но при неоходимости чтоб я сам мог в любой момент включит или выключить с пульта 433мгц

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

artemon25 пишет:

анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо

Все анекдоты идут из жизни. Но кто бы мог подумать, что вы умудрились попасть в ситуацию еще смешнее.  Во первых вы просите помочь в том, но внятно не рассказываете в чем. Банально не даете алгоритм,который должна делать ваша программа. 

 А теперь по программе. Как вариант воспльзуйтесь такой структурой.

//#1
  void setup1(){
  }
  void loop1(){
  }
//#2
  void setup2(){
  }
  void loop2(){
  }
//#3
  void setup3(){
  }
  void loop3(){
  }
void setup() {
//#1
  setup1();
//#2
  setup2();
//#3
  setup3();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ; 

//#1 1000 миллисекунд вычислит. поток 1
  static uint32_t future1 = 0 ;
  if (MILLIS>=future1) {
  future1 = MILLIS + 1000 ;
  loop1();
  MILLIS = millis() ;    
  }
//#2  200 миллисекунд вычислит. поток 2
  static uint32_t future2 = 0 ;
  if (MILLIS>=future2) {
  future2 = MILLIS + 200 ;
  loop2();
  MILLIS = millis() ;    
  }
//#3  100 миллисекунд вычислит. поток 3
  static uint32_t future3 = 0 ;
  if (MILLIS>=future3) {
  future3 = MILLIS + 100 ;
  loop3();  
  }
}

Один поток работает на фотоприемник и реле , а второй на радиоприем  и отключение самого реле.

artemon25
Offline
Зарегистрирован: 25.12.2015

qwone]</p> <p>[quote=artemon25 пишет:

анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо

Все анекдоты идут из жизни. Но кто бы мог подумать, что вы умудрились попасть в ситуацию еще смешнее.  Во первых вы просите помочь в том, но внятно не рассказываете в чем. Банально не даете алгоритм,который должна делать ваша программа. 

 А теперь по программе. Как вариант воспльзуйтесь такой структурой.

//#1
  void setup1(){
  }
  void loop1(){
  }
//#2
  void setup2(){
  }
  void loop2(){
  }
//#3
  void setup3(){
  }
  void loop3(){
  }
void setup() {
//#1
  setup1();
//#2
  setup2();
//#3
  setup3();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ; 

//#1 1000 миллисекунд вычислит. поток 1
  static uint32_t future1 = 0 ;
  if (MILLIS>=future1) {
  future1 = MILLIS + 1000 ;
  loop1();
  MILLIS = millis() ;    
  }
//#2  200 миллисекунд вычислит. поток 2
  static uint32_t future2 = 0 ;
  if (MILLIS>=future2) {
  future2 = MILLIS + 200 ;
  loop2();
  MILLIS = millis() ;    
  }
//#3  100 миллисекунд вычислит. поток 3
  static uint32_t future3 = 0 ;
  if (MILLIS>=future3) {
  future3 = MILLIS + 100 ;
  loop3();  
  }
}

Один поток работает на фотоприемник и реле , а второй на радиоприем  и отключение самого реле.

[/quote

алгоритм прост я уже написал но напишу ещё раз обычный уличный фасад включается с фоторезистора а принеобходимости также и с пульта и также выключается с пульта а если не выключили то утром сам выключается. а теперь по вашей подсказке честно сказать я не понял что в одном скетче будет несколько void setup и несколько void loop2 я думал такой скет ч вообще не работает или что то я не так понял если можно поподробнее спримерами

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

artemon25, тебе прерывания и RTOS скоро предложат...

Попробуй так:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int relay = 10; //Реле будет тут
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
const int pinPhoto = A0;
int raw = 0;
bool st=FALSE;

void setup() 
{
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // приемник на pin 2 (DATA)
  pinMode( pinPhoto, INPUT ); 
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
}
void loop() 
{
//------- Это первый loop ------------------
  if (mySwitch.available()) 
  {
    
    int value = mySwitch.getReceivedValue();
    if (value == 0) 
    {
      Serial.print("error code"); // Ошибка приемка кода
    } 
    else 
    {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
    }
    if (mySwitch.getReceivedValue() == 5312960) 
    {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
    if (mySwitch.getReceivedValue() ==  5312780) 
    {   // - код выключения1
      digitalWrite(relay, LOW);
    }
    mySwitch.resetAvailable();
  }

//------- Это второй loop ------------------
  raw = analogRead( pinPhoto );
  if(raw < 500 && st)
  {
    digitalWrite( relay, LOW );
    st=FALSE;
  }
  else if(raw > 600 && !st)
  {
    digitalWrite( relay, HIGH );
    st=TRUE;
  }
}

 

artemon25
Offline
Зарегистрирован: 25.12.2015

ошибка выходит 'FALSE' was not declared in this scope

'TRUE' was not declared in this scope
на 51 и 56 строке
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

мелкими буквами напиши true false

artemon25
Offline
Зарегистрирован: 25.12.2015

Andy пишет:

мелкими буквами напиши true false

спасибо всё заработало . хорошие советы всегда бьют в точку

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Andy пишет:

artemon25, тебе прерывания и RTOS скоро предложат...

Основная проблема новичков, не придумать алгоритм, а совместить разные скетчи. Так что я переписал вашу программу в виде 2 вычислительных процессов. Вдруг ТС захочется добавить еще один скетч и что,опять будет продолжать терроризировать форум.

//#1 фотодиод
  int relay = 10; //Реле будет тут
  int analogData=0; //тут будут храниться данные с АЦП пин 0
  int ledstate=0; //переменная состояния вкл-выкл
  const int pinPhoto = A0;
  int raw = 0;
  bool st=false;

  void setup1(){
    Serial.begin(9600);
    pinMode( pinPhoto, INPUT ); 
    pinMode(relay, OUTPUT);
    digitalWrite(relay, HIGH);
    }
  void loop1(){
      raw = analogRead( pinPhoto );
  if(raw < 500 && st)
  {
    digitalWrite( relay, LOW );
    st=false;
  }
  else if(raw > 600 && !st)
  {
    digitalWrite( relay, HIGH );
    st=true;
  }
  }
//#2
  #include <RCSwitch.h>
  RCSwitch mySwitch = RCSwitch();
  void setup2(){
      mySwitch.enableReceive(0);  // приемник на pin 2 (DATA)
  }
  void loop2(){
      if (mySwitch.available()) 
  {
    
    int value = mySwitch.getReceivedValue();
    if (value == 0) 
    {
      Serial.print("error code"); // Ошибка приемка кода
    } 
    else 
    {
      Serial.print("code good"); // Принял код
      Serial.print( mySwitch.getReceivedValue() );
    }
    if (mySwitch.getReceivedValue() == 5312960) 
    {   //- код Включения1
      digitalWrite(relay, HIGH);
    }
    if (mySwitch.getReceivedValue() ==  5312780) 
    {   // - код выключения1
      digitalWrite(relay, LOW);
    }
    mySwitch.resetAvailable();
  }
  }
void setup() {
//#1
  setup1();
//#2
  setup2();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ; 

//#1 1000 миллисекунд фотодиод
  static uint32_t future1 = 0 ;
  if (MILLIS>=future1) {
  future1 = MILLIS + 1000 ;
  loop1();
  MILLIS = millis() ;    
  }
//#2  200 миллисекунд радио
  static uint32_t future2 = 0 ;
  if (MILLIS>=future2) {
  future2 = MILLIS + 200 ;
  loop2();
  MILLIS = millis() ;    
  }
}