Управление через USB

Mihail
Offline
Зарегистрирован: 19.03.2013

Уважаемые специалисты, я новичек в теме Arduino и микроконтроллеров, но вот возможность удаленно управлять некоторыми нагрузками из php скрипта на web сервере привлекла и в порыве я заказал:

1. Arduino UNO Mega 2560

2. 5V 8 Channel Relay Module Board

3. BMP085 Barometric Digital Pressure Sensor Module

4. DHT11 Digital Temperature And Humidity Sensor Moudle

5. I2C RTC DS1307 AT24C32 Real Time Clock Module

Теперь же пока посылка идет терзаюсь мыслями о том, что не смогу програмно осуществить задуманное в скетч. Но я хочу постораться разобраться. Почитав в сети, сформировал некоторый алгоритм (прошу ногами не бить):

-подключаем нужные готовые библиотеки (eeprom, DS1307, DHT11, BMP085, wire и т.п.)

-обьявляем переменные

-устанавливаем режимы используемых пинов (вход, выход)

-устанавливаем состояние выходных портов в зависимости от байта в соответствующей ячейке eeprom

в цикле:

-ожидаем данные из usb(com) и, получив данные от php скрипта, записываем их в переменную

-сравниваем эту переменную с предусмотренными кодами и если находим совпадение, то выполняем действие

действия: -включить определенный пин (при условии что он выключен), -выключить пин (при условии что он включен), -записать состояние всех пинов в ячейки eeprom (при условии что состояние изменилось), -получить иформацию с датчиков.

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

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

Mihail
Offline
Зарегистрирован: 19.03.2013

 "1. Arduino UNO Mega 2560" надо понимать как "Arduino Mega 2560", хотя это впринципе для моей задачи не важно.

maksim
Offline
Зарегистрирован: 12.02.2012

 Arduino UNO и Arduino Mega2560 совершенно две разные платформы, так что у вас за платформа неизвестно. Для вашей задачи и UNO хватит.

Mihail
Offline
Зарегистрирован: 19.03.2013

Я уточнил "Arduino Mega 2560". Понимаю, что хватилобы и UNO но уже заказана Mega. Для них есть принципиальные отличия в коде?

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Нет.

Mihail
Offline
Зарегистрирован: 19.03.2013

Тоесть на помощь тут не расчитывать. Понятненько.

 

Mihail
Offline
Зарегистрирован: 19.03.2013

Не прошу делать за меня, а прошу направить и помочь новичку....

Mihail
Offline
Зарегистрирован: 19.03.2013

Будет ли такое "г" работать?


#include <EEPROM.h> // Подключаем библиотеку работы с памятью 

int pin1=1;
int pin2=2;
int pin3=3;
int pin4=4;
int pin5=5;
int pin6=6;
int pin7=7;
int pin8=8;
int Spin1=0;
int Spin2=0;
int Spin3=0;
int Spin4=0;
int Spin5=0;
int Spin6=0;
int Spin7=0;
int Spin8=0;
int usb=0;

void setup() {
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT); 
     //включаем пины в соответствии с сохраненным в eeprom
  if ((EEPROM.read(1)) == 1)
              {
               digitalWrite(pin1, LOW); 
              }
  else 
  {
  digitalWrite(pin1, HIGH); 
  }  
  if ((EEPROM.read(2)) == 1 )
              {
               digitalWrite(pin2, LOW);
              } 
  else 
  {
  digitalWrite(pin2, HIGH); 
  }  
  if ((EEPROM.read(3))==1)
              {
               digitalWrite(pin3, LOW);
              }
  else digitalWrite(pin3, HIGH);                 
  if ((EEPROM.read(4))==1)
              {
               digitalWrite(pin4, LOW);
              }
  else digitalWrite(pin4, HIGH);             
  if ((EEPROM.read(5))==1)
              {
               digitalWrite(pin5, LOW);
              }  
  else digitalWrite(pin5, HIGH);             
  if ((EEPROM.read(6))==1)
              {
               digitalWrite(pin6, LOW);
              }
  else digitalWrite(pin6, HIGH);             
  if ((EEPROM.read(7))==1)
              {
               digitalWrite(pin7, LOW);
              }
  else digitalWrite(pin7, HIGH);             
  if ((EEPROM.read(8))==1)
              {
               digitalWrite(pin8, LOW);
              }
  else digitalWrite(pin3, HIGH);   
  Serial.begin(9600);
             }
