Не корректно отрабатывает участок кода выделенный красным ,тестером меряешь все ок(т.е управление работает нормально пока не подключил светодиоды). Но когда подключаем оба светодиода они светится еле еле в этот момент на светодиодах 1,7 в. Порты прове рял ок на другом коде. Код (Text): #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int val=0; int sec = 0; int lastSec = 0; int minute = 0 ; int lastMin=0; int hour=0; int lastTime2=0; int lastTime3=0; int brightness=0; byte b=0; byte n=0; #define PWM_PIN 9 #define LED_PIN 7 #define LED_PIN2 8 #define BAT_PIN A0 #define BAT_PIN2 A1 float U ; float U2 ; //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT); //analogWrite(9,50); // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.setCursor(0, 1); Serial.begin(9600); //установка порта на скорость 9600 бит/сек } ///////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): // print the number of seconds since reset: unsigned long currentMillis = millis(); int time = (millis()/900)%2 ; int time2 = (millis()/300)%20 ; int time3 = (millis()/1000)%2 ; ///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////Будем обрабатывать блютуз if (Serial.available()) { //если есть принятый символ, val = Serial.read(); } // то читаем его и сохраняем в val else if (val == '1') { hour=(hour+1)%24; val=0; } else if (val == '2') { minute=(minute+1)%60; val=0; } else if (val == '3'and hour >0) { hour=(hour-1); val=0; } else if (val == '4'and minute > 0) { minute=(minute-1); val=0; } else if (val == '5') { b=!b; digitalWrite(LED_PIN,b); } else if (val == '6') { n=!n; digitalWrite(LED_PIN2,n); val=0; } ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// if (time3!=lastTime3){ Serial.print ("Time = "); Serial.print (hour); Serial.print (" : "); Serial.print(minute); Serial.print (" : "); Serial.println(sec); Serial.print ("U1 = "); Serial.print(U); Serial.print ("B"); Serial.print(";"); Serial.print (" U2 = "); Serial.print(U2); Serial.print ("B"); Serial.println(";"); Serial.print("LED1 = "); Serial.print (b); Serial.print(";"); Serial.print(" LED2 = "); Serial.print (n); Serial.println(";"); Serial.print("PWM = "); Serial.print( brightness); Serial.println(";"); Serial.println(); lastTime3 = time3; U = analogRead(BAT_PIN) / 1024.0 * 5.0;// меррям батарейки U2 = analogRead(BAT_PIN2) / 1024.0 * 5.0; } ////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// //Здесь ведем расчет вермени для отображения на лсд sec=(millis()/1000)%60;//расчитываем колличество секунд зациклив их на 60 if (lastSec==59 and lastSec!=sec) minute=(minute+1)%60; if (sec!=lastSec){ lastSec=sec; //бес этого будет сумировать одну и туже секунду ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// brightness= map(sec, 0, 59, 0, 255);//меняем частоту шима analogWrite(PWM_PIN, brightness); ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// } if (lastMin==59 and lastMin!=minute) hour=(hour+1)%24; if (minute!=lastMin)//бес этого будет сумировать одну и туже min lastMin=minute; ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// Вывод бегающей надписи if (time2 == 0 ){ lcd.setCursor(0, 0); lcd.print(" "); } else if (time2 ==1 ){ lcd.setCursor(0, 0); lcd.print(" "); } ////////////////////////////////// else if (time2 ==2){ lcd.setCursor(0, 0); lcd.print(" "); } ////////////////////////////////// else if (time2 ==3){ lcd.setCursor(0, 0); lcd.print(" "); } ///////////////////////////////// else if (time2 ==4){ lcd.setCursor(0, 0); lcd.print(" " ); } //////////////////////////////////// else if (time2 ==5){ lcd.setCursor(0, 0); lcd.print(" "); } //////////////////////////////////// else if (time2==6){ lcd.setCursor(0, 0); lcd.print(" " ); } ///////////////////////////////////// else if (time2 ==7){ lcd.setCursor(0, 0); lcd.print(" "); } ///////////////////////////////////// else if (time2 ==8){ lcd.setCursor(0, 0); lcd.print(" "); } /////////////////////////////////////////// else if (time2==9){ lcd.setCursor(0, 0); lcd.print(" "); } ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// Выводим напряжения с аналаговых входов // else if (time2 ==11 and lastTime2 != lastTime2 ){ else if (time2 ==11 ){ lcd.setCursor(0, 0); lcd.print("U= "); lcd.setCursor(2,0); lcd.print(U); lcd.setCursor(6, 0); lcd.print("B"); lcd.setCursor(8,0); lcd.print("U="); lcd.setCursor(10, 0); lcd.print(U2); lcd.setCursor(14,0); lcd.print("B"); // lastTime2=lastTime2+1; } /////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////мигающая надпись перед часами if (time){ lcd.setCursor(0, 1); lcd.print("Total "); } else { lcd.setCursor(0, 1); lcd.print(" Time"); } ///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////Bввод часов lcd.setCursor(8, 1); lcd.print(":"); if (hour <10){ lcd.setCursor(6, 1); lcd.print("0"); lcd.setCursor(7, 1); lcd.print(hour); } else if (hour >9){ lcd.setCursor(6, 1); lcd.print(hour); } /////////////////////////////////////////////////////// //////////////////////////////////////////////////////Вывод минут с выравниванием по экрану if (minute <10){ lcd.setCursor(9, 1); lcd.print("0"); lcd.setCursor(10, 1); lcd.print(minute); } else if (minute >9){ lcd.setCursor(9, 1); lcd.print(minute); } /////////////////////////////////////////////////////// ////////////////////////////////////////////////////// if (time3){ //мигаем двуеточием lcd.setCursor(11, 1); lcd.print(":"); } if (!time3){ lcd.setCursor(11, 1); lcd.print(" "); } /////////////////////////////////////////////////////// ////////////////////////////////////////////////////// if (sec <10){ lcd.setCursor(12, 1); lcd.print("0"); lcd.setCursor(13, 1); lcd.print(sec); } else if(sec >9){ lcd.setCursor(12, 1); lcd.print(sec); } /////////////////////////////////////////////////////// ////////////////////////////////////////////////////// }
При этом сранно, что всё-таки светятся. У вас светодиоды как включены? Нулём включаются или единицей?
Чисто полюбопытствовать, если сделать так: pinMode(LED_PIN, INPUT); digitalWrite(LED_PIN, HIGH); включится подтяжка? Если включится, то увидим мы что-нибудь на выхлопе LED_PIN или это внутримикроконтроллерная (во как!) каша и на ногу ничего не выходит? Если увидим, то хватит ли этого "чего-нибудь", чтоб светодиод "тлел"? Чисто теоретически, по этой причине у ТС такие кренделя.
Это первое, что приходит в голову Надо, наконец, уже заглянуть в исходники, и увидеть, как там работает digitalWrite. Если б мы имели дело напрямую с регистрами, то так бы оно и было (для этого, правда должно совпасть, что светодиоды у ТС включаются единицей). Твист на подтяжках
Причем настраивать ногу на вход для такого поведения не обязательно. При старте, по умолчанию, все ноги контроллера работают в самом безопасном для периферии режиме - вход без подтяжки, или «High Z». Вот и тут, ноги контроллера при старте - в режиме "хз", и если digitalWrite в итоге просто меняет бит в регистре PORTx на 1, то, при настроенном регистре DDRx на вход (отвечает за направление порта), будет врублена подтяжка.