Показания сенсора

Тема в разделе "Arduino & Shields", создана пользователем Aaron 16, 7 май 2014.

?

Подскажите пожалуйста, какая ошибка в программе.

  1. .

    2 голосов
    66,7%
  2. .

    1 голосов
    33,3%
  1. Aaron 16

    Aaron 16 Нуб

    Подскажите пожалуйста, какая ошибка в программе. Нужно снимать показания с восьми датчиков и выводить на экран максимальное значение.
    // Подключаем стандартную библиотеку LiquidCrystal
    #include <LiquidCrystal.h>

    // Инициализируем объект-экран, передаём использованные
    // для подключения контакты на Arduino в порядке:
    // RS, E, DB5, DB6, DB7, DB8
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

    void setup()
    {
    lcd.begin(16, 2);
    lcd.print("Naibolshee znachenie");

    }

    void loop()
    {
    int sens0 = analogRead(A0);
    int sens1 = analogRead(A1);
    int sens2 = analogRead(A2);
    int sens3 = analogRead(A3);
    int sens4 = analogRead(A4);
    int sens5 = analogRead(A5);
    int sens6 = analogRead(A6);
    int sens7 = analogRead(A7);

    if (sens0 > sens1 || sens0 > sens2 || sens0 > sens3 || sens0 > sens4 || sens0 > sens5 || sens0 > sens6 || sens0 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens0");
    }
    if (sens1 > sens0 || sens1 > sens2 || sens1 > sens3 || sens1 > sens4 || sens1 > sens5 || sens1 > sens6 || sens1 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens1");
    }
    if (sens2 > sens0 || sens2 > sens1 || sens2 > sens3 || sens2 > sens4 || sens2 > sens5 || sens2 > sens6 || sens2 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens2");
    }
    if (sens3 > sens0 || sens3 > sens1 || sens3 > sens2 || sens3 > sens4 || sens3 > sens5 || sens3 > sens6 || sens3 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens3");
    }
    if (sens4 > sens0 || sens4 > sens1 || sens4 > sens2 || sens4 > sens3 || sens4 > sens5 || sens4 > sens6 || sens4 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens4");
    }
    if (sens5 > sens0 || sens5 > sens1 || sens5 > sens2 || sens5 > sens3 || sens5 > sens4 || sens5 > sens6 || sens5 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens5");
    }
    if (sens6 > sens0 || sens6 > sens1 || sens6 > sens2 || sens6 > sens3 || sens6 > sens4 || sens6 > sens5 || sens6 > sens7)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens6");
    }
    if (sens7 > sens0 || sens7 > sens1 || sens7 > sens2 || sens7 > sens3 || sens7 > sens4 || sens7 > sens5 || sens7 > sens6)
    {
    lcd.setCursor(0, 1);
    lcd.print("sens7");
    }
    delay (100);
    }
     
  2. NR55RU

    NR55RU Гик

    Ошибка ваша в этом:
    lcd.print("sens7"); и тут не важно значение какого сенсора вы отправляете.
    Дело в том что если вы заключаете что то в двойные кавычки то в функцию передается не значение переменной а просто строка sens7 например.
    Таким образом что бы передать в функцию значение переменной надо сделать так:
    lcd.print(sens7); просто убрать кавычки.

    А еще можно избавится от такого длиннного кода :)
    И сделать например так (тут лишь часть "по делу" , setup и include с инициализайией LCD думаю сами добавите):

    Код (Text):
    const int SENS_NUM = 8;
    int sens[SENS_NUM] = {0,0,0,0,0,0,0,0};
    int maxValue = 0;

    void loop()
    {
        sens[0] = analogRead(A0);
        sens[1] = analogRead(A1);
        sens[2] = analogRead(A2);
        sens[3] = analogRead(A3);
        sens[4] = analogRead(A4);
        sens[5] = analogRead(A5);
        sens[6] = analogRead(A6);
        sens[7] = analogRead(A7);
     
        maxValue = 0;
        for(int i = 0; i < SENS_NUM; i++)
        {
            if( sens[i] > maxValue )
            {
                maxValue = sens[i];
            }
        }
     
        lcd.setCursor(0, 1);
        lcd.print(maxValue);
        delay(100);
    }
    P.s. Можно и считывание показаний сделать в цикле, но не стал делать.
     
    Megakoteyka и Aaron 16 нравится это.
  3. Aaron 16

    Aaron 16 Нуб

    Спасибо=)
     
  4. Aaron 16

    Aaron 16 Нуб

    И можно ли, в программе описанной выше, внести изменения которые позволят выводить на дисплей порядковый номер датчика?
     
  5. thearr

    thearr Нерд

    Код (Text):
    int maxSens = 0;
    ...
    if( sens[i] > maxValue )
    {
        maxValue = sens[i];
        maxSens = i;
    }
    ...
    lcd.print(maxSens);
     
  6. Aaron 16

    Aaron 16 Нуб

    спасибо