Аналоговый пин

Komandir
Offline
Зарегистрирован: 18.08.2018

SoftwareSerial SIM800(5, 6);

На шестом пине аналоговый вход компаратора - больше вроде никакой связи с аналоговой частью нет.

Попробуйте на других пинах.

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

Гадание на кофейной гуще?)

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

vlad257 пишет:

Просто не до конца понимаю суть просьбы.
В последнем коде который вы мне скидывали. Там только стандартные. Которые у всех одинаковые.

Да, виноват, это я "с прямым углом перепутал". Сейчас подготовлю тест.

Komandir
Offline
Зарегистрирован: 18.08.2018

Green такого модуля у меня нет - остается гадать

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

vlad257,

выполните вот этот код два раза. Первый раз точно как есть, а второй раз, заменив true в строке №4 на false (никаких других изменений)! Выложите мне оба результата, только, пожалуйста, не в сообщение, а как код выкладываете - мне так удобнее копировать.

#include <OneWire.h>
#include <SoftwareSerial.h>

#define	USE_ADC	true

#define printVar(x) do { Serial << #x "=" << x << "\r\n"; } while (false)
template <typename T> inline Print & operator << (Print &s, T n) { s.print(n); return s; }

SoftwareSerial SIM800(5, 6);

String _response = "";

void waitResponse() {
	Serial.println("Entering waitResponse");
	//
	// Уже писал, но напоминаю ещё раз так оставлять нельзя, 
	// хотя на текущую проблему это не влияет
	uint32_t _timeout = millis() + 10000;
	while (!SIM800.available() && millis() < _timeout);
	if (SIM800.available()) printVar(SIM800.readString());
	else Serial.println("Timeout in waitResponse");
}

void sendATCommand(String cmd) {
	Serial << "sendATCommand called with: \"" << cmd << "\"\r\n";
	SIM800.println(cmd);
	waitResponse();
}

void sendSMS(String phone, String message) {
	SIM800.begin(9600);
	sendATCommand("AT");
	sendATCommand("AT+CMGF=1;&W");
	sendATCommand("AT+CMGS=\"" + phone + "\"");
	sendATCommand(message + "\r\n\032");
	SIM800.end();
}


void setup(void) {
	Serial.begin (9600);
	Serial.println("===== Started ====");
	printVar(USE_ADC);

	Serial.println("++++++++++++++++++++++");
	sendSMS("+380973545446", "First SMS");
	delay(1000);

#if	USE_ADC
	int BV = 321;
	BV = analogRead(0);
	printVar(BV);
#endif

	Serial.println("++++++++++++++++++++++");
	sendSMS("+380973545446", "Second SMS");
	delay(1000);
}

void loop(void) {}

 

vlad257
Offline
Зарегистрирован: 31.05.2020


Возможно слишком поздно. 
Были проблемы со светом. 
Запустил ваш код. Про правде на 11 на 12 пине. Но это не имеет значения. 
В 1 случае (true).Смс опять не сработало. 
ВО 2 - всё нормально. Пришло. 
Спасибо за помощь.

-----------------1-true--------------------

===== Started ====
 USE_ADC=1 
++++++++++++++++++++++ 
sendATCommand called with: "AT"
 Entering waitResponse
 Timeout in waitResponse
 sendATCommand called with: "AT+CMGF=1;&W" 
Entering waitResponse 
Timeout in waitResponse 
sendATCommand called with: "AT+CMGS="+380973545446""
 Entering waitResponse 
Timeout in waitResponse 
sendATCommand called with: "First SMS " 
Entering waitResponse 
Timeout in waitResponse
 BV=4 
++++++++++++++++++++++ 
sendATCommand called with: "AT" 
Entering waitResponse 
Timeout in waitResponse
 sendATCommand called with: "AT+CMGF=1;&W" 
Entering waitResponse 
Timeout in waitResponse 
sendATCommand called with: "AT+CMGS="+380973545446"" 
Entering waitResponse 
Timeout in waitResponse 
sendATCommand called with: "Second SMS " 
Entering waitResponse
-----------------2-false--------------------
===== Started ====
USE_ADC=0
++++++++++++++++++++++
sendATCommand called with: "AT"
Entering waitResponse
SIM800.readString()=AT

OK

sendATCommand called with: "AT+CMGF=1;&W"
Entering waitResponse
SIM800.readString()=AT+CMGF=1;&W

