Озвучивание счетчика воды при расходе.

pacha74
Offline
Зарегистрирован: 12.07.2016

Всем привет. У меня жена очень похожа на енота полоскуна. Также любит полоскать.

Upper
Offline
Зарегистрирован: 23.06.2020

А у нас водопровод. Вот.

APJ
Offline
Зарегистрирован: 25.03.2015

Купите ей стиральную машину. Может добрее станет))

Green
Offline
Зарегистрирован: 01.10.2015

"...пока не купите стиральную машинку Снежинка"!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Мда, озвучите счётчик фразой "куда, льёшь, дура", а Ваша жена придёт сюда с вопросом как озвучить электросчётчик когда Вы свой компьютер (или что Вы больше всего любите) включаете :-)

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Мда, озвучите счётчик фразой "куда, льёшь, дура", а Ваша жена придёт сюда с вопросом как озвучить электросчётчик когда Вы свой компьютер (или что Вы больше всего любите) включаете :-)

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

ТС, а может ей хорошу стиральную машину купить? С качественным режимом полоскания?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

pacha74 пишет:

Всем привет. У меня жена очень похожа на енота полоскуна. Также любит полоскать.

Нельзя лишать женщину невинных удовольствий. Себе дороже выйдет )))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

эт точно, начнет разговаривать и не дай бог думать, платите исправно комуналку, не гневите ...

FoxJone
Offline
Зарегистрирован: 19.04.2019

v258 пишет:

pacha74 пишет:

Всем привет. У меня жена очень похожа на енота полоскуна. Также любит полоскать.

Нельзя лишать женщину невинных удовольствий. Себе дороже выйдет )))

Обидится и больше не поласкает....

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

FoxJone пишет:

v258 пишет:

pacha74 пишет:

Всем привет. У меня жена очень похожа на енота полоскуна. Также любит полоскать.

Нельзя лишать женщину невинных удовольствий. Себе дороже выйдет )))

Обидится и больше не поласкает....

это да, сказку про Шахерезаду не забываем, которая вместо ласки всю ночь рассказывала сказки )))

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

стиральная машина-Шахерезада - отпустите своего енота в лес.

pacha74
Offline
Зарегистрирован: 12.07.2016

Так вот чтоб помыть Одну кружку после чая нужно ей примерно 15-20 литров воды! А тарелку вообще молчу. Вот и хочу ,чтоб когда она слышала сколько воды у нее утекает. Нужно сначала придумать как снять расход воды с счетчика. Но счетчик под пломбой. Нужно ка-кто считывать  количество оборотов. Пробовал снимать количество импульсов при помощи лазерной указки и фоторезистора. Не стабильно. Сейчас попробовал при помощи ик датчика препятствия, уже лучше. Теперь нужно соединить два скетча, считает количество оборотов и конвертирует его в литры и выводит на 1602. На дисплее выводится два показания "сейчас -" и "всего-". Так вот нашел скетч где есть озвучка любых чисел. Он для МР3 модуля.

#include <SoftwareSerial.h>
#include <mp3TF.h>
#define BusyState 9 // пин BUSY плеера
#define c19 19  
#define c100 29  
#define c1000 38   
#define odna 76
#define dve 77
bool fl;
mp3TF mp3tf = mp3TF ();
char ccc[3];  
byte troyka [3];