void loop() { 

  //Ждем поступления данных
  if (Serial.available() > 
  0) {
    usb = Serial.read();
     }
//Если данные поступили, сравниваем их 
switch (usb) {
    case 1:
    if (digitalRead(pin1)!=LOW)
    {
      digitalWrite(pin1, LOW);
      break;
    }  
    case 2:
    if (digitalRead(pin2)!=LOW)
    {
      digitalWrite(pin2, LOW);
      break;
    }  
       case 3:
    if (digitalRead(pin3)!=LOW)
    {
      digitalWrite(pin3, LOW);
      break;
    }  
    case 4:
    if (digitalRead(pin4)!=LOW)
    {
      digitalWrite(pin4, LOW);
      break;
    }  
    case 5:
    if (digitalRead(pin5)!=LOW)
    {
      digitalWrite(pin5, LOW);
      break;
    }  
    case 6:
    if (digitalRead(pin6)!=LOW)
    {
      digitalWrite(pin6, LOW);
      break;
    }  
    case 7:
    if (digitalRead(pin7)!=LOW)
    {
      digitalWrite(pin7, LOW);
      break;
    }  
    case 8:
    if (digitalRead(pin8)!=LOW)
    {
      digitalWrite(pin8, LOW);
      break;
    }  
    case 10:
    if (digitalRead(pin1)!=HIGH)
    {
      digitalWrite(pin1, HIGH);
      break;
    }
    case 20:
    if (digitalRead(pin2)!=HIGH)
    {
      digitalWrite(pin2, HIGH);
      break;
    }
    case 30:
    if (digitalRead(pin3)!=HIGH)
    {
      digitalWrite(pin3, HIGH);
      break;
    }
    case 40:
    if (digitalRead(pin4)!=HIGH)
    {
      digitalWrite(pin4, HIGH);
      break;
    }
    case 50:
    if (digitalRead(pin5)!=HIGH)
    {
      digitalWrite(pin5, HIGH);
      break;
    }
    case 60:
    if (digitalRead(pin6)!=HIGH)
    {
      digitalWrite(pin6, HIGH);
      break;
    }
    case 70:
    if (digitalRead(pin7)!=HIGH)
    {
      digitalWrite(pin7, HIGH);
      break;
    }
    case 80:
    if (digitalRead(pin8)!=HIGH)
    {
      digitalWrite(pin8, HIGH);
      break;
    }
  // присваиваем состояние пинов переменным 
if (digitalRead(pin1)==LOW) 
Spin1=1;
if (digitalRead(pin2)==LOW) 
Spin2=1;
if (digitalRead(pin3)==LOW) 
Spin3=1;
if (digitalRead(pin4)==LOW) 
Spin4=1;
if (digitalRead(pin5)==LOW) 
Spin5=1;
if (digitalRead(pin6)==LOW) 
Spin6=1;
if (digitalRead(pin7)==LOW) 
Spin7=1;
if (digitalRead(pin8)==LOW) 
Spin8=1;
//при поступлении команды 777 производим запись в eeprom с проверкой прошлой записи
    case 777:
             if ((EEPROM.read(1))!=Spin1)
              {
               EEPROM.write(1, Spin1);
              }
              if ((EEPROM.read(2))!=Spin2)
              {
               EEPROM.write(2, Spin2);
              }
              if ((EEPROM.read(3))!=Spin3)
              {
               EEPROM.write(3, Spin3);
              }
              if ((EEPROM.read(4))!=Spin4)
              {
               EEPROM.write(4, Spin4);
              }
              if ((EEPROM.read(5))!=Spin5)
              {
               EEPROM.write(5, Spin5);
              }
              if ((EEPROM.read(6))!=Spin6)
              {
               EEPROM.write(6, Spin6);
              }
              if ((EEPROM.read(7))!=Spin7)
              {
               EEPROM.write(7, Spin7);
              }
              if ((EEPROM.read(8))!=Spin8)
              {
               EEPROM.write(8, Spin8);
              }
      break;
    }   
             }

 