OK

sendATCommand called with: "AT+CMGS="+380973545446""
Entering waitResponse
SIM800.readString()=AT+CMGS="+380973545446"

> 
sendATCommand called with: "First SMS
"
Entering waitResponse
SIM800.readString()=First SMS
> 
> 

 

Не могу почему-то отключить формат кода сначало.

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

Что и именно "на 11 на 12 пине".?

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

Вобщем, с клиента надо схему брать. А то опять дебилами напыщенными окажемся.

vlad257
Offline
Зарегистрирован: 31.05.2020

Не уточнил.
GSM модуль на 11 12 пин переложил.
Кто-то посоветовал попробовать на других пинах.

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

Так уже.
Сейчас еще Женя его пошлет за " это не имеет значения" - и комплект будет полным

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

vlad257 пишет:

Не уточнил.
GSM модуль на 11 12 пин переложил.
Кто-то посоветовал попробовать на других пинах.


вы, простите, идиот. Вы не в состоянии понять, что тут имеет значение, а что нет - так делайте строго то, что вам говорят
Менять пины надо было раньше, в своем скетче, а не в коде, который Евгений вам отредактировал специально для теста

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Крутой глюк! Только прочел, самому интересно стало. Возможно я пропустил две вещи:

1. А какая Ардуинка?

2. Самая главная проверка в любом тестировании: - на другой плате пробовал? ;))

------------

Прошу серьёзно отнестись ко второму вопросу. Могут быть непредсказуемые физические поломки.

Внимательно слежу за экспериментами Жени.

vlad257
Offline
Зарегистрирован: 31.05.2020

Да я уже попробовал на тех которые были раньше. Тот самый результат, который скинул. 
Кстати, проблема проблемой. Она есть.
Я задумался над покупкой цифровой клавиатуры. Но там нужно большое количество цифровых пинов.
Есть вопрос. Возможно кто-нибудь подкажет.
Допустим есть клавиатура 3х4.
Что если подключить 3 столбца. И все 4 строки к 1 пину.
Возможно ли зделать перебор по строках через 1 пин? 
Что имею ввиду.
Допустим. Нажымаеться кнопка 5. Програма понимает что ето 2 столбик. поскольку подключено к столбикам 3 пина.
А потом идет перебор по строкам. через 1 пин.
Ну это просто мысль на дурака. И я даже не пробовал. Просто идея в голову пришла. Посколько 7 пинов я не могу выделять на клавиатуру.
 

vlad257
Offline
Зарегистрирован: 31.05.2020

Уно. Пробовал на другой Уно). тоже самое.
Нано или Мега у друзей нету. Покупать тоже не очень хочу.

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

Возьмите i2c expander и получите от 8 до 16 пинов дополнительно

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

vlad257,

значение имеет абсолютно ВСЁ. Происходит какая-то дичь, которой не может быть, потому. что её не может быть никогда. Мы понятия не имеем что именно происходит, а, значит, мы понятия не имеем что имеет значение, а что - нет.

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

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

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

Так, у меня для Вас новость (пока не понял хорошая она или не очень). Я перерыл свой СВХ и нашёл таки не до конца протухшую симку (до полного протухания (потери номера) осталось два дня). Сделал доплату и симка ожила. Сейчас мне надо идти траву стричь, но вечером я запущу Ваш код на своём SIM800. Если у меня тоже будет такая же проблема - это отличная новость для Вас, т.к. я смогу с нею разобраться в десятки раз быстрее, чем через общение здесь, когда на каждый тестовый запуск уходят часы.

Пока же, чтобы уточнить, что у нас всё одинаково, сделайте: 

  1. если у Вас IDE не 1.8.12, то поставьте, а если у Вас есть веские причины не ставить, а сохранить свою, скажите какая у Вас - я поставлю себе.
  2. скажите, какой именно у Вас SIM800? (вот здесь есть картинки - у Вас который из них?)
  3. ну и выполните следующий тест, пока я там покосом занимаюсь, он даст нам больше информации.

Теперь давайте разбираться с результатом, что Вы привели. Заметьте, самая первая sms-ка ("First SMS") отправлялась ДО того, как мы вызвали analogRead! Тем не менее, она тоже не отправилась. Значит, жопа появляется не в результате работы analogRead, а просто от её присутствия.