//------------------------------------------------------------
void setup()
{ SoftwareSerial mySerial(8, 7); // RX, TX 
  mySerial.begin (9600);
  mp3tf.init (&mySerial);
  delay(200);
  pinMode(BusyState,INPUT);
  mp3tf.volumeSet(22);
  delay(200);
}
//------------------------------------------------------------
void ozv(int myfile)
{   mp3tf.playFolder2(1,myfile);
    delay(200);
    while(!digitalRead(BusyState));
}
//------------------------------------------------------------
void voicedig(char cc[])
{ int a,b,c,d,jj,sme,dp;
  a=strlen(cc);
  if (atoi(cc)==0) ozv(1); else
 { 
  for (byte i=0;i<3;i++) ccc[i]=0;
  b=a%3;c=a/3;jj=0;
  for (byte i=0;i<c+1;i++)
    {strncpy(ccc,cc+jj,b);
     d=atoi(ccc); a=d;
     for (byte i=0;i<3;i++)
       { troyka[2-i]=a%10; 
         a=a/10;
       }  
    if (d>0)
     { dp=troyka[2];
       if (c-i==1)
        if (troyka[2]==1) dp=odna;
          else if(troyka[2]==2) dp=dve;
       if (troyka[0]>0) ozv(c100+troyka[0]-1);
       if (troyka[1]>1) ozv(c19+troyka[1]);
          else if (troyka[1]==1) 
                  {ozv(troyka[1]*10+troyka[2]+1);
                   goto m1; 
                  }
       if (troyka[2]>0) ozv(dp+1);
       m1: a=d%100;
        if (a>19) a=d%10;
        if (a==1) sme=0; else
        if (a>1 && a<5) sme=1; else sme=2;
       if (c-i>0) ozv(c1000+(c-i-1)*3+sme);
      };
      jj=jj+b;b=3;
      delay(100); 
    }
 }
}
//------------------------------------------------------------

void loop()
{
  voicedig("91352412028529003471097014534460011762920");
 while(true);
}


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

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

беги от неё - дальше будет хуже.

pacha74
Offline
Зарегистрирован: 12.07.2016

не могу люблю ее

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Счётчик-водомер на импульсный поменяй.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

pacha74 пишет:

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

Не "что", а "куда" - в раздел "Ищу исполнителя".

pacha74
Offline
Зарегистрирован: 12.07.2016

он меряет десятки литров а моим способом точность измерения почти 20 мл

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

Купи посудомойку. А лучше сам собери. Тут в соседней теме есть инструкция как собрать ПММ из говна и палок

pacha74
Offline
Зарегистрирован: 12.07.2016

pacha74 пишет:

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

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



mp3TF mp3tf = mp3TF ();
char ccc[3];  
byte troyka [3];

//------------------------------------------------------------
void setup()
{ SoftwareSerial mySerial(8, 7); // RX, TX 
  mySerial.begin (9600);
  mp3tf.init (&mySerial);
  delay(200);
  pinMode(BusyState,INPUT);
  mp3tf.volumeSet(30);
  delay(200);
}
//------------------------------------------------------------
void ozv(int myfile)
{   mp3tf.playFolder2(1,myfile);
    delay(200);
    while(!digitalRead(BusyState));
}
//------------------------------------------------------------
void voicedig(char cc[])
{ int a,b,c,d,jj,sme,dp;
  a=strlen(cc);
  if (atoi(cc)==0) ozv(1); else
 { 
  for (byte i=0;i<3;i++) ccc[i]=0;
  b=a%3;c=a/3;jj=0;
  for (byte i=0;i<c+1;i++)
    {strncpy(ccc,cc+jj,b);
     d=atoi(ccc); a=d;
     for (byte i=0;i<3;i++)
       { troyka[2-i]=a%10; 
         a=a/10;
       }  
    if (d>0)
     { dp=troyka[2];
       if (c-i==1)
        if (troyka[2]==1) dp=odna;
          else if(troyka[2]==2) dp=dve;
       if (troyka[0]>0) ozv(c100+troyka[0]-1);
       if (troyka[1]>1) ozv(c19+troyka[1]);
          else if (troyka[1]==1) 
                  {ozv(troyka[1]*10+troyka[2]+1);
                   goto m1; 
                  }
       if (troyka[2]>0) ozv(dp+1);
       m1: a=d%100;
        if (a>19) a=d%10;
        if (a==1) sme=0; else
        if (a>1 && a<5) sme=1; else sme=2;
       if (c-i>0) ozv(c1000+(c-i-1)*3+sme);
      };
      jj=jj+b;b=3;
      delay(100); 
    }
 }
}
//------------------------------------------------------------

void loop()
{
  if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);

}
  voicedig(str);
  // voicedig("6754");
 while(true);
}

 

pacha74
Offline
Зарегистрирован: 12.07.2016

я пытался это сделать через сериал порт, как бы отправить в ардуинку число а она его произносит. Что не так ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

pacha74, привыкайте сразу правильно форматировать текст скетча. То форматирование, что у Вас сейчас, сбивает Вас с толку и не дает самостоятельно найти ошибку.

