фоторезистор + 433мгц
- Войдите на сайт для отправки комментариев
Вс, 25/09/2016 - 15:08
доброго всем дня столкнулся с маленькой проблеммой по слиянию двух скетчей. есть скетч для 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 работает а вот фоторезистор не работает от сюда и вопрос где и что я не дописал.
заранее спасибо всем
не правильно вставил объудунённый скетч а вот правильный но он не работает
#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(); } }Уберите фигурные скобки в строках 30, 38. А вообще, похоже Вы притулили код фоторезистора не туда. Объясните подробно, как должна работать Ваша программа?
ПС: Похоже и у вас такая проблема, если я конечно не ошибаюсь.
скобки убрал не помогло попробовал 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 не работает а вот фоторезистор заработал вот я и думаю куда вставить эти строуи чтоб они друг другу не мешали
ПС: Похоже и у вас такая проблема, если я конечно не ошибаюсь.
анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо
Объясните подробно, как должна работать Ваша программа?
должно срабатывать реле при данных с фоторезистора но при неоходимости чтоб я сам мог в любой момент включит или выключить с пульта 433мгц
анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо
Все анекдоты идут из жизни. Но кто бы мог подумать, что вы умудрились попасть в ситуацию еще смешнее. Во первых вы просите помочь в том, но внятно не рассказываете в чем. Банально не даете алгоритм,который должна делать ваша программа.
А теперь по программе. Как вариант воспльзуйтесь такой структурой.
//#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(); } }Один поток работает на фотоприемник и реле , а второй на радиоприем и отключение самого реле.
анекдот хороший и с юмором хорошо но вот мою проблемку это не решает прошу помочь а не анекдоты расказывать а вообще спасибо
Все анекдоты идут из жизни. Но кто бы мог подумать, что вы умудрились попасть в ситуацию еще смешнее. Во первых вы просите помочь в том, но внятно не рассказываете в чем. Банально не даете алгоритм,который должна делать ваша программа.
А теперь по программе. Как вариант воспльзуйтесь такой структурой.
//#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
алгоритм прост я уже написал но напишу ещё раз обычный уличный фасад включается с фоторезистора а принеобходимости также и с пульта и также выключается с пульта а если не выключили то утром сам выключается. а теперь по вашей подсказке честно сказать я не понял что в одном скетче будет несколько
voidsetup и несколькоvoidloop2 я думал такой скет ч вообще не работает или что то я не так понял если можно поподробнее спримерами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; } }ошибка выходит 'FALSE' was not declared in this scope
мелкими буквами напиши true false
мелкими буквами напиши true false
спасибо всё заработало . хорошие советы всегда бьют в точку
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() ; } }