tsostik
Offline
Зарегистрирован: 28.02.2013

В таком виде - нет, не будет.

Во-первых - пин 1 используется для работы UARTом (Serial)

Во-вторых - странная конструкция из ифов между метками оператора switch - никогда не выполнится.

В-третьих - вы нигде не возвращаете SpinX будут обратно в 0.


#include <EEPROM.h> // Подключаем библиотеку работы с памятью 

int pins[8]={2, 3, 4, 5, 6, 7, 8, 9};
int Spins[8]={0, 0, 0, 0, 0, 0, 0, 0};
void setup() 
{
    for(int i = 0; i < 8; i++)
    {
        pinMode(pins[i], OUTPUT);
        digitalWrite(pins[i], (EEPROM.read(i+1)==1)? LOW : HIGH);
    }
    Serial.begin(9600);
}

void loop() 
{ 
    int usb;
    //Ждем поступления данных
    if (Serial.available() > 0) 
    {
        usb = Serial.read();
        if(usb <= 8)
        {
            digitalWrite(pins[usb-1], LOW);
            Spins[usb-1] = 1;
        }
        else if(usb <=80)
        {
            digitalWrite(pins[usb/10 - 1], HIGH);
            Spins[usb/10 - 1] = 0;
        } else if (usb = 777) 
        { //при поступлении команды 777 производим запись в eeprom с проверкой прошлой записи
             for(int i = 0; i < 8; i++)
             {
                 if ((EEPROM.read(i+1) != Spins[i]))
                 {
                     EEPROM.write(i+1, Spins[i]);
                 }
             }          
        }
    }
}

Еще неплохо учесть две вещи:

1)Чтение/запись из/в EEPROM - операция достаточно медленная. Кроме того, EEPROM имеет не бесконечный ресурс по количеству записей.

2)Надо аккуратно относиться к тому, что именно отправляется в Serial. В частности если ио стороны источника вы отправите Serial.print(1), то со стороны приемника Serial.read() выдаст не 1, а '1' (то есть 0x31)

Mihail
Offline
Зарегистрирован: 19.03.2013

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

Номера пинов я брал как пример. Теперь понял некоторые свои принципиальные ошибки.

Насчет ресурса eeprom я знаю, поэтому и хочу чтобы запись была только по требованию и при условии, что она действительно нужна (проверяя прошлое состояние ячейки). Вроде как запись может занять от 3.3 до 5 сек. Как лучше это предусмотреть в коде? Вставить delay() ?

Если я отправлю в win из php:

$fp =fopen("com3", "w");
fwrite($fp, chr(1));
fclose($fp);

то я получу 1 используя Serial.read()?

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

tsostik
Offline
Зарегистрирован: 28.02.2013

Mihail пишет:

Вроде как запись может занять от 3.3 до 5 сек. Как лучше это предусмотреть в коде? Вставить delay() ?

Если я отправлю в win из php:

Не знаю, ндо смотреть реализацию в библиотеке EEPROM.h, например происходит ли там ожидание конца записи или нет.

Mihail пишет:

Если я отправлю в win из php:

$fp =fopen("com3", "w");
fwrite($fp, chr(1));
fclose($fp);

то я получу 1 используя Serial.read()?

Теоретически - да. Практически - ответ может дать только эксперимент.

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

Mihail
Offline
Зарегистрирован: 19.03.2013

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

Возникают вопросы об обратной связи. О том как сообщать php скрипту состояние пинов.

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

Mihail
Offline
Зарегистрирован: 19.03.2013

я совсем запутался


#include <EEPROM.h> // Подключаем библиотеку работы с памятью 

int pin2=2;
int pin3=3;
int pin4=4;
int pin5=5;
int pin6=6;
int pin7=7;
int pin8=8;
int pin9=9;
int usb=0;