pacha74
Offline
Зарегистрирован: 12.07.2016

Rumata пишет:

Купи посудомойку. А лучше сам собери. Тут в соседней теме есть инструкция как собрать ПММ из говна и палок

 

 

Спасибо конечно но хотелось бы чтобы счетчик все таки озвучивал свой расход. Я думаю что это поможет.

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

b707
Offline
Зарегистрирован: 26.05.2017

pacha74 пишет:

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

потому что процедура "говорения" хочет тип char[]. а ты ей подсовываешь String

Upper
Offline
Зарегистрирован: 23.06.2020

Еще str объявляется в строке 64 внутри условия, и после выхода из условия может не существовать.

pacha74
Offline
Зарегистрирован: 12.07.2016
68   voicedig(str);
69   // voicedig("");

Вот почему цифры в коавычках озвучивает, переменную voicedig(str); Нет? В мониторе порта то пишет.

pacha74
Offline
Зарегистрирован: 12.07.2016
68   voicedig(str);
69   // voicedig("");

Вот почему цифры в коавычках озвучивает, переменную voicedig(str); Нет? В мониторе порта то пишет.

b707
Offline
Зарегистрирован: 26.05.2017

Upper пишет:

Еще str объявляется в строке 64 внутри условия, и после выхода из условия может не существовать.

+100

voicedig(str);  надо перенести на 1 строчку вверх

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

pacha74 пишет:

Я живу в селе и выкачивать яму каждый месяц из за ее полосканий надоело.

Пусть сама качает. Поверь, очень быстро сама перейдет на сухой способ очистки посуды))

pacha74
Offline
Зарегистрирован: 12.07.2016

Качает машина за деньги. А вычерпывать ведром  заставить мне ее жалко.

pacha74
Offline
Зарегистрирован: 12.07.2016

b707 пишет:

Upper пишет:

Еще str объявляется в строке 64 внутри условия, и после выхода из условия может не существовать.

+100

voicedig(str);  надо перенести на 1 строчку вверх

точно я пропустил что voicedig(str); стоит за скобкой. Сейчас попробую

pacha74
Offline
Зарегистрирован: 12.07.2016

ничего не говорит и перестало писать в мониторе порта

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

pacha74 пишет:

Спасибо конечно но хотелось бы чтобы счетчик все таки озвучивал свой расход. Я думаю что это поможет.

Скорее всего это начнет раздражать. В том числе и вас. Таки соглашусь с советовавшими купить посудомойку

pacha74
Offline
Зарегистрирован: 12.07.2016
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);
}
}
этот код выводит числа а в этом нет теперь, что не так




#include <SoftwareSerial.h>
#include <mp3TF.h>
#define BusyState 9 // пин BUSY плеера
#define c19 19  
#define c100 29  
#define c1000 38   
#define odna 76
#define dve 77
bool fl;
mp3TF mp3tf = mp3TF ();
char ccc[3];  
byte troyka [3];

//------------------------------------------------------------
void setup()
{ SoftwareSerial mySerial(8, 7); // RX, TX 
  mySerial.begin (9600);
  mp3tf.init (&mySerial);
  delay(200);
  pinMode(BusyState,INPUT);
  mp3tf.volumeSet(30);
  delay(200);
}
//------------------------------------------------------------
void ozv(int myfile)
{   mp3tf.playFolder2(1,myfile);
    delay(200);
    while(!digitalRead(BusyState));
}
//------------------------------------------------------------
void voicedig(char cc[])
{ int a,b,c,d,jj,sme,dp;
  a=strlen(cc);
  if (atoi(cc)==0) ozv(1); else
 { 
  for (byte i=0;i<3;i++) ccc[i]=0;
  b=a%3;c=a/3;jj=0;
  for (byte i=0;i<c+1;i++)
    {strncpy(ccc,cc+jj,b);
     d=atoi(ccc); a=d;
     for (byte i=0;i<3;i++)
       { troyka[2-i]=a%10; 
         a=a/10;
       }  
    if (d>0)
     { dp=troyka[2];
       if (c-i==1)
        if (troyka[2]==1) dp=odna;
          else if(troyka[2]==2) dp=dve;
       if (troyka[0]>0) ozv(c100+troyka[0]-1);
       if (troyka[1]>1) ozv(c19+troyka[1]);
          else if (troyka[1]==1) 
                  {ozv(troyka[1]*10+troyka[2]+1);
                   goto m1; 
                  }
       if (troyka[2]>0) ozv(dp+1);
       m1: a=d%100;
        if (a>19) a=d%10;
        if (a==1) sme=0; else
        if (a>1 && a<5) sme=1; else sme=2;
       if (c-i>0) ozv(c1000+(c-i-1)*3+sme);
      };
      jj=jj+b;b=3;
      delay(100); 
    }
 }
}
//------------------------------------------------------------

