Код работает на UNO без проблем, а вот на Pro Mini

Доброго дня, уважаемые форумчане!
/как то я мучал вас своими “глупыми” вопросами, какими они за частую и являлись, на старом форуме в оккупированной мной теме “проблема функции “millis()”” .
Вот решил продолжить и на новом форуме.
/
Написал, как мне показалось, рабочую, замечательную программку в несколько строк.
всю отладку провел на уно - без проблем. Залил в Pro Mini, и… насос включается и не отключается, что с датчиком не делай. собственно вопрос - что бы самому разобраться, нужно как то выводить значения в компорт с Pro Mini, но не нашел как это сделать без программатора (прошил через уно), есть способы? (унка у меня китайская, камень не снимается)
Заранее спасибо!

#define sens 0                                                                                   // назначение пина датчика
#define nasos 12                                                                                 // назначение пина насоса
int sensvalue, filtr, ss, val_sensvalue;                                                         // создание переменных
long T;                                                                                          // создание переменных
boolean statusNasos = digitalRead(nasos);                                                        // создание переменной с которой программа считывает статус насоса (вкл/выкл) и считывание сигнала с пина управления насосом
void setup() {
 Serial.begin(9600);                                                                              // инициализация серийного порта с присвоением частоты (удалить)
 pinMode(nasos, OUTPUT);                                                                         // назначение пина выходным
 pinMode(sens, INPUT) ;                                                                          // назначение пина входным
 digitalWrite(nasos,LOW);                                                                        // назначение сигнала на пине (выкл)
 sensvalue = analogRead(sens);                                                                    // считывание значения с датчика и присвоение его переменной
 T = millis();                                                                                    // присвоение переменной текущего значения счетчика времени 
}

void loop() {
if(statusNasos == LOW){                                                                          // если насос выключен, то
 if( (millis()-T)>= 3000){                                                                       //если разница значении переменной "Т" и счетчика "millis" составляет больше 3000 едениц, то
 T = millis();                                                                                   //присвоение переменной текущего значения счетчика времени
 ss = analogRead(sens);                                                                          //присвоение значения с пина датчика переменной "ss"
 sensvalue = (sensvalue * 5 + ss)/6;                                                             // математическая операция усредняющая показания значения с датчика за пооследние 6 измерений
 val_sensvalue = map(sensvalue,200,480,0,10);                                                    // математическая оперрация приводящая цифру от минимального до максимального значения к виду от 0 до 10 в случае еслизначение не выходит за рамки от 200 до 480 
 val_sensvalue = constrain(val_sensvalue,0,10);                                                  // задает значение "0" всему что меньше нуля и "10" всему что больше
 }
 if (val_sensvalue != filtr  ){                                                                  //если значение одной переменной отличается от  значения другой, то 
  Serial.print(val_sensvalue); Serial.print(". ");Serial.print(millis()/1000/60);Serial.println(" MuHyT");       // вывести в серийный порт следующие данные
  filtr = val_sensvalue;                                                                         // присвоить значение переменной "вал", переменной "фильтр"
  }}
if (val_sensvalue >= 7 && statusNasos == LOW){                                                   // если значение переменной "вал" больше или ровно 7 и если значение переменной "статуснасос" имеет низкий уровень, то
   digitalWrite(nasos,HIGH);                                                                        // подать на пин насоса питание (перевезти значение на высокий уровень
   Serial.println(" Bk/|");                                                                      // вывести в серийный порт следующие данные
   statusNasos = digitalRead(nasos);                                                             // записать значение уровня на пине насоса в переменную "статус насос"
 }
 if (statusNasos == HIGH){                                                                       //если значение переменной "статуснасос" имеет высокий уровень, то
    ss = analogRead(sens);                                                                       //присвоение значения с пина датчика переменной "ss"
    sensvalue = (sensvalue * 5 + ss)/6;                                                          // математическая операция усредняющая показания значения с датчика за пооследние 6 измерений
    val_sensvalue = map(sensvalue,200,480,0,10);                                                 // математическая оперрация приводящая цифру от минимального до максимального значения к виду от 0 до 10 в случае еслизначение не выходит за рамки от 200 до 480 
    val_sensvalue = constrain(val_sensvalue,0,10);                                               // задает значение "0" всему что меньше нуля и "10" всему что больше
    if (val_sensvalue != filtr  ){
    Serial.println(val_sensvalue);                                                               // вывести в серийный порт следующие данные
    filtr = val_sensvalue;
    } 
 if (val_sensvalue <= 2 && statusNasos == HIGH){                                                 // если значение переменной "вал" меньше или ровно 2 и если значение переменной "статуснасос" имеет высокий уровень, то
    digitalWrite(nasos,LOW);                                                                        // снять с пина насоса питание (перевезти значение на низкий уровень
    Serial.println("Bblk/|");                                                                    // вывести в серийный порт следующие данные
    statusNasos = digitalRead(nasos);                                                            // записать значение уровня на пине насоса в переменную "статус насос"
 }}
}

Если работало на Уно, должно работать и на про мини. Там одинаковые МК. Ищите проблемы с подключением. Возможно, где-то неконтакт, возможно, где-то есть ненужный контакт

Конвертер USB-TTL

Проблемка в том, что реагирует программа на датчик. когда он подключен, то насос включается секунд через 5-10, при отсоединении датчика выключается сразу(ну оно и понятно, при включенном насосе, показания с датчика считываются постоянно.
вероятно, если бы была проблема с прошивкой(неконтакт) то код не работал бы вовсе.

Я не говорил о проблемах с прошивкой, читайте внимательно

Причина вряд ли в этом, но на всякий случай, 9 и 11 строчка работают с разными пинами. (9-я вам не нужна скорее всего)

Эммм, а с каких пор нулевой пин стал аналоговым входом?

А оно (analogread) вроде и такое обозначение принимает. Или я уж путаю? Надо смотреть.

1 лайк

Нано 16мгц, а про мини 8мгц, у меня DS18B16 температурный датчик не работал.

на моей 16 кварц стоит

А, да есть два варианта

Принять-то оно примет, а вот что будет выдавать? ))

Нормально примет. С 0-го канала АЦП.

вооот, а что бы посмотреть нужно что бы контроллер с портом общался, а как его заставить без программатора?

А это я кому писал?

1 лайк

а других вариантов нет? 1го февраля “устроиство” должно быть протестировано и работать в штатном режиме, а то цветочки без меня погибнут. не успеет приблуда с китая приехать…

Любой USB-UART конвертер, он копейки стоит

или такой

1 лайк

признаться честно, я думал это реклама вылезла…

Возьми свою UNO, вывод Reset соедини с GND, а выводы TX и RX с UNO соедини с выводами TX и RX Pro Mini. Таким образом из UNO получается USB-TTL конвертер.

2 лайка

А кроме Китая ничего нет?
https://www.ozon.ru/product/modul-preobrazovatel-interfeysov-usb-ttl-uart-6-pin-gsmin-na-baze-cp2102-chernyy-674364147/?asb=am9HdjQc6bG968qhlGxSxuPE1paDVDo1Fmzx64j8hr0%253D&at=99trO4oRgHDz43jWFB3wG1EiBP7rV1CBWZkOATvrEkgj&avtc=1&avte=4&avts=1737532499&keywords=usb+ttl+адаптер

В крайнем случае можно использовать Уно - соединить пины Rx-Rx, Tx-Tx и кинуть на Уно перемычку между Reset и GND

1 лайк

это работает даже с несьемным камнем?