void setup() {
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT); 
  pinMode(pin9, OUTPUT);
     //включаем пины в соответствии с сохраненным в eeprom
  if ((EEPROM.read(9)) == 9)
              {
               digitalWrite(pin9, LOW); 
              }
  else 
  {
  digitalWrite(pin9, HIGH); 
  }  
  if ((EEPROM.read(2)) == 1 )
              {
               digitalWrite(pin2, LOW);
              } 
  else 
  {
  digitalWrite(pin2, HIGH); 
  }  
  if ((EEPROM.read(3))==1)
              {
               digitalWrite(pin3, LOW);
              }
  else digitalWrite(pin3, HIGH);                 
  if ((EEPROM.read(4))==1)
              {
               digitalWrite(pin4, LOW);
              }
  else digitalWrite(pin4, HIGH);             
  if ((EEPROM.read(5))==1)
              {
               digitalWrite(pin5, LOW);
              }  
  else digitalWrite(pin5, HIGH);             
  if ((EEPROM.read(6))==1)
              {
               digitalWrite(pin6, LOW);
              }
  else digitalWrite(pin6, HIGH);             
  if ((EEPROM.read(7))==1)
              {
               digitalWrite(pin7, LOW);
              }
  else digitalWrite(pin7, HIGH);             
  if ((EEPROM.read(8))==1)
              {
               digitalWrite(pin8, LOW);
              }
  else digitalWrite(pin8, HIGH);   
  Serial.begin(9600);
             }
void loop() { 

  //Ждем поступления данных
  if (Serial.available() > 
  0) {
    usb = Serial.read();
     }
//Если данные поступили, сравниваем их 
switch (usb) {
    case 9:
    {
      digitalWrite(pin9, LOW);
      break;
    }  
    case 2:
    {
      digitalWrite(pin2, LOW);
      break;
    }  
    case 3:
    {
      digitalWrite(pin3, LOW);
      break;
    }  
    case 4:
    {
      digitalWrite(pin4, LOW);
      break;
    }  
    case 5:
    {
      digitalWrite(pin5, LOW);
      break;
    }  
    case 6:
    {
      digitalWrite(pin6, LOW);
      break;
    }  
    case 7:
    {
      digitalWrite(pin7, LOW);
      break;
    }  
    case 8:
    {
      digitalWrite(pin8, LOW);
      break;
    }  
    case 90:
    {
      digitalWrite(pin9, HIGH);
      break;
    }
    case 20:
    {
      digitalWrite(pin2, HIGH);
      break;
    }
    case 30:
    {
      digitalWrite(pin3, HIGH);
      break;
    }
    case 40:
    {
      digitalWrite(pin4, HIGH);
      break;
    }
    case 50:
    {
      digitalWrite(pin5, HIGH);
      break;
    }
    case 60:
    {
      digitalWrite(pin6, HIGH);
      break;
    }
    case 70:
    {
      digitalWrite(pin7, HIGH);
      break;
    }
    case 80:
    {
      digitalWrite(pin8, HIGH);
      break;
    }
//при поступлении команды 777 производим запись в eeprom с проверкой прошлой записи
case 777:
              {
int Spin2=0;
int Spin3=0;
int Spin4=0;
int Spin5=0;
int Spin6=0;
int Spin7=0;
int Spin8=0;
int Spin9=0;
if (digitalRead(pin9)==LOW) 
Spin9=1;
if (digitalRead(pin2)==LOW) 
Spin2=1;
if (digitalRead(pin3)==LOW) 
Spin3=1;
if (digitalRead(pin4)==LOW) 
Spin4=1;
if (digitalRead(pin5)==LOW) 
Spin5=1;
if (digitalRead(pin6)==LOW) 
Spin6=1;
if (digitalRead(pin7)==LOW) 
Spin7=1;
if (digitalRead(pin8)==LOW) 
Spin8=1;
                      if ((EEPROM.read(9))!=Spin9)
	              {
	               EEPROM.write(9, Spin9);
	              }
	              if ((EEPROM.read(2))!=Spin2)
	              {
	               EEPROM.write(2, Spin2);
	              }
	              if ((EEPROM.read(3))!=Spin3)
	              {
	               EEPROM.write(3, Spin3);
	              }
	              if ((EEPROM.read(4))!=Spin4)
	              {
	               EEPROM.write(4, Spin4);
	              }
	              if ((EEPROM.read(5))!=Spin5)
	              {
	               EEPROM.write(5, Spin5);
	              }
	              if ((EEPROM.read(6))!=Spin6)
	              {
	               EEPROM.write(6, Spin6);
	              }
	              if ((EEPROM.read(7))!=Spin7)
	              {
	               EEPROM.write(7, Spin7);
	              }
	              if ((EEPROM.read(8))!=Spin8)
	              {
	               EEPROM.write(8, Spin8);
	              }         
              }
      break;
    }  
   Serial.println(usb); 
             }