void loop()
{
  if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);

}
 // voicedig(str);
   voicedig("6754");
 while(true);
}

 

pacha74
Offline
Зарегистрирован: 12.07.2016

pacha74 пишет:

void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);
}
}
этот код выводит числа а в этом нет теперь, что не так




#include <SoftwareSerial.h>
#include <mp3TF.h>
#define BusyState 9 // пин BUSY плеера
#define c19 19  
#define c100 29  
#define c1000 38   
#define odna 76
#define dve 77
bool fl;
mp3TF mp3tf = mp3TF ();
char ccc[3];  
byte troyka [3];

//------------------------------------------------------------
void setup()
{ SoftwareSerial mySerial(8, 7); // RX, TX 
  mySerial.begin (9600);
  mp3tf.init (&mySerial);
  delay(200);
  pinMode(BusyState,INPUT);
  mp3tf.volumeSet(30);
  delay(200);
}
//------------------------------------------------------------
void ozv(int myfile)
{   mp3tf.playFolder2(1,myfile);
    delay(200);
    while(!digitalRead(BusyState));
}
//------------------------------------------------------------
void voicedig(char cc[])
{ int a,b,c,d,jj,sme,dp;
  a=strlen(cc);
  if (atoi(cc)==0) ozv(1); else
 { 
  for (byte i=0;i<3;i++) ccc[i]=0;
  b=a%3;c=a/3;jj=0;
  for (byte i=0;i<c+1;i++)
    {strncpy(ccc,cc+jj,b);
     d=atoi(ccc); a=d;
     for (byte i=0;i<3;i++)
       { troyka[2-i]=a%10; 
         a=a/10;
       }  
    if (d>0)
     { dp=troyka[2];
       if (c-i==1)
        if (troyka[2]==1) dp=odna;
          else if(troyka[2]==2) dp=dve;
       if (troyka[0]>0) ozv(c100+troyka[0]-1);
       if (troyka[1]>1) ozv(c19+troyka[1]);
          else if (troyka[1]==1) 
                  {ozv(troyka[1]*10+troyka[2]+1);
                   goto m1; 
                  }
       if (troyka[2]>0) ozv(dp+1);
       m1: a=d%100;
        if (a>19) a=d%10;
        if (a==1) sme=0; else
        if (a>1 && a<5) sme=1; else sme=2;
       if (c-i>0) ozv(c1000+(c-i-1)*3+sme);
      };
      jj=jj+b;b=3;
      delay(100); 
    }
 }
}
//------------------------------------------------------------

void loop()
{
  if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);

}
 // voicedig(str);
   voicedig("6754");
 while(true);
}

 

блин все в одну кучу слил

pacha74
Offline
Зарегистрирован: 12.07.2016
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);
}
}

так пишет в порт

а в этом нет. вроде все одно и тоже или он передает на 7,8 пины



#include <SoftwareSerial.h>
#include <mp3TF.h>
#define BusyState 9 // пин BUSY плеера
#define c19 19  
#define c100 29  
#define c1000 38   
#define odna 76
#define dve 77
bool fl;
mp3TF mp3tf = mp3TF ();
char ccc[3];  
byte troyka [3];

