Ардуино. Переменная int Pres1 выводится на LCD1602. После связи с компом ее значение становится ложным. Также переменная обернута библой обработки кнопки, но кнопка не нажимается. Если ее оттуда убрать, то все в норме.
#include <LiquidCrystal.h>
#include <LCD_1602_RUS.h>
LCD_1602_RUS lcd(0x27, 16, 2);
int Pres1;
byte buf[32];
#include "GyverButton.h"
GButton b1(4);
void setup()
{
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
Pres1 = 1;
}
void loop()
{
SoftSetup();
b1.tick();
if (b1.isClick()) // кнопка конечно НЕ нажимается
{
Pres1 = 1; // любое число..... если это комментить, то все в норме - т.е. на индикаторе выводится 1
}
// // а вот если так, то уже все в норме
// uint8_t gg;
// if (gg == 1) // ложь
// {
// Pres1 = 1;
// }
}
void SoftSetup()
{
if (Serial.available() > 0)
{
byte ff = Serial.read();
if (ff == 131)
{
Serial.readBytes(buf, 36); // как эта строка может повлиять на Pres1????
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pres1 ");
lcd.print(Pres1); // выводится значения 257...258, а не 1. И эти значения почему то зависят от значений в buf
}
}
}
Нет, массив-то один, глобальный. Никакого локального нет.
Просто в оператор readBytes() передается не массив, а указатель, и тип у него - не массив. а указатель на символ
Конечно, если бы компилятор был “совсем умный” - он мог бы отследить ситуацию, и предупредить незадачливого “программиста”. Но посудите, разве это дело, когда компилятор мнит себя умнее автора программы?
Нет, тут компилятор С ведет себя как верный и почтительный слуга - “Ежели барину захотелось скопировать 36 байт в массив размером 32 - значит он знает, что делает. Не мне ему указывать, что да как”.