что тут неправильно? почему конструкции из ифов в свиче не выполнятся? Как передавать цыфры для управления дуиной??? Передаю через монитор порта цыфру 4 - получаю в ответ ее код 52. Как это все побороть?

step962
Offline
Зарегистрирован: 23.05.2011

Mihail пишет:

Как передавать цыфры для управления дуиной??? 

Обговаривалось на форуме не раз и - не побоюсь этого слова - не десять. Поищите...

Цитата:
Передаю через монитор порта цыфру 4 - получаю в ответ ее код 52. Как это все побороть?

1. Скачать табличку ASCII-символов (например, эту) и выяснить, что 52 в десятичной форме исчисления - это 0x34 в шестнадцатиричной и что в таблице символов на этом месте стоит "4". Вам этот символ ничего не напоминает? И нет никаких идей как, например, отличить "4" от "9" в том же свитче? Тогда - вперед на изучение основ программирования.

2. Прочитать-таки этот факинг мэньюал и выяснить, что кроме

Serial.print(4);

можно писать

Serial.write(4);

 

Mihail
Offline
Зарегистрирован: 19.03.2013

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

2. Serial.write() передает данные как бинарный код через последовательное соединение, но дело разве в этом? Меня интересовало то, как именно правильно предать команду и считать ее. Неужели это не понятно? Я передаю через монитор порта, встроенный в среду обработки arduino, число, но с помощью Serial.read() получаю не его. Как сделать, чтобы я получал именно это число?

	$fp =fopen("com3", "w");
	fwrite($fp, chr(1));
	fclose($fp);

и

usb = Serial.read();

что не так?

 

leshak
Offline
Зарегистрирован: 29.09.2011

Mihail пишет:

1. Я так понял - программисты это каста, причем отличающаяся завидной долей высокомерности.

Есть такое. Куда же без этого, но, в данном случае вы не перепутали высокомерие с раздражением и усталостью?

Mihail пишет:

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

Ну и не называйте. А как бы вы себя вели... вы не знаете.

Вот предположим (кстати не вымышленная ситуация) вы сидите в оффисе, работаете. Звонок в двери, вы отрвываетесь, идете. Открываете двери и... там спрашивают как пройти в соседниюю фирму. Объсняете что "соседний подъед, офис номер...". Ведь подсказал человеку, ведь нет трудно? Чего же не помочь.

Но... только вы сели - опят звонок. После пятого раза (в течении часа) - вешаете объявление. После десятого (звонки продолжаются), когда вас спрашивают "а какой соседний подъезд" (их всего два, 10-ть метров пройти человеку нужно). Вы дописываете "Слева", не помогает, рисуете стрелочку, пишите большими буквами "тут нет ИМЯ ФИРМЫ", дублируете объвление возле звонка, завешиваете звнок объявлением... и каждые пять/десять минут открывая двери видите очередного одаренного. И так день за днем.... (ну вот попались такие соседи, что массово объявления о вакансиях дают).

Уверены что продолжали бы каждому спокойно и вежливо объяснять как пройти к соседям? И где находится лево?

А после того как человек через 5-ть минут вернется и спросит "а там закрыто" (потому что прийти на назначенное время - тоже не всем дано)? 

Теперь вернемся к вашей задаче. Поднимитесь в самый вверх сайта. Справа есть текстовое поле, с логотипом гугла и кнопкой поиск. Вбейте туда, скажем что-то не сложное. Предположим "чте_ние   чис_ла из se_rial" (только подчеркивания уберите, я их добавил, что-бы потом поиск вашу ветку не находил).  И я ни за что не поверю, что на первой же странице поиска не найдется темы с ответом на ваш вопрос. Думаю - не один раз найдется, в разной степени разжеванности. И это только первая страница... а их 10-ть.

