Jump to content

Нужна помощь по скетчу


MedicusAmicus

Recommended Posts

ТЗ: ночное освещение коридора.

Ардуинка измеряет освещенность и, ультразвуковым дальномером HC-SR04, - расстояние до препятствия.

 

Если темно и расстояние уменьшилось - зажечь свет.

Все бы работало неплохо, кроме: периодически дальномер выдает ошибку в расстоянии - 1-2 измерения, что приводит к ложным срабатываниям.

Попробовал усреднение из отсюда - не помогло.

Люди добрые! Помогите, кто чем может!

 

Костыли под катом

 

#define LDR_PIN A1 //пин фоторезистора
//#define POT_PIN A2 //пин регулятора
#define RELAY_PIN A0 //пин реле

#define S_TRIG 3 //триггер звука
#define S_ECHO 4 //ловим эхо


const byte averageFactor = 10;   // коэффициент сглаживания показаний (0 = не сглаживать)
                               // чем выше, тем больше "инерционность"                                
int RANGE = 178; //предел дистанции обнаружения
int impulseTime = 180;            // считанное значение
int sensorDistance; 

unsigned long previousMillis1 = 0;      //храним время последнего Включения света
unsigned long interval = 10000;     	//интервал работы (10 секунд)

void setup() {
 Serial.begin(9600); 
 pinMode (RELAY_PIN, OUTPUT);
 pinMode (S_TRIG, OUTPUT);
  }


void loop() {
 // put your main code here, to run repeatedly:
  
 int light = analogRead(LDR_PIN); //читаем освещенность
 int tres = 400; // analogRead(POT_PIN); //читаем порог  
 
 bool dark = (light < tres); //сравниваем освещенность с порогом
     Serial.println("light \t tres \t dark \t distance \t needLight");
     Serial.print(light); Serial.print("\t"); 	
     Serial.print (tres);Serial.print("\t");      
     Serial.print(dark);Serial.print("\t");
     
     digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
     delayMicroseconds(10); // равный 10 микросекундам 
     digitalWrite(S_TRIG, LOW); // Отключаем 

 impulseTime=pulseIn(S_ECHO, HIGH); // Замеряем длину импульса 

   //фильтр случайных срабатываний
   if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
 {      
  int oldimpulseTime = impulseTime;
   impulseTime = (oldimpulseTime * (averageFactor - 1) + impulseTime) / averageFactor;  
   // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5
 }
   sensorDistance=impulseTime/58; // Пересчитываем в сантиметры 
   
   Serial.print(sensorDistance); Serial.print("\t "); // Выводим на порт  
bool NeedLight = (sensorDistance<RANGE && dark);
  	
 if (NeedLight == 1)  
 {
   analogWrite (RELAY_PIN, 255); // горит 
   previousMillis1 = millis(); // отсчёт отсрочки начинается сначала...
 }
 // Прошло время выключаем свет
  	if (previousMillis1 && (millis()-previousMillis1 >= interval)) 
 {
   analogWrite (RELAY_PIN, 0); // не горит 
   previousMillis1 = 0;
 }
  Serial.println (NeedLight);
   
   delay (1000);
}

 

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Не понял смысла фильтра.

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

 

П.С. а детектором движения обойтись нельзя? Есть с встроенным фотореле.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

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

 

Пример для чайника?

 

 

а детектором движения обойтись нельзя? Есть с встроенным фотореле

нельзя, ибо железо уже распаяно, надо отладить.

 

И на эту дуину еще функций навешано будет, свет - для разминки-ознакомления.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

С телефлна ничего не напишу.

Смысл — цикл N раз. Внутри чтение, суммирование в общую сумму, пауза если датчик этого требует. По окончании циклов общую сумму делим на N — это будет среднее.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

MedicusAmicus,

 

 

А можно лог срабатывания дальномера? Правильного и ложного.

 

 

 

  impulseTime=pulseIn(S_ECHO, HIGH); // Замеряем длину импульса 
 //Добавить
 Serial.print(impulseTime);

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Link to comment
Share on other sites

