Доброго времени суток, не могу понять почему не считывает информацию с реле. Нужно чтобы при переключении реле на дисплей выводилась надпись XXXXX или YYYYY если выключено реле. Код (C++): #include <Adafruit_GFX.h> // Core graphics library //#include <Adafruit_TFTLCD.h> // Hardware-specific library #include <Wire.h> #include <LM75.h> #include <MCUFRIEND_kbv.h> //----------------------------------------| // TFT Breakout -- Arduino UNO / Mega2560 / OPEN-SMART UNO Black // GND -- GND // 3V3 -- 3.3V // CS -- A3 // RS -- A2 // WR -- A1 // RD -- A0 // RST -- RESET // LED -- GND // DB0 -- 8 // DB1 -- 9 // DB2 -- 10 // DB3 -- 11 // DB4 -- 4 // DB5 -- 13 // DB6 -- 6 // DB7 -- 7 MCUFRIEND_kbv tft; LM75 sensor; // initialize an LM75 object // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF // Реле модуль подключен к цифровому выводу 4 int Relay = 4; void setup(void) { Serial.begin(9600); Wire.begin(); Serial.println(F("TFT LCD test")); pinMode(Relay, OUTPUT); #ifdef USE_ADAFRUIT_SHIELD_PINOUT Serial.println(F("Using Adafruit 3.2\" TFT Arduino Shield Pinout")); #else Serial.println(F("Using Adafruit 3.2\" TFT Breakout Board Pinout")); #endif Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height()); tft.reset(); uint16_t identifier = tft.readID(); if(identifier == 0x9325) { Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); } else if(identifier == 0x4747) { Serial.println(F("Found HX8347A LCD driver")); } else if(identifier == 0x9326) { Serial.println(F("Found ILI9326 LCD driver")); } else if(identifier == 0x9327) { Serial.println(F("Found ILI9327 LCD driver")); } else if(identifier == 0x65) { Serial.println(F("Found HX8352B LCD driver")); } else { Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:")); Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT")); Serial.println(F("should appear in the library header (Adafruit_TFT.h).")); Serial.println(F("If using the breakout board, it should NOT be #defined!")); Serial.println(F("Also if using the breakout, double-check that all wiring")); Serial.println(F("matches the tutorial.")); return; } tft.begin(0x65);//to enable HX8352B driver code tft.fillScreen(BLACK ); } void loop(void) { tft.setRotation(1); tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(GREEN ); tft.setTextSize(3); tft.print(sensor.temp()); tft.print(" C" ); delay(3000); digitalWrite(Relay, LOW); // реле включено delay(5000); digitalWrite(Relay, HIGH); // реле выключено delay(5000); if (digitalRead(Relay)==LOW) {Serial.println("LOW"); tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(YELLOW ); tft.setTextSize(3); tft.println(" XXXX" ); } else (digitalRead(Relay)==HIGH); {Serial.println("HIGH"); tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(WHITE ); tft.setTextSize(3); tft.println(" YYYY" );} }
Автор приходил на ардуино.ру с этим скетчем, на совет читать книжки ответил. что он за свою жизнь прочитал уже стока, скока иные из нас за всю жизнь не видели - и по ардуино ему уже читать лень Хотя. надо сказать - некоторый прогресс виден. Раньше эта строка была записана как Код (C++): else (Relay, LOW);
в том то и дело, читал уже, пробовал по разному писать код, или не работает или ошибку выдаёт, я не программист, поэтому и прошу у вас помощи
проблема в том, что в одном-то месте мы можем подсказать - но пока вы не освоите синтаксис и правила языка - у вас подобные ляпы будут постоянно - а постоянно вас никто за ручку водить не будет. Держите решение - напишите просто else Стандартный условный оператор if имеет такой синтаксис: Код (C++): if (УСЛОВИЕ) { //код исполняемый если условие истинно ...} else { //код исполняемый если условие ложно } Условие тут проверяется только в ветке IF, в ELSE никакого своего условия нет, этот код выполняется, если первая проверка не прошла. Сами подумайте - вот например в Вашем случае - зачем отдельно проверять реле на HIGH и отдельно на LOW - ведь если реле не HIGH. то оно LOW и других вариантов нет. Но второй раз на подобное разжевывание не рассчитывайте, читайте учебники.
у вас там не так написано. Неужели вы не видите разницы? Может вам тогда не стоит заниматься программированием? - все равно не освоите
извиняюсь, я код не видел в вашем сообщении, сейчас написано так Код (C++): if(digitalRead(Relay)==LOW) { tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(YELLOW ); tft.setTextSize(3); tft.println(" XXXX" ); } else { tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(WHITE ); tft.setTextSize(3); tft.println(" XXXX" );} всё равно не работает, ошибки нет но и не работает
да исправен, включается эта запись после загрузки Код (C++): else { tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(WHITE ); tft.setTextSize(3); tft.println(" XXXX" );} и потом всё время включена не зависимо от положения реле
да но в одном случае она белая в другом жёлтая, работает белая , причем постоянно, реле вкл. выкл....
так у вас в коде перед этим условием реле всегда переводится в HIGH - что же вы хотите, чтобы там показывалось?
Код (C++): digitalWrite(Relay, LOW); // реле включено delay(5000); digitalWrite(Relay, HIGH); // реле выключено delay(5000); оно включается и выключается с интервалом 5000 я хочу чтобы в позиции LOW был один текст , а в позиции HIGH другой
И что? Смотрите на код Код (C++): 1: digitalWrite(Relay, LOW); // реле включено 2: delay(5000); 3: digitalWrite(Relay, HIGH); // реле выключено 4: delay(5000) 5: if(digitalRead(Relay)==LOW) {.... Я для наглядности даже написал вам номера, в порядке которых компьютер исполняет команды. В строке 1 вы переводите реле в состояние LOW, в строке 2 - ждете 5 сек, в строке 3 переводите реле в HIGH, в строке 4 опять ждете. И вот - ВНИМАНИЕ - когда вы в строке 5 проверяете состояние реле - оно у вас HIGH Вся эта конструкция бегает по кругу, но суть не меняется - КАЖДЫЙ РАЗ когда вы проверяете реле - оно в состоянии HIGH я ж вам говорил выше, что из-за того, что вы ничего не знаете - вы будете наступать на грабли постоянно