А теперь вы ответте на вопросы:

1. Что должен чувствовать человек, когда ему постоянно, месяцами задают один и тот же вопрос (причем на его ответ, суммарно он уже часы/дни потрачены) убил?
2. Как называть человека, которому говорится "тема обсуждалась 10-тки раз" (то есть подсказка, что информация тут есть), а он вместо того что-бы воспользоватся поиском - начинает лечить других?

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

" 4 - получаю в ответ ее код 52".

Знаете код - так и пишите в switch код. Что смогли получить - то и используйте. Хотите цифру, все-таки, ну так вопрос не для исстиных программистов, а для второкласника. Как из 52-двух яблок, получить 4-ре яблока? Ответ: сожрать 48-мь яблок. 52-48=4.

Осталось проверить догадку. Взять да и послать еще пару цифр. 5 - получаем 53 - отнимаем 48-мь - получили 5-ть. Еще на паре цифр проверили.

Ну ладно, не заметили закономерность. Но про ACSII таблицу вам уже сказали. Раз думать не хочется, то можно написать что-то лобовое типа

if(code==48)digit=0;
if(code==49)digit=1;
if(code==50)digit=2;
.....

и потом сделать switch по digit?

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

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

leshak, извини, 48 яблок не осилил, съел только одно, но самое вкусное!

 

leshak
Offline
Зарегистрирован: 29.09.2011

kisoft пишет:

leshak, извини, 48 яблок не осилил, съел только одно, но самое вкусное!

 

Так ведь конвертация выйдет бажная :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Эхх, придется есть :(

Я, кстати, совсем не высокомерный, метр 72 всего.

 

leshak
Offline
Зарегистрирован: 29.09.2011

kisoft пишет:

leshak, извини, 48 яблок не осилил, съел только одно, но самое вкусное!

 

Кстати тут еще и филосовский вопрос напрашивается. А как вы узнали что оно самое вкусное из 48-ми, если съели только одно?
Сдается мне что не яблоками вы занимаете, а лапшу на уши нам повестить хотите :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ваши сомнения - Вам и есть остальные 47 :) Я съел самое самое, по другому не бывает у нас, у программистов :)

Mihail
Offline
Зарегистрирован: 19.03.2013

leshak пишет:

 ....Чего же не помочь.

....И так день за днем....

Ну да, ну да - очень тяжело. Нет слов.

leshak пишет:

Уверены что продолжали бы каждому спокойно и вежливо объяснять как пройти к соседям? И где находится лево?

Вы знаете, да - я бы продолжил. Особенно если бы видел, что моя помощь действительно нужна. И еще, знаете, легче найти отмазку, чем честно сказать "пошел ты!". Меня, вообще удивляет, что человек настолько занятой, чтобы ответить на вопрос, посвящает столько времени оправданию себя. Значит было в моих словах то, что признавать то самому не хочется.

leshak пишет:

Теперь вернемся к вашей задаче. Поднимитесь в самый вверх сайта. Справа есть текстовое поле, с логотипом гугла и кнопкой поиск. Вбейте туда, скажем что-то не сложное. Предположим "чте_ние   чис_ла из se_rial" (только подчеркивания уберите, я их добавил, что-бы потом поиск вашу ветку не находил).  И я ни за что не поверю, что на первой же странице поиска не найдется темы с ответом на ваш вопрос. Думаю - не один раз найдется, в разной степени разжеванности. И это только первая страница... а их 10-ть.

Вы меня умиляете. Уж кто кто, а я то знаю,- что есть "пользовательский поиск google" и о том почему он там находится и, вообще, о корявости сдешнего движка, деликатно умолчу. А еще есть поиск не пользовательский, а поиск без параметров и указания доменов и гугл не лукавит, кагда выдает по теме arduino какие угодно форумы, кроме этого. Наверное от того, что тут все посылают в поиск, вместо ответов.

leshak пишет:

1. Что должен чувствовать человек, когда ему постоянно, месяцами задают один и тот же вопрос (причем на его ответ, суммарно он уже часы/дни потрачены) убил?

Вы повторяетесь, все уже и так поняли, что Вы чувствуете.