Смысл — цикл N раз. Внутри чтение, суммирование в общую сумму, пауза если датчик этого требует. По окончании циклов общую сумму делим на N — это будет среднее.

Зачем вообще среднее, идея с циклом да, но берем например цикл 3 раза и выбираем минимальное значение, дальше с ним и работаем. За 3 цикла объект надеюсь мимо датчика пробежать не успеет ?

Link to comment
Share on other sites

Пэтро,

берем например цикл 3 раза и выбираем минимальное значение

 

181

153 !!!!!

184

180

Итог - ложняк

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Ошибся, не минимальное, а максимальное.

184 !!!

итог - все верно

Если врет в обе стороны от среднего, то мин и макс это ложно


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

Врет в минус.

Попробую цикл на 3 измерения

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Таким образом пойдет?


const int numReadings = 3;    //количество измерений
int impulseTimeArray [numReadings]; 	// данные, считанные с дальномера
int index = 0;                              // индекс для значения, которое считывается в данный момент
int maximum_ImpulseTime = 0;                // максимальное значение из массива

void loop() {
.......
impulseTime=pulseIn(S_ECHO, HIGH); // Замеряем длину импульса 
     // собираем массив из 3 измерений
   impulseTimeArray [index] = impulseTime; 
  	// продвигаемся к следующему значению в массиве:  
   index = index + 1;   
  	// если мы в конце массива...
 if (index >= numReadings)              
  	// ...возвращаемся к началу: 
   index = 0;
  	// ищем в массиве максимум  
for(int i = 0; i < numReadings; i++) maximum_ImpulseTime = max(impulseTimeArray[i], maximum_ImpulseTime);

 

 

АПД: не пойдет.

данные "замораживаются" на последнем значении массива

Edited by MedicusAmicus

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Круто, только зачем массив.

 

 

int oldimpulseTime = 0;
for(int i = 0; i < numReadings; i++)
{
  digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(S_TRIG, LOW); // Отключаем 

  impulseTime=pulseIn(S_ECHO, HIGH);
  if (impulseTime > oldimpulseTime)
  {
      oldimpulseTime = impulseTime;
  }
}
impulseTime = oldimpulseTime;

Link to comment
Share on other sites

Ошибок стало в три раза больше angry.gif

 

#define LDR_PIN A1 //пин фоторезистора
#define RELAY_PIN A0 //пин реле

#define S_TRIG 3 //триггер звука
#define S_ECHO 4 //ловим эхо

const int numReadings = 3;    //количество измерений
 int distance=0; 
 int impulseTime=0;
 int RANGE = 150; //предел дистанции обнаружения
 int tres = 400;  //порог освещенности

unsigned long previousMillis1 = 0;      //храним время последнего Включения света
unsigned long interval = 10000; 		//интервал работы (10 секунд)

void setup() {
 // put your setup code here, to run once:
 pinMode (RELAY_PIN, OUTPUT);
 pinMode (S_TRIG, OUTPUT);

}
 
 
void loop() {
 
  Serial.begin(9600); 
 int light = analogRead(LDR_PIN); //читаем освещенность
   bool dark = (light < tres); //сравниваем освещенность с порогом
     Serial.println("light \t tres \t dark \t distance \t needLight");
     Serial.print(light);   	Serial.print("\t");
     Serial.print(tres);        Serial.print("\t");
     Serial.print(dark);        Serial.print("\t");
	
	int oldimpulseTime = 0;
for(int i = 0; i < numReadings; i++)
{
  digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(S_TRIG, LOW); // Отключаем 

  impulseTime=pulseIn(S_ECHO, HIGH);
  if (impulseTime > oldimpulseTime)
  {
  	oldimpulseTime = impulseTime;
  }
}
 impulseTime = oldimpulseTime;

 distance=impulseTime/58; // Пересчитываем в сантиметры 
	
 Serial.print(distance); // Выводим на порт 
 Serial.print("\t \t ");
bool needLight = (distance<RANGE && dark);
 
 if (needLight == 1) // Если расстояние менее предела 
   {
   analogWrite (RELAY_PIN, 255); // горит 
   previousMillis1 = millis(); // отсчёт отсрочки начинается сначала...
 }
 // Прошло время выключаем свет
  	if (previousMillis1 && (millis()-previousMillis1 >= interval)) 
 {
   analogWrite (RELAY_PIN, 0); // не горит 
   previousMillis1 = 0;
 }
  Serial.println (needLight);
   
   delay (1000);}

 

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Ошибок стало в три раза больше

 

Мне не на чем отлаживать, я пока ардуинку только в теории видел, код как идея был. Так, визуально, не вижу проблемы.

Link to comment
Share on other sites

Так, визуально, не вижу проблемы.

 

Так отож...

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Складываем 4 значения делим на 4. т.е. усредняем по 4м значениям..

 

(181 + 153 + 184 + 180 )/4 = 174.5

 

опрашиваем еще раз

(например)

 

(140 + 143 + 131 + 157 )/4 = 142.75

 

 

 

#define LDR_PIN A1 //пин фоторезистора
#define RELAY_PIN A0 //пин реле

#define S_TRIG 3 //триггер звука
#define S_ECHO 4 //ловим эхо

const int numReadings = 3;    //количество измерений
 int distance=0; 
 int impulseTime=0;
 int RANGE = 150; //предел дистанции обнаружения
 int tres = 400;  //порог освещенности

unsigned long previousMillis1 = 0;      //храним время последнего Включения света
unsigned long interval = 10000;                 //интервал работы (10 секунд)

void setup() {
 // put your setup code here, to run once:
 pinMode (RELAY_PIN, OUTPUT);
 pinMode (S_TRIG, OUTPUT);

}
 
 
void loop() {
 
  Serial.begin(9600); 
 int light = analogRead(LDR_PIN); //читаем освещенность
   bool dark = (light < tres); //сравниваем освещенность с порогом
     Serial.println("light \t tres \t dark \t distance \t needLight");
     Serial.print(light);      Serial.print("\t");
     Serial.print(tres);        Serial.print("\t");
     Serial.print(dark);        Serial.print("\t");
       
int impulseTime = 0; //сбрасываем счетчик
for(int i = 0; i < numReadings; i++)
{
  digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(S_TRIG, LOW); // Отключаем 

///////////////////////////////////////////////////////////////////////////////////////
  impulseTime = impulsetime + pulseIn(S_ECHO, HIGH); // складываем серию импульсов[/b]
///////////////////////////////////////////////////////////////////////////////////////
}
 ///////////////////////////////////////////////////////////////////////
  impulseTime = impulseTime / numReadings; // вычисляем среднее
 //////////////////////////////////////////////////////////////////////

 distance=impulseTime/58; // Пересчитываем в сантиметры 
       
 Serial.print(distance); // Выводим на порт 
 Serial.print("\t \t ");
bool needLight = (distance<RANGE && dark);
 
 if (needLight == 1) // Если расстояние менее предела 
   {
   analogWrite (RELAY_PIN, 255); // горит 
   previousMillis1 = millis(); // отсчёт отсрочки начинается сначала...
 }
 // Прошло время выключаем свет
       if (previousMillis1 && (millis()-previousMillis1 >= interval)) 
 {
   analogWrite (RELAY_PIN, 0); // не горит 
   previousMillis1 = 0;
 }
  Serial.println (needLight);
   
   delay (1000);}

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Link to comment
Share on other sites

Пэтро, спасибо за попытку, но теперь абсолютно все значения неверны. Из предыдущих 180 получилось 130-140-150.

Попробую зайти с другой стороны - 3 вложенных цикла с проверкой distance<RANGE

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

мало циклов — одна ошибка дает большое отклонение. Если датчик позволяет часто опрашивать без критического роста ошибки, то циклов надо 20-30.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

Вы так и не скинули сравнение логов, где нужно сработать и не нужно.

 

Надо больше дебаг информации, я лично не понимаю почему оно может не сработать.

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Link to comment
Share on other sites

Пэтро,

181

153 !!!!!

184

180

Итог - ложняк

 

Такого лога недостаточно? На фоне потока верных данных - единичные провалы.

Пока выкрутился так:

 

 

#define LDR_PIN A1 //пин фоторезистора
#define RELAY_PIN A0 //пин реле

#define S_TRIG 3 //триггер звука
#define S_ECHO 4 //ловим эхо

unsigned int distance=0; 
unsigned int impulseTime=0;
 int RANGE = 150; //предел дистанции обнаружения
 int tres = 400;  //порог освещенности

unsigned long previousMillis1 = 0;      //храним время последнего Включения света
unsigned long interval = 10000; 				//интервал работы (10 секунд)

boolean CLOSE0, CLOSE1, CLOSE2;  

void setup() {
[size=2]  pinMode (RELAY_PIN, OUTPUT);[/size]
 pinMode (S_TRIG, OUTPUT);
}
  
void loop() 
{
 Serial.begin(9600); 
 int light = analogRead(LDR_PIN); //читаем освещенность
   boolean dark = (light < tres); //сравниваем освещенность с порогом
     Serial.println("light \t tres \t dark \t distance  \t CLOSE0  \t CLOSE1 \t CLOSE2  \t needLight");
     Serial.print(light);      Serial.print("\t");
     Serial.print(tres);        Serial.print("\t");
     Serial.print(dark);        Serial.print("\t");
       
  digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(S_TRIG, LOW); // Отключаем 

  impulseTime = pulseIn(S_ECHO, HIGH); 
  distance=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.print(distance);    Serial.print("\t ");
  CLOSE0 = distance<RANGE;
	Serial.print (CLOSE0); Serial.print("\t");
	delay (50);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
 //начинаем проверки
   if (CLOSE0 == 1) //итерация1
       {
       digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
       delayMicroseconds(10); // равный 10 микросекундам 
       digitalWrite(S_TRIG, LOW); // Отключаем 
		CLOSE1 = (pulseIn(S_ECHO, HIGH)/58) <RANGE;
		Serial.print (CLOSE1); Serial.print("\t");
		delay (50);
       }
			if (CLOSE1 == 1)  //итерация2
			{
			digitalWrite(S_TRIG, HIGH);   /* Подаем импульс на вход trig дальномера */
			delayMicroseconds(10); // равный 10 микросекундам 
			digitalWrite(S_TRIG, LOW); // Отключаем 
			CLOSE2 = (pulseIn(S_ECHO, HIGH)/58) <RANGE;
			Serial.print (CLOSE2); Serial.print("\t");
			delay (50);
			}
   boolean CLOSE = (CLOSE0 && CLOSE1 && CLOSE2);
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////        
boolean needLight = (CLOSE && dark);
 
 if (needLight == 1) // Если расстояние менее предела 
   {
   analogWrite (RELAY_PIN, 255); // горит 
   previousMillis1 = millis(); // отсчёт отсрочки начинается сначала...
   }
 // Прошло время выключаем свет
       if (previousMillis1 && (millis()-previousMillis1 >= interval)) 
 {
   analogWrite (RELAY_PIN, 0); // не горит 
   previousMillis1 = 0;
 }
  Serial.println (needLight);
  delay (1000);
}

 

 

Поставил на проверку.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

На фоне потока верных данных - единичные провалы.

я же показал как эти провалы прекрасно усредняются.. Не понятно почему не работает.

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Link to comment
Share on other sites

Я тоже в раздумьях.

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

Усредненная версия снижает чувствительность к тому же.

Или увеличивать количество элементов в усреднении, или снижать порог. И то, и другое нежелательно. Срабатывать должен при пороге 160-170, а общая дистанция 180

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Ну поставьте три датчика расстояния. Решение принимается голосованием — два датчика с правильным значением будут всегда против одного ложного.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

Три датчика - перебор для одного коридора.

У меня их всего 4, на каждую из запланированных зон.

И согласовывать их тоже придется с учетом эха.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

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

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Link to comment
Share on other sites

Ну тогда делать три измерения - если совпали (±%), то считать достоверным.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

Чат

Чат

Please enter your display name

×
×
  • Create New...