Давайте в этом окончательно убедимся. Для этого сделаем код в котором точно есть analogRead (не позволим оптимизатору его выкинуть), но при этом он точно не исполняется. Код вот такой:

#include <OneWire.h>
#include <SoftwareSerial.h>

#define	USE_ADC	true

#define printVar(x) do { Serial << #x "=" << x << "\r\n"; } while (false)
template <typename T> inline Print & operator << (Print &s, T n) { s.print(n); return s; }

SoftwareSerial SIM800(5, 6);

String _response = "";

void waitResponse() {
	Serial.println("Entering waitResponse");
	//
	// Уже писал, но напоминаю ещё раз так оставлять нельзя, 
	// хотя на текущую проблему это не влияет
	uint32_t _timeout = millis() + 10000;
	while (!SIM800.available() && millis() < _timeout);
	if (SIM800.available()) printVar(SIM800.readString());
	else Serial.println("Timeout in waitResponse");
}

void sendATCommand(String cmd) {
	Serial << "sendATCommand called with: \"" << cmd << "\"\r\n";
	SIM800.println(cmd);
	waitResponse();
}

void sendSMS(String phone, String message) {
	Serial << "Sending: " << message << "\r\n";
	SIM800.begin(9600);
	sendATCommand("AT");
	sendATCommand("AT+CMGF=1;&W");
	sendATCommand("AT+CMGS=\"" + phone + "\"");
	sendATCommand(message + "\r\n\032");
	SIM800.end();
}


void setup(void) {
	Serial.begin (9600);
	Serial.println("===== Started ====");
	printVar(USE_ADC);

	Serial.println("++++++++++++++++++++++");
	sendSMS("+380973545446", "The SMS");
	delay(1000);

#if	USE_ADC
	// следующее условие не верно никогда, но компилятор 
	//	про это не знает, потому не выбросит его.
	if (digitalRead(0) > 100) {
		int BV = 321;
		BV = analogRead(0);
		printVar(BV);
	}
#endif
}

void loop(void) {}

запустите его также с true, и c false.

Если проблема будет такой же, это уже позволит сделать вывод, что виноват не сам analogRead, а что-то другое в его объектном файле. Но, давайте не спешить с выводами, выполните и выложите результат.

gfx125
Offline
Зарегистрирован: 27.05.2017

wdrakula пишет:

Крутой глюк! Только прочел, самому интересно стало.

Тоже стало интересно. Залил код из #55 - СМС-ки пришли и с true, и с false

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Женя, позволишь пару мыслей высказать, не претендуя на решение?

1. Раз ТС пробовал на разных платах, а такого эффекта быть не может, то проблема не в коде. Можно, конечно, проверить код, заменив analogRead() на прямое обращение.

2. Раз не в коде, нужна схема. У меня есть контрабандный ХШ, он показывает возможные ошибки во включении аналоговой клавиатуры и/или в питании SIM800.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gfx125 пишет:

wdrakula пишет:

Крутой глюк! Только прочел, самому интересно стало.

Тоже стало интересно. Залил код из #55 - СМС-ки пришли и с true, и с false

воо-от! См. выше.

У меня уже есть идея, но я подожду публикации схемы. ;)))

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

Ну, собственно я что-то подобное и подозревал, но слона нужно по частям есть. Холмс что говорил? "Когда Вы исключите всё невозможное, оставшееся будет истиной"). Вот, похоже, исключили собственно сам analogRead (дождёмся ещё реакции ТС на последний тест, чтобы совсем исключить). Потом найдём чем его заменить (чтобы проблема осталась) Так дойдём и до понимания что же там в схеме может так влиять.

Но идея запросить у ТС схему и фото сборки - здоровая. Я всегда за (особенно после деятеля, который на тиньке analogRead'ом c пина Reset читал, а мудаками мы оказались - помните такого).

vlad257,

давайте, как правда, схему (ту на которой Вы мои примеры запускаете) и фото сборки.

-----

Пошёл паять тестбенч для своего модуля. Не люблю, когда сопли висят.

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

gfx125 пишет:

Тоже стало интересно. Залил код из #55 - СМС-ки пришли и с true, и с false

Хреново. Тем более нужно понять, что может вызвать такое поведение, как у ТС, чтобы знать чего избегать :-)

vlad257
Offline
Зарегистрирован: 31.05.2020

Как фото добавлять?
Только через сервер?

gfx125
Offline
Зарегистрирован: 27.05.2017