leshak пишет:

2. Как называть человека, которому говорится "тема обсуждалась 10-тки раз" (то есть подсказка, что информация тут есть), а он вместо того что-бы воспользоватся поиском - начинает лечить других?

Я бы, честно говоря, легче придумал название человеку, который засоряет форумы сообщениями о своей значимости, величии и тяжести отвечать на вопросы, вместо постов по теме. Я Вам по секрету объясню, чем отличается форум от простой информационно-справочной страницы - тем, что на форуме люди задают вопросы и отвечают на них ТОЛЬКО те, кто может и хочет ответить по существу вопроса.

Человек, который спрашивает тут или где-либо еще, одним своим существованием ставит + к популярности ресурса и этому человеку стоит сказать спасибо только за это.

Поверьте, всегда есть и будут темы, в которых Вы некомпетентны, а в которых более компетентен я или кто-то другой. Ведите себя так, как хотите, чтобы вели с Вами (и на форуме и в жизни) и ничего больше не требуется от Вас.

leshak пишет:

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

Здравый смысл банален не для всех. Это видно на Вашем примере.

leshak пишет:

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

Да! Есть поисковые системы! Но только для чего тогда этот форум непонятно...

leshak
Offline
Зарегистрирован: 29.09.2011

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

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

По поводу "постов по теме" - их десятки. Лично я не раз писал. Не далее как несколько дней назад. Зачем форум - ну что-бы отвечать на непонятные вопросы. Что-бы помочь если "у кого-то затык", а не работать копи-пастером и поисковым движком для тех кому лень три слова вбить.  Раз человек знает что такое "пользовательский поиск", но при этом тупо его игнорит - значит ему лень. 
А много рассуждение про "значимость", наводит на мысль что с ЧСВ - у вас все хорошо. Ждете пока кто-то, вместо вас, пойдет, вобъет в поиск и даст вам нужные ссылки (или как обезъянка, будет набирать ответ заново), потому что "барин все знает, но он желает получить ответ в максимально удобном для себя виде".

> Но только для чего тогда этот форум непонятно...

Зачем форум? Ну затем, что-бы в том числе и накапливать знания. Что-бы ответом одному человеку - могли 10-ть воспользоватся.

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

Перевод принятого символа с com-порта в число | Аппаратная платформа Arduino
Переменные через Serial | Аппаратная платформа Arduino
Управление сервоприводом по Serial | Аппаратная платформа Arduino
Управление PWM с ПК | Аппаратная платформа Arduino

И еще, и еще, и еще...

А почему этих тем под сотню, а не одна куда новичок может пойти и просто прочитать? А потому что куча таких как вы, который считают своим долгом завести отдельную тему. ПЕРСОНАЛЬНО ДЛЯ СЕБЯ. И требовать, что-бы им ответили персонально тут. Вместо того что-бы найти существующую. Почитать там и если не понятно - там же и спросить.
Так прежде чем кидатся "засоряет" - подумайте кто из нас двоих засоряет?

Вот почему я могу это сделать, а вы нет? Ну ладно... сразу не сообразил. Так ведь подсказали  же - спокойно находится через поиск.  Потрать пару минут и узнай ответ на свой вопрос. Даже фразу для поиска уже дал. Но нет. Нужно повыкобениватся. 
Или вы думаете что там людям отвечали какую-то лажу, а тут вам расскажут какой-то новый даоский секрет чтения чисел?

>Ведите себя так, как хотите, чтобы вели с Вами (и на форуме и в жизни) и ничего больше не требуется от Вас.

Да. Именно так я и делаю. И если я вам советую пользоватся поиском, то именно потому что сам так и поступаю. А еще - читаю документацию. Хотя-бы бегло ознакомится. Когда начинал - взял и прочел все что было на Программирование . Благо это всего лишь пара часов заняло. Понял не все, но по крайней мере хоть общую картину имел. А за деталями - уже когда требовалось разбирался.

>Вы знаете, да - я бы продолжил. Особенно если бы видел, что моя помощь действительно нужна
Ну вот и посмотрим. Не вы последним задали этот вопрос. В той или иной ипостаси - он вылазит, в среднем раз в неделю. Иногда волнами три-пять раз в день. Иногда затишье.

