В настоящее время я работаю над проектом, в котором у меня есть 2 Arduino, подключенных через I2C. Arduino Mega 2560, который является хозяином, и UNO, который является рабом. ИК-приемник подключен к UNO, который захватывает ИК-сигнал с пульта дистанционного управления и отправляет полученный сигнал в MEGA для некоторой обработки. Однако, даже если ИК-сигнал не передается, ИК-приемник продолжает записывать ИК-сигнал со значением 0. Это проблема из-за аппаратной проблемы или я что-то упустил в коде? Следует отметить, что Arduino мега запрос на ИК-сигнал от ООН каждые 3 секунды. Работа MEGA состоит в том, чтобы проверить, является ли полученный сигнал тем, который должен быть передан Arduino UNO. Эта функция используется для имитации управления ИК-устройствами в комнате. Ниже приведен код раба UNO:
IRrecv My_receiver(2);
IRdecode My_decoder;
String wireDecoderSignal = "";
String valueFromMaster;
long wireDecoderSignalValue;void setup() {Wire.begin(5);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
My_receiver.enableIRIn();}
void loop() {
if (My_receiver.GetResults(&My_decoder))
{ //if (My_receiver.GetResults(&My_decoder)) starts
My_decoder.decode();
if (My_decoder.value != 4294967295 )
{ // if (My_decoder.value != 4294967295) startswireDecoderSignal = String(My_decoder.value, HEX);
wireDecoderSignalValue = My_decoder.value;
Serial.println(wireDecoderSignal);} // if (My_decoder.value != 4294967295) ends
My_receiver.resume();
}//if (My_receiver.GetResults(&My_decoder)) ends}void requestEvent()
{
if (wireDecoderSignal.length() == 8)
{
Serial.println("sending" + wireDecoderSignal);
Wire.write(wireDecoderSignal.c_str());
wireDecoderSignal = "";}
else
{
Serial.println("SENDING 11111111");
Wire.write("11111111");}
}
void receiveEvent(int howManyBytes)
{
while (Wire.available())
{
valueFromMaster += (char)Wire.read();
}
if (valueFromMaster == "T" || valueFromMaster == "F")
{
Serial.println("VALUE FROM MASTER IS:" + valueFromMaster);
valueFromMaster = "";
wireDecoderSignalValue = 0;}
else if (valueFromMaster.length() == 8)
{
// code to transmitting IR signal....signal received from mobile phone to MEGA to here
// unsigned long value=strtoul(valueFromMaster.c_str(), 0, 32);
// Serial.println(value);
long decValue = 0;
int nextInt;
for (int i = 0; i < valueFromMaster.length(); i++) {
nextInt = int(valueFromMaster.charAt(i));
if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
nextInt = constrain(nextInt, 0, 15);
decValue = (decValue * 16) + nextInt;
}
valueFromMaster = "";
}
else if (valueFromMaster.indexOf("on") >= 0 || valueFromMaster.indexOf("off") >= 0)
{
// code to turn light on or off based signal received from MEGA which in turn receives signal from mobile
if (valueFromMaster.indexOf("on") >= 0)
{
digitalWrite(relayPin, HIGH);
}
else
{
digitalWrite(relayPin, LOW);
}
valueFromMaster = "";
}
}
Задача ещё не решена.
Других решений пока нет …