vlad257 пишет:
Как фото добавлять?

http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume

vlad257
Offline
Зарегистрирован: 31.05.2020

Версия IDE 1.8.12
Модуль SIM800L
Как-то сложно фотки кидать сюда.
Ну схему пострался отобразить максимально.
Там где клавиатура написано, думаю и так понятно, поставил бы цифровую - вы б меня не поняли.
В крайнем случае на моем фото есть.

 
 

vlad257
Offline
Зарегистрирован: 31.05.2020

В прошлом коде, ничего не менял.
Сначало зделал на 11 12 пинах, а потом на 5 и 6.GSM. Результат одинаковый.
Относительно последнего кода.
Вот результат. Всё работает, смс пришла.

 

===== Started ====
USE_ADC=1
++++++++++++++++++++++
Sending: The SMS
sendATCommand called with: "AT"
Entering waitResponse
SIM800.readString()=AT
> 
sendATCommand called with: "AT+CMGF=1;&W"
Entering waitResponse
SIM800.readString()=AT+CMGF=1;&W
> 
sendATCommand called with: "AT+CMGS="+380973545446""
Entering waitResponse
SIM800.readString()=AT+CMGS="+380973545446"
> 
sendATCommand called with: "The SMS
"
Entering waitResponse
SIM800.readString()=The SMS
> 
> 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

И шо. правда питается от кроны? Где минимум 2А, положенные SIM800L в пике? Что-то чуется мне, что сочетание "макетные провода + херовое питание" и не к таким чудесам ещё приведут.

Выкидывай всё с макетки, и, как минимум, навесным монтажем распаяй - поверь на слово, у макеток болезнь - очень херовые контакты, что в сочетании в макетными говнопроводами - тот ещё цирк с конями.

Вот как пропаяешь всё, дашь хорошее питание SIM800 - приходи ;) На 99% вероятности все твои беды - от ужаса, показанного на фото.

vlad257
Offline
Зарегистрирован: 31.05.2020

Возможно и схема не без грехов.
Когда подключал, были проблемы с общей землей. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

На макете норм, я запускал, но не от кроны!!!

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

Блин. Не понимаю я людей, которые порются с непонятными проблемами имея непонятные контакты в схеме!

vlad257
Offline
Зарегистрирован: 31.05.2020

От кроны питает норм, почти неделю на 1 кроне сижу и норм.
2А это максимально, там потребление 2А - милисекунды.
Проблем не возникало с питанием. GSM работает. Клавиатура на прямую подключена. Зачем паять навесным, пока оно не работает, когда зделаю систему буду паять, а пока так удобнее.

vlad257
Offline
Зарегистрирован: 31.05.2020

Green пишет:

Блин. Не понимаю я людей, которые порются с непонятными проблемами имея непонятные контакты в схеме!


Можно конкретнее.
Не витянул лампочки, mp3модуль и датчик температуры, но они не мешают же.

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

Крона - это порнография, честное слово. Ну возьмите вы нормальный источник питания, а потом уже играйтесь с кронами и т.п.

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

по схеме непонятно, от чего питается ардуина. Видно. что крона включена на sIM800, а на ардуину провода не идут

vlad257
Offline
Зарегистрирован: 31.05.2020

Ардуино пока от компьютера.
Крону позже поменяю на питание для старого ноутбука. Но пока нет возможности забрать. Питание в деревне.
Но пока крона справляется, для отладки системы.
 

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

vlad257 пишет:

Допустим есть клавиатура 3х4.
Что если подключить 3 столбца. И все 4 строки к 1 пину.
Возможно ли зделать перебор по строках через 1 пин? 
Что имею ввиду.
Допустим. Нажымаеться кнопка 5. Програма понимает что ето 2 столбик. поскольку подключено к столбикам 3 пина.
А потом идет перебор по строкам. через 1 пин.
Ну это просто мысль на дурака. И я даже не пробовал. Просто идея в голову пришла. Посколько 7 пинов я не могу выделять на клавиатуру.

вот как раз для перебора по столбцам и по строкам требуется 7 пинов. А без перебора для 12 кнопок нужно все 12 пинов

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

vlad257 пишет:

Ардуино пока от компьютера.
Крону позже поменяю на питание для старого ноутбука. Но пока нет возможности забрать. Питание в деревне.
Но пока крона справляется, для отладки системы.
 

что мешает запитать SIM тоже от компьютера?