//------------------------------------------------------------
void setup()
{ SoftwareSerial mySerial(8, 7); // RX, TX 
  mySerial.begin (9600);
  mp3tf.init (&mySerial);
  delay(200);
  pinMode(BusyState,INPUT);
  mp3tf.volumeSet(30);
  delay(200);
}
//------------------------------------------------------------
void ozv(int myfile)
{   mp3tf.playFolder2(1,myfile);
    delay(200);
    while(!digitalRead(BusyState));
}
//------------------------------------------------------------
void voicedig(char cc[])
{ int a,b,c,d,jj,sme,dp;
  a=strlen(cc);
  if (atoi(cc)==0) ozv(1); else
 { 
  for (byte i=0;i<3;i++) ccc[i]=0;
  b=a%3;c=a/3;jj=0;
  for (byte i=0;i<c+1;i++)
    {strncpy(ccc,cc+jj,b);
     d=atoi(ccc); a=d;
     for (byte i=0;i<3;i++)
       { troyka[2-i]=a%10; 
         a=a/10;
       }  
    if (d>0)
     { dp=troyka[2];
       if (c-i==1)
        if (troyka[2]==1) dp=odna;
          else if(troyka[2]==2) dp=dve;
       if (troyka[0]>0) ozv(c100+troyka[0]-1);
       if (troyka[1]>1) ozv(c19+troyka[1]);
          else if (troyka[1]==1) 
                  {ozv(troyka[1]*10+troyka[2]+1);
                   goto m1; 
                  }
       if (troyka[2]>0) ozv(dp+1);
       m1: a=d%100;
        if (a>19) a=d%10;
        if (a==1) sme=0; else
        if (a>1 && a<5) sme=1; else sme=2;
       if (c-i>0) ozv(c1000+(c-i-1)*3+sme);
      };
      jj=jj+b;b=3;
      delay(100); 
    }
 }
}
//------------------------------------------------------------

void loop()
{
  if (Serial.available() > 0) {
String str = Serial.readString();
Serial.println(str);

}
 // voicedig(str);
   voicedig("6754");
 while(true);
}

 

pacha74
Offline
Зарегистрирован: 12.07.2016

b707 пишет:

pacha74 пишет:

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

потому что процедура "говорения" хочет тип char[]. а ты ей подсовываешь String

а где это поменять я не очень в этом понимаю String-обьект а char-массив символов. Где все это прописать или объявить.

pacha74
Offline
Зарегистрирован: 12.07.2016

sadman41
Offline
Зарегистрирован: 19.10.2016
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

pacha74 пишет:

68   voicedig(str);
69   // voicedig("");

Вот почему цифры в коавычках озвучивает, переменную voicedig(str); Нет? В мониторе порта то пишет.

Зачем Вы задаете вопросы, если не читаете на них ответы?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

pacha74 пишет:

Качает машина за деньги. А вычерпывать ведром  заставить мне ее жалко.

усилия безполезны, видимо детство прошло в квартире с централизованной канализацией, а сельские девчата моют ворох посуды  в трёх чашках воды )))

pacha74
Offline
Зарегистрирован: 12.07.2016

Я читаю только не всё понимаю что мне советуют если бы я также разбирался как те кто советуют или даже в 5раз меньше я бы тут не просил помочь понять принцип кода говорили

Green
Offline
Зарегистрирован: 01.10.2015

"Образ сурка ведете жизни". Напомнило.

pacha74
Offline
Зарегистрирован: 12.07.2016

Блин аж самому смешно стало когда прочёл что написал. Нет я не такой.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Лучше бы магнит повесил.

pacha74
Offline
Зарегистрирован: 12.07.2016

А на яму ,куда вода течет,что вешать?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Дык купи посудомойку, вот тебе и экономия. А если хочешь сэкономить прям совсем, то перекрой подачу воды. Ну и что что вши заведутся, за то бесплатно :)

Че так странно... Вода из водопровода, а канализации нет ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если сравнить стоимость подводки водопровода и канализации - ничего удивительного.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Канализации может не быть физически, а водопровод есть почти везде

b707
Offline
Зарегистрирован: 26.05.2017

brokly пишет:

Че так странно... Вода из водопровода, а канализации нет ?

такое нередко. У моей жены так в материнском доме, так что у меня жена тренированная, нет таких проблем, как у ТС :)

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

TC, просто возьми это нелёхкое бремя мытья посуды в свои руки. 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Знавал я женщин, которые заявляли "мытье посуды - не мужское дело" и гоняли мужиков от мойки ))