Прощу вашей помощи (объясните как это делается)

Marlen S
Offline
Зарегистрирован: 13.01.2015

Объяните как можно это осуществить. Пытаюсь вывести на i2c lcd 1602 сообщение когда пришло значитение с sirial порта значение на включение реле вот в этом скетче :

переменная i пришла (int i = Serial.read()-48;) ардуино считал его и запустил каманду согласно значению.

вот тогда то мне и надо поймать его и выдать сообщение что типо он включен. Так как lcd 1602 имеет всего 16 значений в строке, решил выводить инфу о состоянии по 4 значения R(n)++ если включен и R(n)-- если выключен.

Помогите пожалуйста. Искал инфу по этому весь вечер но так и не нашел как это сделать (может так искал, возможно) ведь практики мало в этом :(  

 if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(Light_1, !digitalRead(Light_1));
    if(Light_1 == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd
    {
      lcd.setCursor(0, 1);
      lcd.print("R1++");
    }
    if (Light_1 == LOW);
    {
      lcd.setCursor(0, 1);
      lcd.print("R1--");
    }
    if (i == 2)digitalWrite(Cooler_2, !digitalRead(Cooler_2));
    if(Cooler_2 == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd
    {
      lcd.setCursor(4, 1);
      lcd.print("R2++");
    }
    if (Cooler_2 == LOW);
    {
      lcd.setCursor(4, 1);
      lcd.print("R2--");
    }
    if (i == 3)digitalWrite(Pump_3, !digitalRead(Pump_3));
    if(Pump_3 == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd
    {
      lcd.setCursor(8, 1);
      lcd.print("R3++");
    }
    if (Pump_3 == LOW);
    {
      lcd.setCursor(8, 1);
      lcd.print("R3--");
    }
    if (i == 4)digitalWrite(Aero_4, !digitalRead(Aero_4));
    if(Aero_4 == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd
    {
      lcd.setCursor(12, 1);
      lcd.print("R4++");
    }
    if (Aero_4 == LOW);
    {
      lcd.setCursor(12, 1);
      lcd.print("R4--");
    }
  }

 

Datak
Offline
Зарегистрирован: 09.10.2014






if(Light_1 == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd

Для начала, проверку переписать:







if(digitalRead(Light_1) == HIGH);   // Проверяем работает ли порт реле и выводим сообщение на lcd

А вообще, так понятней:







if( i == 1 )
{
   int Val = !digitalRead( Light_1 );

   digitalWrite( Light_1, Val );

   lcd.setCursor( 0, 1 );
   lcd.print( Val ? "R1++" : "R1--" );
}

 

Marlen S
Offline
Зарегистрирован: 13.01.2015

Это так долно выглядеть? 

if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(Light_1, !digitalRead(Light_1));
    if( i == 1 );
    {
      int Val = !digitalRead( Light_1 );
      digitalWrite( Light_1, Val );
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1++" : "R1--" );
    }
    if (i == 2)digitalWrite(Cooler_2, !digitalRead(Cooler_2));
    if (i == 3)digitalWrite(Pump_3, !digitalRead(Pump_3));
    if (i == 4)digitalWrite(Aero_4, !digitalRead(Aero_4));
  }

или не туда вставляю код?

Marlen S
Offline
Зарегистрирован: 13.01.2015
получилось что, если подать на порт 1 то не чего не происходит, а вот если 2 то включается первое и второе реле и показывает работает реле "R1++" или нет "R1-" 
if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(Light_1, !digitalRead(Light_1));
    {
    if(i == 1);
    {
      int Val = !digitalRead(Light_1);
      digitalWrite( Light_1, Val );
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1++" : "R1--" );
    } 
    }
    if (i == 2)digitalWrite(Cooler_2, !digitalRead(Cooler_2));
    if (i == 3)digitalWrite(Pump_3, !digitalRead(Pump_3));
    if (i == 4)digitalWrite(Aero_4, !digitalRead(Aero_4));
    }

 

Datak
Offline
Зарегистрирован: 09.10.2014

Третья строка - лишняя.

Marlen S
Offline
Зарегистрирован: 13.01.2015

Спасибо большое) работает))) 

наконец я избавился от этой функции 

 if (i == 1)digitalWrite(Light_1, !digitalRead(Light_1));

Всю нось с ней ...ся( не мог не чего придумать)

if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if(i == 1);
    {
      int Val = !digitalRead(Light_1);
      digitalWrite( Light_1, Val );
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 

так все работает как и хотел) теперь надо расписать это на 4 реле :)

Marlen S
Offline
Зарегистрирован: 13.01.2015

Не пойму что не так, заливаю код и кода подаю на порт цифру 1 включается все (при этом пишет на lcd что R(n)++ тобиш все включены), так же как и 2,3 и даже 4 :(

 

if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if(i == 1);
    {
      int Val = !digitalRead(Light_1);
      digitalWrite( Light_1, Val );
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 2);
    {
      int Val = !digitalRead(Cooler_2);
      digitalWrite( Cooler_2, Val );
      lcd.setCursor( 4, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 3);
    {
      int Val = !digitalRead(Pump_3);
      digitalWrite( Pump_3, Val );
      lcd.setCursor( 8, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 4);
    {
      int Val = !digitalRead(Aero_4);
      digitalWrite( Aero_4, Val );
      lcd.setCursor( 12, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
  }

 

Marlen S
Offline
Зарегистрирован: 13.01.2015

Все понял исправил и получил итог :) вся бида была в том что стояли ; в  " if(i == 1); " убрал и все заработало.

if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if(i == 1);
    {
      int Val = !digitalRead(Light_1);
      digitalWrite( Light_1, Val );
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 

Сам код теперь состоит так:

 

if (Serial.available() > 0) {
    int i = Serial.read()-48;
    if(i == 1)
    {
      int Val = !digitalRead(Light_1);
      digitalWrite(Light_1, Val);
      lcd.setCursor( 0, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 2)
    {
      int Val = !digitalRead(Cooler_2);
      digitalWrite(Cooler_2, Val);
      lcd.setCursor( 4, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 3)
    {
      int Val = !digitalRead(Pump_3);
      digitalWrite(Pump_3, Val);
      lcd.setCursor( 8, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
    if(i == 4)
    {
      int Val = !digitalRead(Aero_4);
      digitalWrite(Aero_4, Val);
      lcd.setCursor( 12, 1 );
      lcd.print( Val ? "R1--" : "R1++" );
    } 
  }