Увидим на сколько вас хватит.

Есть еще парочка вопросов подобных: как мигать без delay() (и пофик что в документации пример есть и не раз "на пальцах" на форуме имеется), "ардуина не видится", "сдвиговый регистр", "arduinoISP" и разные реинкарнации "я вот что-то делаю, не скажу что, но что-то у меня ошибки, не скажу какие".  Так что проявить свое человеколюбие - у вас будет много возможностей.

 

dtvims
Offline
Зарегистрирован: 26.11.2012

Класс +100500 :)

Mihail пишет:
1. Я так понял - программисты это каста, причем отличающаяся завидной долей высокомерности

Не соглашусь с данным утверждением. Программисты - Это в первую очередь (в большинстве случаев) математики, которые, решив одну задачу, решают другую сводя ее к первой, что и доказывают ответы: "Поищи в поиске - задача решалась ранее".

Цитата:
- Для них есть принципиальные отличия в коде?

- Нет

Тоесть на помощь тут не расчитывать. Понятненько.

Вопрос, затем ответ - на что обида?

В топике как такого вопроса нет.

" я новичек в теме Arduino и микроконтроллеров" - в программировании видимо тоже новичек, судя по дальнейшим вопросам. Так с этого и надо начинать: Хочу научится, еще ничего не знаю, посоветуйте хорошие книжки/статьи для обучения, потом задам вопросы! http://robocraft.ru/page/summary/ - рекомендую! А еще книжечку http://cpp.com.ru/kr_cbook/index.html. После прочтения перечисленных документов обычно снимается бОльшая часть вопросов.

Хотите получить хороший ответ? Сформулируйте правильно вопрос! В хорошо сформулированном вопросе содержится 80% ответа.

Mihail пишет:
Я в своей жизни помогал людям очень часто (всем, чем мог) и  если бы вел себя так как вы, то человеком себя назвать врядле мог.

А мне вот стыдно отвлекать людей от работы по пустякам, причем даже если для меня это не пустяк, а отвечать на мои вопросы - это их служебная обязанность!

P.s. leshak, про яблоки понравилось :)

Mihail
Offline
Зарегистрирован: 19.03.2013

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

Serial.parseInt()

то я просто сказал бы спасибо а так "Обидели такого хорошего человека" и больше ничего.

Спасибо Вам.

leshak
Offline
Зарегистрирован: 29.09.2011

Цитата:
Бедняк пришел к богатому человеку и попросил у него еды, на что тот дал ему удочку. Бедняк возмутился: «Зачем мне удочка, мне нужна еда?». Тогда богач ответил: «если я дам тебе еды, то ты умрешь от голода, а если научу рыбачить, то ты всегда будешь сыт».

P.S. Вот же ведь упорный, ну никак не хочет признать что делал "что-то не так" (не нам признать, а себе). Ваше бы упорство - да в мироное русло. ;)

maksim
Offline
Зарегистрирован: 12.02.2012

Не читал выше.

Если добавите в setup() строку Serial.setTimeout(10); то функция Serial.parseInt() будет возвращать число не через секунду, а через 10 миллисекунд - то есть мгновенно.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

http://cxem.net/arduino/arduino63.php 

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

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

 







char incomingByte;  // входящие данные. arduino.ru/Reference/Char
int  LED = 13;      // LED подключен к 12 пину
 
void setup() {
  Serial.begin(9600); // инициализация порта
  pinMode(LED, OUTPUT);
  Serial.println("Press h to LED ON or l to LED OFF...");
}
 
void loop() {
  if (Serial.available() > 0) {  //если пришли данные
    incomingByte = Serial.read(); // считываем байт
    if(incomingByte == 'l') {
       digitalWrite(LED, LOW);  // если l, то выключаем LED
       Serial.println("LED OFF. Press h to LED ON!");  // и выводим обратно сообщение
    }
    if(incomingByte == 'h') {
       digitalWrite(LED, HIGH); // если h, то включаем LED
       Serial.println("LED ON. Press l to LED OFF!");
    }
  }
}

Говорим дуине "h" светодиод загорается, отправляю "l" тухнет.