РЕШЕНО Управление двумя датчиками освещенности на arduino

Тема в разделе "Arduino & Shields", создана пользователем Illaise, 29 янв 2021.

Метки:
  1. Illaise

    Illaise Нерд

    • 6.1. Загружать файлы и изображения нужно на сервер нашего форума (используя кнопку "Загрузить файл", находящуюся в редакторе или просто перетащив нужный элемент со своего компьютера в окно редактора)
    Всем привет!

    Прошу помощи в программном решении.
    Подключаю к Arduino Uno Wi-Fi Rev2 два датчика освещенности (питаются от 3.3 / 5 В) (Датчик схема LM393 + фоторезистор).
    Мне необходимо реализовать логику:
    1. Отправляю с ПК в COM порт одну из двух команд (Стринги, цифры, неважно)
    2. Если ввести первую команду, arduino должна считывать данные с первого датчика и, в зависимости от его значения, выводить надпись ON или OFF.
    3. Если ввести вторую команду, arduino должна считывать данные со второго датчика и, в зависимости от его значения, выводить надпись ON или OFF.
    Код:
    Код (C++):
    int ScreenPin = A0; //Указываем пин к которому подклюен Фоторезистор экрана.
    unsigned int ScreenValue = 0; //Переменная для хранения значений фоторезистора с экрана.
    int LedPin = A1; //Указываем пин к которому подключен Фоторезистор LED индикатора.
    unsigned int LedValue = 0; //Переменная для хранения значений Фоторезистора с LED индикатора.
    int Income = 0;

    void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    Serial.begin(115200);
    }

    void loop() {
      if (Serial.available() > 0) {
         Income = Serial.read() - '0';
         Serial.println(Income);
      if (Income = 1) {
          LedValue = analogRead(LedPin); //Считываем значения с фоторезистора LED индикатора.
            if(LedValue>500)
            Serial.println("LED Off");
            else
            Serial.println("LED On");
            Serial.println(LedValue, DEC); //Вывод данных с фоторезистора (0-1024)
      }else if (Income = 2) {
          ScreenValue = analogRead(ScreenPin); //Считываем значения с фоторезистора экрана.
            if(ScreenValue>500)
            Serial.println("Screen Off");
            else
            Serial.println("Screen On");
            Serial.println(ScreenValue, DEC); //Вывод данных с фоторезистора (0-1024)
        }
      delay(500);
      }
    }
    В данном варианте кода, что бы я не вводил, будет считываться только LEDPin
    Схема подключения - Удалено модератором
    Если убрать все условия, датчики нормально выводят показатели, так что дело точно не в них.
    Так же не понятно, почему при
    Код (C++):
    Income = Serial.read() - '0';
    мне выводит это - Удалено модератором , откуда эти -38?[​IMG]
    Заранее спасибо)
     
    Последнее редактирование модератором: 29 янв 2021
  2. Airbus

    Airbus Радиохулиган Модератор

    А разве не так if (income==1)?
    И что делает строка Income = Serial.read()-'0'; ?
     
    Illaise и NikitOS нравится это.
  3. Illaise

    Illaise Нерд

    Спасибо))) Ошибся в операторах, с == все работает, походу нужно отдохнуть)).
    При вводе цифр или букв в буфер они считываются в символьном формате, согласно таблице ASCII, т.е, если ввести цифру 5 на выходе будет совсем другое значение, для того, что бы вводилось оригинальное значение, к Serial.read(); (выводит данные с буфера) добавляется
    Код (C++):
     -'0';
     
    Последнее редактирование модератором: 29 янв 2021