vlad257
Offline
Зарегистрирован: 31.05.2020

как подскажите

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

Пришла? А чего ж в прошлый раз не приходила. Предыдущий скетч по-прежнему не работает. Ну-ка запустите. Может "провода потрогали" ...

Так если не работает, то попробуйте удалить из подключения ВСЁ. Оставьте только ардуину и sim800. Пробуйте тот скетч, который сейчас точно не работает и смотрите, не заработает ли он, если ВСЁ выкинуть.

Если заработает, то подключайте выброшенные девайсы по одному и обязательно проверяйте скетч после подключения. Как только поймаете, что "пропала работоспособность", попробуйте удалить ВСЕ девайсы, кроме последнего-подключенного. В идеале Вы должны иметь возможность сказать: голая ардуина работает, а вот если я подключил один вот такой девайс, то уже нет. Это сильно сузит нам пространство поиска проблемы.

Я задавал вопрос про IDE, ответа не вижу.

vlad257
Offline
Зарегистрирован: 31.05.2020

писал вместе с фото.
1.8.12

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

vlad257 пишет:

как подскажите

а что за модуль у вас сейчас между кроной и СИМ800 ? - регулятор напряжения? можете скинуть ссылку?

vlad257
Offline
Зарегистрирован: 31.05.2020

b707 пишет:

а что за модуль у вас сейчас между кроной и СИМ800 ? - регулятор напряжения? можете скинуть ссылку?

Вроде как MP1584

vlad257
Offline
Зарегистрирован: 31.05.2020

Евгений, я как вы знаете не профи.
Но думаю ваш прошлый код работает потому, что.
-он в сетап 
-сначало идет смс потом аналог рид
-аналог рид под if

у меня тоже смс шли даже в loop допустим в ситуации

sendSMS(....);
do{

A=analogRead(0);

}

while(....);

такой код работал у меня

Но если снять do while и запустить в луп
сначало смс а потом аналог рид, то смс отправиться только раз. потом програма пройдет через аналогрид, и уже второе смс не пойдет.
Сейчас попробую показать на вашем коде.
Возможно я не прав.

vlad257
Offline
Зарегистрирован: 31.05.2020

Как я и говорил.
Навожу пример.
Ничего не менял. Кроме.
 

#if USE_ADC
  // следующее условие не верно никогда, но компилятор 
  //  про это не знает, потому не выбросит его.
  if (digitalRead(0) > 100) {
    int BV = 321;
    BV = analogRead(0);
    printVar(BV);
  }
#endif

sendSMS("+380973545446", "The SMS");
  delay(1000);
}

Остальной код такой же.
Я поменял местами. sms и аналог рид.
Но он все же работает и смс пришла.

Потом я зделал так.

void setup(void) {
  Serial.begin (9600);
  Serial.println("===== Started ====");
  printVar(USE_ADC);

  Serial.println("++++++++++++++++++++++");
  

#if USE_ADC
  // следующее условие не верно никогда, но компилятор 
  //  про это не знает, потому не выбросит его.
   int A = analogRead(0);
  if (A > 100) {
    int BV = 321;
    BV = analogRead(1);
    printVar(BV);
  }
#endif

sendSMS("+380973545446", "The SMS");
  delay(1000);
}

 

Смс не пришла. Я всего лишь заставил прочитать значение с аналогового порта. Ну вы понимаете. Вот тому потверждение.
 

===== Started ====
USE_ADC=1
++++++++++++++++++++++
Sending: The SMS
sendATCommand called with: "AT"
Entering waitResponse
Timeout in waitResponse
sendATCommand called with: "AT+CMGF=1;&W"
Entering waitResponse
Timeout in waitResponse
sendATCommand called with: "AT+CMGS="+380973545446""
Entering waitResponse

 

 

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

vlad257 пишет:

Но думаю ваш прошлый код работает потому, что.
-он в сетап 
-сначало идет смс потом аналог рид
-аналог рид под if

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

Всё это верно и для кода из #55, но, тем не менее, там не отправлялась даже первая смс (которая до analogRead)/ Так ведь?

Вот это меня и напрягло.

vlad257 пишет:

Смс не пришла. Я всего лишь заставил прочитать значение с аналогового порта. 

Вернулись в начало :-(

Ладно, убирайте клавиатуру и что там у Вас ещё есть, как я писал вчера вечером и расскажете что получилось.