обработка char

animalboy
Offline
Зарегистрирован: 06.11.2021

на большие расстояния можно только мощность передать, электроны они примерно на одном и том же месте зудят с частотой 50 гц, насколько я понимаю

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

animalboy пишет:

))))))))))) а разве электрон сгенерировать можно?) я думал его только от атома "оторвать" 

Ну я и имел в виду под "генерацией" отрывание электронов с их орбит и продаже населению и промышленности по сходным тарифам. Не знаю людей, которые видели эти электроны, но знаю нескольких, которые на самой идее поднялись не по детски))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

animalboy пишет:
программировать хочу.

Я тоже хочу. А приходится коробочки клеить. В 50+ тока кондуктором устроиться реально. 

animalboy
Offline
Зарегистрирован: 06.11.2021

DetSimen пишет:

animalboy пишет:
программировать хочу.

Я тоже хочу. А приходится коробочки клеить. В 50+ тока кондуктором устроиться реально. 

мне 30

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

DetSimen пишет:

Я тоже хочу. А приходится коробочки клеить. В 50+ тока кондуктором устроиться реально. 

При том, что в коммерческой промышленности ОСТРЫЙ дефицит технарей высокой квалификации: (главных) инженеров, энергетиков, технологов все знают по именам в каждой отрасли... С конструкторами вообще  катастрофа. 

Всем по умолчанию за 55. 

animalboy
Offline
Зарегистрирован: 06.11.2021

В промышленности свежей крови нет. Все, кто поумней, в ит. ИМХО

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

animalboy пишет:

 Удовольствие я получил от выполнения. Поэтому хочу "добить".

Зацепила тема, так как сам ещё начинающий.

Я думаю, и не могло получиться, т.к. матрица, скорее всего с динамической индикацией, и простым

digitalWrite() не отделаешься. Вообще, прежде чем писать прогу , надо определиться с железом, а то digitalWrite, а куда , зачем, непонятно...

Ради интереса, сделал вариант для простой матрицы с дин. индикацией. Может быть чем то поможет

 




bool On_led[4][4] = { // массив флагов
  {0, 0, 0, 0},       // активных диодов
  {0, 0, 0, 0},
  {0, 0, 0, 0},
  {0, 0, 0, 0},
};

byte status_btn[4][4] = { //массив состяния кнопок
  {0, 0, 0, 0},
  {0, 0, 0, 0},
  {0, 0, 0, 0},
  {0, 0, 0, 0}
};

const byte button[4][4] = {
  {1, 2, 3, 4},     //'1','4','7','*'    задаём
  {5, 6, 7, 8},     //'2','5','8','0'    номера кнопок
  {9, 10, 11, 12},  //'3','6','9','#'
  {13, 14, 15, 16}  //'A','B','C','D'
};

byte str = 0; //строки On_led
byte stb = 0; // столбцы On_led
byte z; // столбцы кнопки
byte i = 1; // строки кнопки
byte str_ind = 10;// строки индикации
unsigned long last_millis = 0;

void led();
void read_button();


void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT); // строки кнопки
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, INPUT); // столбцы
  pinMode(7, INPUT); // пины подтянуты 
  pinMode(8, INPUT); // к земле активный HIGH
  pinMode(9, INPUT);

  pinMode(10, OUTPUT); // строки LED
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(14, OUTPUT); // столбцы LED
  pinMode(15, OUTPUT);
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);
}

void loop() {
  if (millis() - last_millis >= 8) { // каждые 8мс
    last_millis = millis();
    led();

  }
}


void led() {
  byte str_state;
  digitalWrite(str_ind, LOW); //гасим предыдущую строку

  for (byte ff = 14; ff < 18; ff++) {
    digitalWrite(ff, LOW);   //
  }
  str_ind++;
  if (str_ind > 13) {
    str_ind = 10;
    read_button();
  }
  str_state = str_ind - 10;

  digitalWrite(str_ind, HIGH); //активируем строку
  for (byte zz = 0; zz < 4; zz++) {
    if (On_led[str_state][zz])
      digitalWrite(zz + 14, HIGH);
  }

}


void read_button() {

  digitalWrite(i, LOW); //гасим предыдущую строку кнопок
  i++;
  if (i > 6)
    i = 2;

  digitalWrite(i, HIGH); //"активируем" строку кнопок

  for (z = 6; z < 10; z++) { //опрашиваем столбец
    str = i - 2; // номер текущей строки On_led
    stb = z - 6; // номер текущего столбца On_led

    if((digitalRead(z) == LOW) && (status_btn[str][stb] == 1)){ //если кнопка удерживается 
    // менее 32мс - сброс
    status_btn[str][stb] == 0;
    }

    if ((digitalRead(z)) && (status_btn[str][stb] == 0) ) { // если кнопка нажата, но ещё не активна
      status_btn[str][stb] = 1; //будем проверять на антидребезг
    }

    else if ((digitalRead(z)) && (status_btn[str][stb] == 1) ) { // если подтвердили, что кнопка нажата
      status_btn[str][stb] = 2; //фиксируем, что кнопка нажата 1-ый раз
      Serial.println(button[str][stb]);// печатаем номер кнопки
      On_led[str][stb] = true; // зажигаем диод
    }

    else if ((digitalRead(z) == LOW) && (status_btn[str][stb] == 2)) { // если кнопка была нажата 1 раз,
      // и отпущена
      status_btn[str][stb] = 3; //ждём подтверждения антидребезга
    }

    else  if ((digitalRead(z) == LOW) && (status_btn[str][stb] == 3)) {  // констатируем факт 1-го 
      status_btn[str][stb] = 4; // нажатия и отпускания кнопки
    }

    else if ((digitalRead(z)) && (status_btn[str][stb] == 4)) { // если кнопка нажата повторно
      status_btn[str][stb] = 5; //ждём подтверждения антидребезга
    }

    else if ((digitalRead(z)) && (status_btn[str][stb] == 5)) { //подтвердаем второе нажатие
      status_btn[str][stb] = 6;
      On_led[str][stb] = false; //гасим диод
    }


    else if ((digitalRead(z) == LOW) && (status_btn[str][stb] == 6)) { // если
      status_btn[str][stb] = 7;                                        //  кнопка отпущена
    }
    else if ((digitalRead(z) == LOW) && (status_btn[str][stb] == 7)) { // подтверждаем
      status_btn[str][stb] = 0;
    }
  }
}

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

animalboy пишет:

мне 30

Бывает, чо.  Это быстро пройдёть. :)

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

DetSimen пишет:

animalboy пишет:

мне 30

Бывает, чо.  Это быстро пройдёть. :)

Между 30 и 50 только миг. И он называется...