Linux и плата arduino ( связь arduino и компьютера )

Linux и arduino — заметки на полях

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

Сразу скажу что всякими там библиотеками firmata и прочей дребеденью мы с вами пользоваться не будем, ввиду избыточности всего этого безобразия, вот вам простейший код
принимающий команды с компа, моргающий светодиодом и отправляющий сообщения обратно о выполненной операции. Этот код для ардуины, написан Vga, за что ему моя искренняя благодарность:

void setup() 
{
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); 
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  Serial.print('\n');
}
void loop() {
  if (Serial.available() > 0)
  {
    switch((char)Serial.read())
    {
      case '1':
        digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
        Serial.print("OK - 1\n");
        break;
      case '0':
        digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
        Serial.print("OK - 0\n");
    }
  }
  delay(20);                       // wait
}

Все это вставляем в Arduino IDE, компилируем и заливаем в вашу плату.
Открываем встроенный монитор, посылаем в плату 1 для включения светодиода и 0 для его выключения. Там же читаем ответы ардуины на все эти действия.
Небольшое лирическое отступление, поморгать светодиодом можно из программы CuteCome открыв в ней соответствующий порт ( естественно скомпилированный код должен быть уже залит в вашу железяку )
Итак будем считать что на стороне ардуины все нормально.

Для начала напишем программку на чистом си:
Код программы скопипастен из разных мест с небольшими добавками моего криворукого творчества. Смотрим ниже:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
int main(void)
 {
   int fd; /* Файловый дескриптор для порта */
   char buf[7];/*размер зависит от размера строки принимаемых данных*/
   char bw[1];
   char iIn;

   fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); /*'open_port()' - Открывает последовательный порт */
      if (fd == -1)
        {
          /*
           * Возвращает файловый дескриптор при успехе или -1 при ошибке.
           */
           printf("error port\n");
           printf("open_port: Unable to open /dev/ttyUSBn - ");
        }
     else
        {
            struct termios options; /*структура для установки порта*/
            tcgetattr(fd, &options); /*читает пораметры порта*/

            options.c_cflag |= (CLOCAL | CREAD);    // Ignore modem controls
            options.c_cflag &= ~CSIZE;
            options.c_cflag |= CS8;     // 8 bit chars
            options.c_cflag &= ~(PARENB | PARODD);  // shut off parody
            options.c_cflag &= ~CSTOPB; //no scts stop
            options.c_iflag &= ~IGNBRK; //disable break processing
            options.c_iflag = 0;        // no echo
            options.c_iflag &= ~(IXON | IXOFF | IXANY); // no software flow control
            options.c_oflag = 0;        // no remapping
            options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG |IEXTEN);
            options.c_cc[VMIN] = 0;     // read doesn't block
            options.c_cc[VTIME] = 5;    // 0.5s read timeout
            tcsetattr(fd,TCSANOW,&options);
            printf("1-включ, 0-выкл, 3-выход : \n");
            sleep(1);
            while(bw[0] != '3' )
               {
                  scanf("%s", bw);
                  if (bw[0]!='0' && bw[0]!='1' && bw[0]!='3') //проверка значений
                      printf("Неверное значение, введите верное : ");
                  else
                     {
                        write(fd,bw,1);             // отправляем в ардуину 0 или 1
                        sleep(1);           // пауза для ожидания ответа
                        iIn=read(fd,buf,7);         //чтение приходящих данных из порта
                        printf("%s",buf);   // печать из буфера
                        printf (" ");
                     }

               }
            close(fd);
            exit(0);

        }
    exit (1);
   }

Красотой он не блещет, но работает. С корректным открытием порта пришлось довольно долго ковыряться, пока не нашел соответствующий код на одном англоязычном форуме.
Естественно, порт указан для моей железки, у вас может быть другой — например
/dev/ttyACM0 откройте ArduinoIDE и посмотрите в настройках.
По поводу чтения из буфера порта хорошо написано тут:
arduino.ru/forum/programmirovanie/ochistka-bufera
и здесь:
mypractic-forum.ru/viewtopic.php?t=11
В общем, если дочитали до этого места — разберетесь :)
Понятно что это простейшая модель, по тому же принципу можно рулить другими выходами ардуины, посылать в компьютер данные с подключенных к ней датчиков, поиграться в умный дом пощелкав релюшками — полет вашей фантазии не ограничен.
В общем плата подключена, код скомпилирован и надеюсь запустился — экспериментируйте.
Я это делаю в Code::Blocks, можно в Geany или в любом редакторе и консоли — кому что нравится.

Теперь c++:
Этот код выглядит немного понятней предыдущего, хотя красотой тоже не блещет:

#include <iostream>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

using namespace std;

int main()
{
   int fd; /* Файловый дескриптор для порта */
   char buf[7];/*размер зависит от размера строки принимаемых данных*/
   char bw[1];
   int iIn;
   fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); /*'open_port()' - Открывает последовательный порт */
      if (fd == -1)
        {
          /*
           * Возвращает файловый дескриптор при успехе или -1 при ошибке.
           */
           cout << "error port\n" << endl;
           cout << "open_port: Unable to open /dev/ttyUSBn - " << endl;
        }
     else
        {
            struct termios options; /*структура для установки порта*/
            tcgetattr(fd, &options); /*читает пораметры порта*/

            options.c_cflag |= (CLOCAL | CREAD);    // Ignore modem controls
            options.c_cflag &= ~CSIZE;
            options.c_cflag |= CS8;     // 8 bit chars
            options.c_cflag &= ~(PARENB | PARODD);  // shut off parody
            options.c_cflag &= ~CSTOPB; //no scts stop
            options.c_iflag &= ~IGNBRK; //disable break processing
            options.c_iflag = 0;        // no echo
            options.c_iflag &= ~(IXON | IXOFF | IXANY); // no software flow control
            options.c_oflag = 0;        // no remapping
            options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG |IEXTEN);
            options.c_cc[VMIN] = 0;     // read doesn't block
            options.c_cc[VTIME] = 5;    // 0.5s read timeout
            tcsetattr(fd,TCSANOW,&options);
            cout << "1-включ, 0-выкл, 3-выход : \n"  << endl;
            sleep(1);

            while(bw[0]!='3')

               {
                  cin >> bw[0];
                  switch (bw[0]) //проверка значений
                     {
                       case '0':
                           {
                              write(fd,bw,1);
                              sleep(1);
                              iIn=read(fd,buf,7);
                              cout << buf << endl;
                              break;
                           }
                        case '1':
                           {
                              write(fd,bw,1);
                              sleep(1);
                              iIn=read(fd,buf,7);
                              cout << buf << endl;
                              break;
                           }
                        case '3': break; //выход
                        default : cout << "Неверное значение, введите верное : " << endl;
                     }

               }
            close(fd);
            return(0);

        }
    return (1);
   }


На закуску тоже самое на Processing 3 :
Код у меня как обычно в стиле «не делайте так дети никогда», но естественно работает.
Что-то спер с Амперки, что-то дописал сам, вот эта радость:

import processing.serial.*;
Serial myPort;   
String textLines;

void setup()
{
  String portName = Serial.list()[4]; // 4-для порта /dev/ttyUSB0 , 0 для /dev/ttyACM0
  myPort = new Serial(this, portName, 9600); 
  size(320, 120);
  clear();
  textSize(12);
  text("Нажмите 0 или 1 для переключения , 3 для выхода",0,10);
}
void draw()
{
  if (keyPressed) // если клавиша нажата
    { 
      switch(key)
      {
        case '0':
          {
            myPort.write(key);
            println("0");
            break;
          }
        case '1':
          {
            myPort.write(key);      
            println("1");
            break;
          }
        case '3': exit(); //выход
        default : println("Ошибка нажмите 1 или 0 для работы , 3 для выхода");
       }
      }
  delay(200);

  if ( myPort.available() > 0)// если есть данные
  { 
    textLines = myPort.readStringUntil('\n'); // читаем их
    println(textLines); // печатаем в консоль
    clear();
    textSize(12);
    text("Нажмите 0 или 1 для переключения , 3 для выхода",0,10);
    textSize(32);
    text(textLines, 100, 70); // печатаем в окно
  }
 }
  

Все это безобразие выводит приветы от ардуино не только в консоль но и в окно программы, в общем
довольно интересное баловство для начинающих ковыряться с этой платой.
Перед тем как все это запускать обратите внимание на строчку:
String portName = Serial.list()[4]; // 4-для порта /dev/ttyUSB0, 0 для /dev/ttyACM0
и выберите для вашего порта соответствующую цифру.
Для тех кто не в курсе немного о processing:
ru.wikipedia.org/wiki/Processing
www.processing.org/

PS Зачем я вообще озадачился этой темой: Сделав себе резак из остатков старого стола, ардуины, мебельных направляек и самых дешевых шаговых движков 28byj-48 ( об этом в следующий раз если кому-нибудь интересно и я преодолею свою лень ) я озадачился кодом который заставит все это работать. По-быстрому набросал его на processing-е ( об ардуино и processing-е тоже можно что-нибудь написать — но пока лень ), графический редактор для рисования примитивов использовал xfig, а перекодировщик из его формата написал на си.
Так вот хочется уйти от процессинга на стандартное для меня сочетание си и gtk — благодаря промежуточным тестам и появилась эта статья, надеюсь она еще кому-нибудь пригодится.

Комментарии (121)

RSS свернуть / развернуть
Красотой он не блещет
Он не то что красотой не блещет — так уже даже на бейсике не пишут!
0
  • avatar
  • Vga
  • 29 сентября 2017, 03:49
Наверное, как сейчас пишут на бейсике не знаю — последний раз ковырял его на Спектруме :-)
0
Вот так, как писали спагетти на спекки-бейсике оно и написано.
0
  • avatar
  • Vga
  • 29 сентября 2017, 08:02
Естественно, goto вызывает у меня чувство ностальгии, когда написав в программе несколько десятков таких операторов внезапно упираешься кодом в RAMTOR. В данном случае можно было зациклиться и при помощи цикла ( извиняюсь за тавтологию ) но поскольку этот кусок кода я тоже где-то утянул и переделывать его было лень, просто натолкал внутрь разных костылей для работы программы.
0
это к реплике о красоте и удобстве консолей… накликал на графическом языке

мышью в операторе можно поменять тип операндов + при этом оператор на стадии редактирования проверит допустимость выбранного типа для указанной переменной.
Для логических операндов можно выбрать в меню собственно саму операцию и перетащить саму переменную из таблицы переменных на оператор
фотошоп
0
Цирк начнется когда вы это захотите в систему контроля версий положить. Или скормить какой-нибудь автоматизированной тулзе.
+1
циркачи везде цирк видят :)
для графических языков есть сравниватели версий

хотя я работаю по принципу = выпустил и забыл на 15 лет… а через 15 лет будет уже другое оборудрвание и другая программа :)
0
хотя я работаю по принципу = выпустил и забыл на 15 лет…
То-то ты демонстрировал скрин папки с полусотней версий программы в архивчиках.
0
  • avatar
  • Vga
  • 30 сентября 2017, 05:46
Для нас самый оптимальный метод — архивировать проект на разных стадиях под разными увеличивающимися номерами
Во всех папках и в самой программе есть комментарии к архивам:
01 — первая версия для теста соединений и монтажа
02 — установили и проверили первый механизм
03 — установили и проверили второй механизм

44 — наконец установили энное оборудование

90… алгоритм выверен… теперь пришло время добавлять красивых девушек в ЧМО
99… конечная рабочая версия с дефками


Зачем что то сравнивать абсолютно несравнимое?
По специфике и опыту работы программа пишется по мере добавления нового оборудования прямо на объекте…
Это проще и безопаснее, чем написать в офисе всю программу целиком, а потом на объекте ставить заглушки на ещё не смонтированные технологические цепочки. Сейчас например просто не стал вставлять в программу блок обмена с чужим устройством по специфичному протоколу… по ходу смежники будут менять устройство на другое с пока неизвестным мне протоколом :(
На другом работающем объекте дополнительное оборудование будут монтировать в ноябре… а после этих изменений в программе новых уже не будет и не будет смысла сравнивать версии нулевого цикла и конечную версию… это совершенно разные программы.
Ну и пока память не подводит… многое помню, многое вспоминаю по прошествии лет чтобы объяснить почему именно так сделали… но самое правильное для сравнения версий это не экономить на текстовых подробных комментариях в самой программе и в комментариях к самому архиву.
А для «мясорубок» программа пишется в лаборатории один раз и потом она уплывает на другую сторону планеты и там уже нечего сравнивать :)
У меня софт в продакшне тоже десятилетиями работает и что? С какого перепугу это стало причиной, что бы не пользоваться системой контроля версий?
у меня нет продакшена и я не знаю, что это такое :(
как бы к гиту/хиту/линуксу и фейсомордам не привязан и не понимаю психологию подсевших на это людей.
Вы же не понимаете специалистов использующих дома всякие станочки и принтеры на Ардуинах и других, кто на этой основе пытается что то улучшить или углубить.
0
в некоторых случаях только какие то «несуразные» графические образы (дефки или качки-старички) помогают понять что происходит
0
Для нас самый оптимальный метод — архивировать проект на разных стадиях под разными увеличивающимися номерами
Молодец, описал ровно то, зачем VCS и нужны. Чтобы не маяться вот этой дурью с архиватором.
По специфике и опыту работы программа пишется по мере добавления нового оборудования прямо на объекте…
И чо? Какое отношение оно имеет к VCS? Что мешает пользоваться гитом на объекте, благо он распределенный?
Сейчас например просто не стал вставлять в программу блок обмена с чужим устройством по специфичному протоколу… по ходу смежники будут менять устройство на другое с пока неизвестным мне протоколом :(
Охуительная проблема из разряда «прикладники такое решают ежедневно».
в некоторых случаях только какие то «несуразные» графические образы (дефки или качки-старички) помогают понять что происходит
У меня для тебя плохие новости…
0
  • avatar
  • Vga
  • 30 сентября 2017, 15:12
У меня для тебя плохие новости…
у тебя нет картинок?
На счёт остального — практик отличается от теоретика отсутствием тяги к сравнению версий… все сравнения на время проведения ПНР в голове.
нафиг VCS со сравнениями, когда у меня всё под рукой и я могу вживую проверить все варианты и оставить работающий… и забыть про уже настроенное.


Архив делаю не для сравнения, а по старой доброй традиции распределённого хранения цельного файла и уменьшения размера
и всегда в любом случае имею под рукой на разных компах, так как когда на объектах возникают проблемы, то я спокойно открываю проект и говорю где им в железе или кабелях искать поломку.
Иногда приходится переконвертировать старые проекты под новые версии программ… справа размер программы для сравнения… это несложный проект :)
0
На счёт остального — практик отличается от теоретика отсутствием тяги к сравнению версий… все сравнения на время проведения ПНР в голове.
Не практик от теоретика, а кодер мышкой от программиста.
Архив делаю не для сравнения, а по старой доброй традиции распределённого хранения цельного файла и уменьшения размера
Этот аргумент проканал бы, если бы архив был один. А не сто, датированных и с коммит-месседжами.
Кстати, размер в VCS тоже был бы меньше, за счет сжатия во временной области.
это несложный проект :)
Картинками несложно набрать триста метров. Вот когда триста метров текста — это другое дело.
0
  • avatar
  • Vga
  • 30 сентября 2017, 17:30
Я вот не понимаю дилетантов не умеющих работать мышью… как ты 3Д графику будешь текстом набивать и сколько времени это у тебя займёт.
Насмотрятся в кино о хакерах набивающих йцукен в МУРе или ping для взлома сети Пентагона

и потом как гитовские прохфесоналы начинают проповедовать работу «АЭС» в командной строке…
у меня везде на объектах стоят сенсорные экраны… уж 15 лет… когда телефонов ещё сенсорных не было старички-эксплуататоры были со ЧМО на ты своими пальцищами
0
Как раз мышью умеет работать любой дилетант. CLI — совсем другое дело.
как ты 3Д графику будешь текстом набивать и сколько времени это у тебя займёт.
Расскажи это авторам POV-Ray.
0
ты пробовал набивать в командной строке Автодесков или ЗД Макса что то посложнее линии или прямоугольника?
А потом ещё в командной строке поменять их параметры без использования мыши… выбор клавишей табуляции? :)
Я для разводки ещё в PCAD v8.5 писал и использовал скрипты для автоматизации разводки рутинных мест типа блоков памяти или окружения процессора… а подготовленные скрипты в Aldus PageMaker верстали типовые макеты книжек с выделением заголовков, расстановкой картинок с подписями под ними…
Специалист тем и отличается от дилетанта что может использовать все доступные возможности, а не тупо ругаться на плохую мышь.
0
ты пробовал набивать в командной строке Автодесков или ЗД Макса что то посложнее линии или прямоугольника?
Я? Нет. Я программист. Ди Хальт — не только пробовал, но и крайне хвалил.
Специалист тем и отличается от дилетанта что может использовать все доступные возможности, а не тупо ругаться на плохую мышь.
Специалист тем и отличается от дилетанта что может использовать все доступные возможности, а не тупо ругаться на плохую консоль.
0
Я вот не понимаю дилетантов не умеющих работать мышью…
Как, вы сами себя не понимаете? Тяжело вам…
как ты 3Д графику будешь текстом набивать и сколько времени это у тебя займёт.
Вы не представляете, насколько это может быть эффективно и, что совсем уж удивительно для вас, исключительно быстро. На досуге посмотрите OpenSCAD, например. Впрочем, речь-то не об этом, а о программировании. А тут есть исторический факт — «программирование мышкой» не прижилось, хотя попыток было несчесть.
0
На счёт остального — практик отличается от теоретика отсутствием тяги к сравнению версий…
Угу. А еще практик отличается тем, что ему нужно сравнение версий. А теоретик в это время файлики архивирует.
+2
Для нас самый оптимальный метод — архивировать проект на разных стадиях под разными увеличивающимися номерами

Oh, my Goddess. Извините, конечно, но я своим фейспалмом только что чуть руку не сломал. Ну придумали же Git/SVN, ну блин.
+2
сегодня без гиты и свины по памяти добавил обработку редкого события


я понимаю, что некоторые делают все программы на одной шпаргалке под разное оборудование и им просто необходимо контроллировать свою память… сюда не смотрите… это не играть… тут была селёдка завёрнута
0
сегодня без гиты и свины по памяти добавил обработку редкого события
Это, как ни странно, не то, для чего оно создано. Оно для того (помимо прочего), чтобы через пять лет вспомнить, как это изменение выпилить, не испортив все остальное.
Ну или для того, чтобы посмотреть, как пять лет назад ручками битмап формировал, до того как GDI+ подтянул.
Ну или для того, чтобы не хранить сотню архивов с бэкапами, а хранить один. Того же размера. Со всеми версиями и индексом изменений, в котором ты находишь, когда и как менялся файл одним запросом, а не заглядывая руками во всю сотню архивов.
Ну или для того, чтобы перекраивать весь проект в корне, не боясь сломать уже работающее.
Ну или для команды, где все гораздо, гораздо веселее.
0
вот вариант хранения только рабочих вариантов с описанием причин их создания
изменения обычно впиливают по результатам возникновения непредвиденных событий… тут было 2 внешних воздействия посторонними объектами с большой массой, которые частично повредили механику и датчики, но хоть подобные ситуации редкость, но в программу добавил варианты управления механизмами… для этого надо запретить некоторые блокировки…

передаю его эксплуататорам и им не надо разбираться в контроле версий.
Если кто то что то изменил без моего ведома, то это определяется по дате изменения к функции/блоку в базе данных проекта в Симатик Менеджере проекта.
-1
Очередная демонстрация «вот чтоб такой херней не страдать VCS и созданы».
+1
Программист-реалист: А как вы решаете проблемы с неконсистентностью и конфликтами ?
сколковский фантазёр: Мы их не решаем… мы их создаём !!!
-1
То есть по теме тебе сказать нечего, ОК.
0
я показыватель… 10 лет вот эта утилита живёт без контроля версий… нумеруется датой

сначала выкладывал исходники, но сравниватели версий оказались коварными и начали…
надоело, и стал выкладывать ехе… сравниватели сдулись.
Можно попытаться сравнить версию 2007-го года и 2017-ого года… но зачем?
некоторые теоретики тупо повторяют чужие тупые лозунги и тратят время на сравнение, вместо написания требуемого функционала.
0
А некоторые практики рассказывают, как у них винт с единственной копией сорцов сломался.
0
Некоторые со своими гитовыми облаками теряют все сравнения своих версий… сегодня гугл прикрыл RT… завтра он прикроет всё, связанное с Россией…
а я со времён Горящих Шаров (FireBall) зеркалирую, зеркалирую…


Есть облададели опыта и навыков, которые не меняют свои принципы в жизни и в программировании и которые не будут в угоду кому то выкидывать из Языков программирования оператор GoTo = он же JMP = он же J* по результату, и при необходимости будут применять всё доступные и нужные в конкретной ситуации операторы.
GoTo обычно боятся не владеющие ассемблером :)
0
Некоторые со своими гитовыми облаками теряют все сравнения своих версий…
В гите затруднительно что-либо потерять по вине облака уже потому, что в облаке хранится копия репозитория.
При этом гит если не автоматизирует, то по крайней мере сильно облегчает синхронизацию копий, а у архивистов там бэкап битый, тут бэкап старый, а этот вообще недосинхронизировали и потому не компилится…
GoTo обычно боятся не владеющие ассемблером :)
А все остальные просто его не любят — ибо не нужен и делает код только хуже (за крайне редкими исключениями).
+1
P.S. Это уж не говоря о том, что в VCS очередной бэкап сырков делается так просто и удобно, что можно бэкапить их через каждое мелкое изменение (типа поправиленной опечатки в комментарии). Собственно, это даже рекомендуется.
А теперь представь, что тебе надо выбрать файлы для архивирования и заархивировать 300 метров… «Да ну нах из-за такой мелочи бэкапить, позже сбэкаплю!». «Упс, винт сдох. Что ж я там фиксил-то с прошлого бэкапа?..».
0
Винт может сдохнуть в любом случае вне зависимости от того упаковываешь ты это в ZIP или гитуешь в рехпозитариум…
Потеря админом российского отделения департамента Автоматизации Сименса всего сайта вместе с бекапами тому пример… хранил в рехпозитарии облачного рехпозитатора… в результате неизвестной комбинации были утрачены как сама рабочая версия так и все архивные копии.
Как видно на фотке — я храню диски неподключёнными…
есть много ненадёжных вариантов распределённого хранения ;)

а вот терабайты в Рапидшаре все сдохли :(
-1
Винт может сдохнуть в любом случае вне зависимости от того упаковываешь ты это в ZIP или гитуешь в рехпозитариум…
Только в гит ты коммитишь минимум раз в день, а в зипчики — раз в год.
Потеря админом российского отделения департамента Автоматизации Сименса всего сайта вместе с бекапами тому пример…
Вот-вот, хорошая демонстрация надежности бэкапов.
Как видно на фотке — я храню диски неподключёнными…
И что? Это никак не гарантирует, что при следующем включении винт запустится. У меня винт как раз на таком «храню неподключенным» и посыпался.
0
А еще теги, которые, например, позволяют отмечать состояние кода в момент, когда он ушел заказчику. И, что характерно, тоже не надо держать это в голове или просить заказчика залезть в пузо/меню/whatever и сказать стоящую у него версию.
0
Для нас самый оптимальный метод — архивировать проект на разных стадиях под разными увеличивающимися номерами
Для этого нормальные люди используют систему контроля версий.
как бы к гиту/хиту/линуксу и фейсомордам не привязан и не понимаю психологию подсевших на это людей.
Я так и понял, что вы вообще не в курсе, что это такое и зачем оно нужно. Типичний досикусовский подход.
Вы же не понимаете специалистов использующих дома всякие станочки и принтеры на Ардуинах и других, кто на этой основе пытается что то улучшить или углубить.
С чего вы взяли, что я их не понимаю? Особенно учитывая, что у меня сейчас два станка стоят дома.
+1
а у меня сегодня 2 объекта… дома не помещаются :)
они и похожи и различны… сравнивать их в сравнителе? Для чего? Это не ускорит работу… хотя можно потратить много дифцитного времени на попытку понять сравнения…
а можно просто наращивать функционал и реализовывать возможные фантазии… отладка с подсветкой в графическом языке позволяет за один раз быстро отладить фантазию… сравнивать затем варианты нет смысла.
0
Э не, ты смешиваешь теплое с мягким. VCS — системы управления историей версий одного проекта, а не сравнения двух проектов.
отладка с подсветкой в графическом языке позволяет за один раз быстро отладить фантазию…
Что, на самом деле, не отличается от отладки в дебаггере. Но это, опять же, вопрос ортогональный системам контроля версий.
+1
а у меня сегодня 2 объекта… дома не помещаются :)
И что?
сравнивать затем варианты нет смысла.
Как верно заметил Vga , вы путаете теплое с мягким — версии одного проекта с разными проектами.

P.S. вы, конечно, можете продолжать отмазываться, но это не изменит того факта, что все ваши подходы к разработке безнадежно устарели еще лет 20 назад. защищая их вы только демонстрируете некомпетентность.
+1
все ваши подходы к разработке безнадежно устарели еще лет 20 назад. защищая их вы только демонстрируете некомпетентность
А наномотик инновационного изобретателя с наглой рыжей мордой за 600 000 рублей использовать не желаешь?
А я деградант, потому что предпочитаю ходить по центру города на своих ногах, а не таскаю с собой на плечах наномопед?

Обычные самокаты уже устарели… сейчас в метро стал встречать инноваторов, таскающих на себе тяжёлые средства передвижения на двух колёсах (вдоль или поперёк) с аккумуляторами… чего только не придумают, лишь бы ногами не ходить…
Я, в отличии от вас, представляю нелюбимые вами фотошопы… и поэтому и утверждаю о реалиях реальной практики программирования на реальных объектах.
-3
А наномотик
Это ваща проблема, я к ней отношения не имею и не понимаю, почему вы вообще об этом заговорили.
Я, в отличии от вас, представляю нелюбимые вами фотошопы… и поэтому и утверждаю о реалиях реальной практики программирования на реальных объектах.
Вы, в отличие от меня, не имеете ни малейшего понятия о реальной практике программирования. Ваши фотошопы к нему не имеют отношения даже очень отдаленно.
+1
да да… я теоретик :)… инженер-теоретик :)
всё это фотошоп… художественный вымысел

применил романтический фильтр «Питер»...
-2
О вижу язык LD :-), я предпочитаю FBD, но на вкус и цвет товарища нет. Старые релейные схемы наверное действительно проще перетаскивать на LD.
Кстати, раз уж тут ардуиновский блог то вот вам реализация этих языков на arduino: flprog.ru/
Понятно, что ардуина это не сименсовские и не овеновские плк-хи, но для обучения студентов на первых порах вполне себе подойдет.
0
всё это фотошоп… художественный вымысел
Неясно только, ты что сказать-то этим хочешь? В очередной раз похвастаться графической отладкой? Так не впечатляет же, выглядит оно забавно конечно, но и только.
Разве что начинает напоминать калобайта с его жалобами «я умные книжки не понимаю, поэтому они говно». Только вместо книжек подставить консоль.
P.S. И сильно подозреваю, что накликать эту схему — куда дольше, чем написать соответствующее ей булево выражение. С наглядностью у такого развесистого условия, правда, будет ахтунг. Но если его красиво расписать на 10 строчек — то будет вполне адекватно.
+1
В условиях реальной жизни на объекте бывает важна скорость реакции на событие — подсветка состояния бита в графическом языке мозгом детектируется быстрее попытки расшифровки напиханных в одну строчку сотни переменных.
О вижу язык LD :-), я предпочитаю FBD, но на вкус и цвет товарища нет.
Старые релейные схемы наверное действительно проще перетаскивать на LD.
Зачем что то перетаскивать со старых релейных схем?
Это заблуждение — что программист берёт старую схему и начинает её перерисовывать в графическом языке… как ты перерисуешь ПИЛ-регулятор или привод с регулируемым частотным преобразователем… для объекта разрабатываемого с нуля?
Я цать лет и схемы рисую и потом программы под эти схемы пишу… просто удобный для отладки язык релейно-контактной логики для собственно алгоритма работы и сопутствующих математических вычислений.
Аналогично мы рисуем схемы на логике и микропроцессорах в PCADах и потом их программируем… никто ж с понтом не треплётся, что мол всю схему устройства набил на клаве и развёл без мышки :)
… и тут теоретик достаёт «козырь»… меченый жокер… VHDL

О вижу язык LD :-), я предпочитаю FBD, но на вкус и цвет товарища нет.
в релейной логике зелёная жидкость течёт по трубам более нагляднее — нет паразитных для взгляда застойных зон на элементах И :)

иногда вааще бывают простейшие решения… из тырнета

шутка шуткой, но у нас раздел видеонаблюдение есть часть комплексного проекта системы автоматизации… видео передаётся на десятки километров по гигабитной оптике.
-2
подсветка состояния бита в графическом языке мозгом детектируется быстрее попытки расшифровки напиханных в одну строчку сотни переменных.
В подобных схемах — возможно. За выглядящее подобным образом условие в ЯВУ я бы убил. Но они мне там не встречались — там можно сделать иначе.
… и тут теоретик достаёт «козырь»… меченый жокер… VHDL
Точняк. Основа всей цифровой электроники. Именно на нем, а не в диаграммах из гейтов, делаются процессоры и прочие чипы.
никто ж с понтом не треплётся, что мол всю схему устройства набил на клаве и развёл без мышки :)
Потому что треплешься с понтом тут только ты.
Напомню, кстати, о существовании SPICE. Нетлист для него я набирал, правда, только один раз — в институте. Впрочем, я спайсом больше и не пользовался.
0
Напомню, кстати, о существовании SPICE.
бью твоего меченого джокера своим каре от 1992 года… я понтуюсь тем, что могу визуализировать в графическом виде, а не в текстовом трёпе :)

Напомню, кстати, о существовании SPICE.
Нетлист для него я набирал, правда, только один раз — в институте.
Впрочем, я спайсом больше и не пользовался.
в отличии от теоретиков я каждый день рисую и набиваю на клаве программы.
в сообщении 01 октября 2017, 00:35 (это которое под видео «Тупой компьютерщик» я упоминал о написании утилит в текстовых скриптовых языках для выполнения типовых рутинных операций и облегчения последующей работы мышью…
В Автодеске* можно набить в лиспе или ваське макросов для типовых задач и затем Автодеск по команде и настройкам, заданным мышью, сделает рутинную работу по поиску линий с определёнными тэгами и заменит их на новые значения со смещением или вааще нарисует новую схему по таблице значений из таблицы экселя…

Но когда надо мышью выполнить обычную типовую операцию перетаскивания/изменения графического объекта, то зачем для делания того же самого надо выдумывать и отлаживать с отлавливанием ошибок новый инновационный программный код?

*да да есть EPlan… очень хорошая программа, которая много может сделать лучше Автокада… но формат Автокад является средством межкорпаративного общения и передачи материалов на электронных носителях и полученные от смежников чертежи иногда приходится изменять вручную… мышью.
-2
я понтуюсь тем, что могу визуализировать в графическом виде, а не в текстовом трёпе :)
Каждый может, в чем понт-то? Хотя насчет схем я не буду спорить, что их удобнее проектировать в графическом виде.
Но когда надо мышью выполнить обычную типовую операцию перетаскивания/изменения графического объекта, то зачем
Незачем. Но и пытаться заменить мышкой то, что лучше делается в тексте — тоже.
Мне вот интересно, на сколько процентов код со второго скрина твой?
0
Мне вот интересно, на сколько процентов код со второго скрина твой?
очень сложный для понимания код на Ваське?
-2
очень сложный для понимания код на Ваське?
Я не жаловался на понимание. Я спрашивал, на сколько процентов код твой.
И вон тот кусок кода на Delphi диссонирует с кодом на васике еще больше. Врядли один и тот же программист на одном языке будет оформлять образцово, а на другом — как попало.
0
тебе не хватает наглости и глупости написать, что это твой код и я его у тебя скопипастил?
Код элементарный… 3 минуты на приготовление…
сейчас проверил… работает… :)

И вон тот кусок кода на Delphi диссонирует с кодом на васике еще больше. Врядли один и тот же программист на одном языке будет оформлять образцово, а на другом — как попало.
Ты мои фотки прежде хоть смотрел? Или они не мои? :)
Главное не порядок на столе, а то чтобы размещённое на столе выполняло свою функциональность…
как то ИДА сдалась и пришлось ей на помощь набросать мышкой утилитку с симуляцией процессора…
может и не красивая, но поставленную задачу решила
-2
тебе не хватает наглости и глупости написать, что это твой код и я его у тебя скопипастил?
Если бы это был мой код, я бы не спрашивал, а прямо написал.
Ты мои фотки прежде хоть смотрел? Или они не мои? :)
Главное не порядок на столе, а то чтобы размещённое на столе выполняло свою функциональность…
И вот именно поэтому я сильно подозреваю, что 90% кода на скрине принадлежит не тебе, а примеру от автокада. И с каждым очередным скрином это подозрение крепнет.
Да и виляние вместо ответа «100%, а что?» тоже наводит на размышления.
0
Да и виляние вместо ответа «100%, а что?» тоже наводит на размышления.
продолжай размышлять… и представь эти самые 90% кода Автокада на примере скрина с кодом поиска и замены… пронумеруй эти проценты на 40 из 45 строк :)
иначе ты обычное трепло :)
-2
К чему это виляние вместо короткого прямого ответа?
0
К чему это виляние вместо короткого прямого ответа?
ты за наветы то отвечай… прямо на картинке покажи 90% «кода примера из Автокада»
а я потом тебя ещё посрамлю :)
-2
Не раньше, чем ты ответишь на вопрос.
0
в наглую оболгал и теперь требуешь доказательств от оболганного что он будет оправдываться?
Запусти свой гифт и предоставь сравнение версий примера Автокада и «моего кода» на деле, а не будь типичным фейковым треплом.
-2
Я не требую доказательств. Я просто спрашиваю, какая часть кода написана тобой. Но раз ответа нет — приходится искать ответ на него самому. И судя по тому, что подозрительные куски гуглятся слово-в-слово вместе с комментариями — ответ будет не в твою пользу.
0
успехов в поиске :)

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

и конкретно видео по наглядности текстовой отладки… когда F8 оказалась захвачена программой видеозахвата
-2
и конкретно видео по наглядности текстовой отладки… когда F8 оказалась захвачена программой видеозахвата
Плохому танцору яйца мешают.
По поводу видео — и о чем оно? Большая часть — бессмысленное тыкание по чертежу.
По поводу кода — вот код на видео сомнений в авторстве не вызывает. А заодно — не вызывает теперь сомнений и то, что код на первом скрине, про который я спрашивал — не твой.
А срамить тебе видимо нечем, кроме как демонстрацией собственного хамства.
0
P.S. На всякий случай: я вижу, что это один и тот же файл с кодом. Я говорю исключительно о тех кусках кода, которые попали на соответствующий скрин.
0
Тебе не хватило смелости указать хоть на одну строчку или абзац… так как ты уже заранее предполагаешь, что у меня есть ответ на казалось бы 90%-ный коварный вопрос…
я могу на 100% утверждать что ты трусливое трепло :)
-3
О, а я не ошибся в оценке «что тут написано plcist'ом». Алсо, как удобно — объявить все не свое «не кодом». Нет, это код. Даже комментарии — это часть кода. И «типовое объявление переменных» — тоже. С именами в точности как в
сэмплах автокада, а не однобуквенные, как в чисто твоем коде.
В итоге из твоего остается только кусок, помеченный как «это код макроса». На вид — 20-25%. Не такое уж и плохое совпадение с оценкой, выданной по принципу Парето.
+1
P.S. При этом взять сэмпл и подправить под текущие нужды — это нормально. А вот твоя реакция на безобидный вопрос забавна :)
+1
интересная должна быть реакция на незавуалированный навет о 90% кода из примера Автокада…
Плохому танцору яйца мешают.
продолжай мешать яйца своему танцору :)
-2
Навет ты придумал сам. Напомню вопрос:
Мне вот интересно, на сколько процентов код со второго скрина твой?
Ну и поскольку выяснилось, что 70-80% кода на скрине не твои — это уже не навет, а факт.
+1
Ну и поскольку выяснилось, что 70-80% кода на скрине не твои — это уже не навет, а факт.
я как мясорубшик заявляю, что пасквильный яйцемешатель* ещё и считать не умеет :)
*яйцемешатель — это не оскорбление, а тип квалификации блохера

Вот тут моего всего 1 байт… 00…

но теперь работает не в Демо режиме :)
0
Почему бы тебе не программировать в таком случае сразу в байтиках, а не мышкой в тиа?
я как мясорубшик заявляю, что пасквильный яйцемешатель* ещё и считать не умеет :)
*яйцемешатель — это не оскорбление, а тип квалификации блохера
Да, это не оскорбление, это ты просто демонстрируешь свое хамство. Ну и заодно неспособность уязвить умнее, чем второклашка.
P.S. Один байт — слишком много. Я обходился одним битом.
+1
Даже комментарии — это часть кода.
ты думаешь что пробелы и комментарии есть код…
яйцемешалка так и не смогла найти этот код ни в примерах Автокада, ни в интернете, ни в пресловутых гитах и vcs
а код работает и без комментариев :)
-2
а код работает и без комментариев :)
Работоспособность — не единственное, что требуется от кода. Отформатированный одной строкой без пробелов он тоже работает. Вот только код — это КД, и отформатированный таким макаром код — это очень хуевая КД.
+1
Вот только код — это КД, и отформатированный таким макаром код — это очень *уевая КД
мешай их дальше :) в детском саде… так как громкие заявления типа
Ну и заодно неспособность уязвить умнее, чем второклашка.
и не по месту неправильное написание «взрослого» слова тянет только на детсад :)

Для других показываю на примере разницу между КОДОМ и неКОДОМ


процесс автоматического удаления неКода


результат в размере… в ОДНОЙ только процедуре из почти 5000 строк около 4900 было «комментарием» и 100 строк полезного кода :) Немцы до сих пор понять не могут, как кому то хватает возможностей разобраться в комментариях за день… вечеров они выкладывают стулья с комментариями… утром… после 2010-ого они смирились.

P.S. Один байт — слишком много. Я обходился одним битом.
на блохе ты можешь накликать любую глупость… вот если у тебя был фотлшоп и он мог бы запуститься на твоём дряхленьком компе… то ты б показал… :)
-2
и не по месту неправильное написание «взрослого» слова тянет только на детсад :)
Молодец, продемонстрировал свое непонимание. Продолжай в том же духе.
А, да, и не забудь назвать меня «блохершей» и «яйцемесом», как и полагается уважающему себя «советскому инженеру».
вот если у тебя был фотлшоп и он мог бы запуститься на твоём дряхленьком компе… то ты б показал… :)
Я не испытываю потребности испражняться скринами с прифотошопленными бессмысленными подписями.

P.S. «Советский инженер», кажется, даже не понял, как на его скрине опознали чужой код.
0
как блохершу яйцемеску попёрло то от чувства собственного блохерного достоинства
а мы простые советские инженеры имеет дело с реальными объектами, а не фантазиями о долгой и счастливой жисти в трепонете
0
как блохершу яйцемеску попёрло то от чувства собственного блохерного достоинства
О нет, блохершу-яйцемеску прет от ЧСВ простого советского инженера, уже который комментарий понтующегося взломанной длл-кой с защитой уровня «я такое в школе ломал, когда лень было диск вангеров вставлять».
а мы простые советские инженеры имеет дело с реальными объектами, а не фантазиями о долгой и счастливой жисти в трепонете
Какой прелестный образец «я гонялся за вами весь день, чтобы сказать вам, как вы мне безразличны!»
0
Плохому танцору яйца мешают.
и кто танцору яйца мешает?
девушка… чтобы рассуждать о мешании яиц их надо по крайней мере иметь :)
Сутки работы пресловутой VCS не дали ни одной версии вааще :)
-2
Твои сообщения по осмысленности приближаются к сообщениям HHIMERA .
+1
Твоя аргументация напоминает мне это:
Вы — замечательный собеседник. С Вами так интересно вести дискуссию. Немного, правда, смущает, что Вы практически в каждом своем комментарии меняете тему разговора и уходите от неудобных для Вас вопросов. Но Ваши аргументы выглядят очень убедительно — ведь Вы их подкрепляете вырванными из контекста цитатами и не относящимися к делу картинками.
+1
циркачи везде цирк видят :)
Не знаю что вы там себе видите, но я «циркачей» замечаю сразу.
для графических языков есть сравниватели версий
Вы еще скажите, что он к гиту прозрачно прикручен. А мержить все руками можно только если ваша работа состоит из того, что вы мержите изменения.
хотя я работаю по принципу = выпустил и забыл на 15 лет… а через 15 лет будет уже другое оборудрвание и другая программа :)
У меня софт в продакшне тоже десятилетиями работает и что? С какого перепугу это стало причиной, что бы не пользоваться системой контроля версий?
+1
по-моему даже в спектруме имелся оператор FOR
То, что происходит в последних строчках кода — я вообще никогда не видел!
0
понятное дело, мы имеем дело с автокодом…
0
Цикл то был не просто for, а for next. Эх молодежь, а то автокод у них тут понимаешь и прочие хайпы, сами то боюсь кнопку Magic в глаза не видели :-)
0
Еще один старикан-Ардуиноид решил похвастать своими пасхальными штанами :DDD

P/S/ Старичье падко на Ардуину еще больше, чем школоло. Я думаю, что 95% Ардуинового барахла раскупается взрослыми дядями (хуельцами, креаклами и МНС-ми) и старичьем, и видимо только 5% попадает в ручонки школоло.
0
Примерно так, бедным студентам видимо ардуины уже не хватает, все раскупают старые пердуны и дети дошкольного возраста.
0
Ардуина зло — говорил он, заправляя бобину в ЗД-принтер для печати…
Вот если бы в принтере/ЧПУ была б не Ардуина на USB… а плата для подключения к порту принтера LPT, которого у него нет…
Я старичок столкнулся с Ардуиной год назад, когда молодейший родственник попросил починить купленную для ЧПУ ардуинную плату… она не работала… поменял один кварц на собственно ардуинной части и Ардуина заработала

Еще один старикан-Ардуиноид решил похвастать своими пасхальными штанами :DDD
ниже код для молодых блохеров, не умеющих использовать стариковские тэги для вставки своих пасхальных штанов :)
<video>http://www.youtube.com/watch?v=wTxa5beFLAc</video>

сейчас у меня самого в ЧПУ стоит Ардуина — комплекса неполноценности не испытываю… кто то написал под неё программу и мне на это не пришлось тратить время… спасибо старичкам за это :)
0
ниже код для молодых блохеров, не умеющих использовать стариковские тэги для вставки своих пасхальных штанов :)
Нет-нет, вот только сотен нерелевантных, зато тормозящих страницу плееров от ютуба нам тут и не хватало.
0
  • avatar
  • Vga
  • 30 сентября 2017, 15:13
жертва 90-х?
[url=http://5cm.ru/view/i7/NAq1.jpg][img]http://i7.5cm.ru/t/NAq1.jpg[/img][/url]
хотя и тогда и графика была и gif-анимашки и видео… но модемы на 2400 бит/секунду… 14400 роботикс… но только во вложении MIME.
Первопричину тормоза надо искать в своём компе… у меня релевантность не тормозит :)
0
0
О, первая интересная картинка за все время.
0
  • avatar
  • Vga
  • 30 сентября 2017, 17:36
при желании можно узнать чем старички занимались вместо варкрафтов
yadi.sk/d/EyXgDdE83NMYkw
хотя и на Думу и на Кваку время находили… потом Думали Дважды и Квакали Дважды…
0
Накупят себе айдевятых в SMP и думают потом, что у всех такие машины!
0
  • avatar
  • Vga
  • 30 сентября 2017, 17:24
у меня есть лёгкий бук с сенсорным экраном… но в нём не приживаются дополнительные 4 ГБ оперативки…
поэтому нагружаю спину 16-ю тяжёлыми гигабайтами :)
0
Молодец, похвастался.
0
нет бы посочуствовал… а он хваставство…

это констатация необходимости иметь минимум 32 гигабайта оперативки
Hardware Recommendation
Computer
As of SIMATIC Filed PG M5 Advanced (or comparable PC) Processor Intel® Core™ i5-6440EQ (up to 3.4 GHz)
RAM 16 GB or more (32 GB for large projects)
0
Не вижу повода для сочувствия. Хром жрет оперативку ничуть не хуже. А ты предлагаешь еще видосиков в страничку добавить.
0
Меня гугл сегодня в Поиск не пустил… мол с моей сети ведётся пропаганда против СРУ-ЦРУ :)
Ты там с Хромом поосторожнее :)
Используй Яндекс :)
0
Браузер Яндекс — это примерно как монитор «Интеграл».
0
Это просто браузер на ОТКРЫТОМ движке хромиум. Таковы реалии глобализации и XXI века — не только фирмА (филиал АНБ) из страны золотого миллиарда может паразитировать на чужом коде за_бисплатна.

Кстати, Я-браузер более юзверь-фриендли — многое уже сразу ис_каропки: защищ.режим на многих местных платежных и банковских ресурсах, джентельменский набор дополнений уже предустановлен (остаётся только их включить), чтение фб2, епуб, пдф и мс офис файлов.
0
Это просто браузер на ОТКРЫТОМ движке хромиум.
Ну да. Хромиум — готовый браузер, только иконку налепи да своих сервисов насуй. Что яндекс и делает.
Гугл свой хром из хромиума по ровно такому же рецепту делает, но есть нюанс: сам хромиум гугл и пишет.
0
У него 900 авторов, некоторые из которых целые компании или организации, т.е. по факту их несколько тысяч. Сейчас трудно присвоить что-то чужое, тем более, когда своих наработок и спецов просто нет. Вот и берут что-то чужое, но открытое и допиливают. Хромиум был сделан на основе открытого движка webkit, который в свою очередь был сделан на чужих готовых, но открытых технологиях.
0
У него 900 авторов
Что никак не меняет того факта, что основная часть кода написана гуглом и что это гугловский проект. И если гугл считает, что надо убрать окошко «выберите любимый поисковик» при первом запуске — то оно исчезает из хромиума, а если яндекс — то только из стрингов.
Движок да, движок сперва пилили в KDE, потом в Apple. Но вебкит — это всего лишь часть хромиума.
Сейчас трудно присвоить что-то чужое
А никто и не присваивает. Даже интеграл. Они просто честно взяли ОЕМ-партию моников. Вопрос в том, можно ли после этого говорить, что я.б написан яндексом, а моник собран интегралом?
0
не умеющих использовать стариковские тэги для вставки своих пасхальных штанов
Все должно быть сделано просто и со вкусом, это я тебе, как «литератор», говорю. Кто-то нажмет на ссылку правой кнопкой и откроет в новой вкладке, кто-то не захочет ее открывать. Должна присутствовать интрига. Но гадить топик отвратительными лепехами ютубовского плеера без всякого юмора и даже смысла — могЕшь здесь только ты. То же самое касается и твоих безвкусных картинок — скриншотов с экрана ТВОЕГО компа.
+1
кто то написал под неё программу и мне на это не пришлось тратить время… спасибо старичкам за это :)
Угу. Только писали этот софт вовсе не старички. Но это так, к слову.
0
Цикл то был не просто for, а for next.
И в чем разница?
0
  • avatar
  • Vga
  • 30 сентября 2017, 05:50
я вообще-то говорил про ОПЕРАТОР FOR.
Поверьте, на бейсике я достаточно писал программ, чтобы запомнить его основной цикл.
если уж о цикле, то нужно вспомнить TO и STEP.
0
Там и цикл типа while был, ЕМНИП (или loop, который без условия — не помню уже). Но там не было нормальных функций и не было составных операторов. Из-за этого GOTO там необходим. Но вот в С он нужен чуть реже чем никогда.
0
  • avatar
  • Vga
  • 30 сентября 2017, 05:50
Не только goto. Еще глобальные переменные и полное отсутствие декомпозиции. И еще так, по мелочи есть.
0
  • avatar
  • Vga
  • 30 сентября 2017, 05:45
Vga, спасибо, с учетом ваших совершенно справедливых замечаний немного причесал код уйдя от goto. Если мне не изменяет склероз While -а не было в стандартном спектрумовском бейсике он появился в расширениях мега и лазер бейсиках, но это в общем не важно :-)
0
Да, точно. И LOOP там тоже нет. Только GO TO, только хардкор!
0
Ну, так чуть лучше, ага, но все равно стоило бы причесать. И немного побить по функциям.
В ардуиновском коде тоже есть что причесать. Прежде всего, переменную b совершенно незачем делать глобальной. Более того, здесь она даже не нужна:
void loop() {
  if (Serial.available() > 0)
  {
    switch((char)Serial.read())
    {
      case '1':
        digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
        Serial.print("OK - 1\n");
        break;
      case '0':
        digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
        Serial.print("OK - 0\n");
    }
  }
  delay(20);                       // wait
}
0
Спасибо, поменял код в статейке на ваш, с соответствующим комментарием.
goto это еще было ничего, вот когда в этот несчастный бейсик стали запихивать блоки машинного кода, из программ supercode или прогонять его через компилятор blast — тут уже пошла полная веселуха. Потом правда появились нормальные ассемблеры и можно было забыть обо всем этом безобразии. Ладно, я немного отвлекся. Мужики ( дам тут пока не видел ), есть интересное предложение — сейчас у нас тут есть базовая тестовая программа для проверки связи компа и ардуины. Есть интересная идея — к этой проге понацеплять кода на стороне компа выполняющие такие же функции как сикательный код этой статьи. Набор языков не ограничен python, perl, bash, lazarus, все что угодно ( желательно под Linux ). Могу написать что-нибудь страшное на c++ и processing-е из серии не делайте так дети никогда ( если никто другой не возьмется ) Естественно все ваши наработки будут размещены в этой статье вместе с вашими именами. Получится очень полезная статейка по работе с ардуиной, в случае успеха обязуюсь залить ее на wiki ALT Linux — а, да и здесь она будет неплохо находится гуглом. Дело в том что с подобной информацией в рунете очень и очень плохо. В общем подумайте — серьезных кодеров тут хватает, время много не займет, а польза будет ощутимая.
0
с соответствующим комментарием.
Э-э, я его не писал, я его только немного причесал!
есть интересное предложение
Что-то из этой стены текста я ни разу не понял смысла предложения.
0
1) У нас есть прога залитая в arduino — как раз этот причесанный вариант
2) Все желающие пишут проги на любых языках ( под Linux-ом ) которые зажигают, гасят светодиод и печатают ответ присылаемой ардуиной.
( на processing-е я уже накарябал, только надо убить немного времени на ее на причесывание )
3) Выкладываем сюда и добавляем в статью — получается достаточно полезный материал для ардуинистов — линуксоидов.
0
Как и обещал, добавил в статью processing.
0
Код на нем куда приличнее, чем на С. Что лишний раз показывает преимущества С++ с внятной (и адекватной использующему ее программеру) библиотекой.
0
Угу, только на самом деле processing основан на Java. Вообще, работать с ним начинающим ардуинистам проще, IDE для них практически родное ( arduino IDE, отпочковался от proctssing-а заменив яву на си ), так же как в ардуине — куча встроенных примеров и библиотек, есть пара книжек переведенных на русский. На С++ тоже напишу, там кстати код действительно проще чем на С получается.
0
Угу, только на самом деле processing основан на Java.
А, да, точно. Это ардуино на С++. Хотя в рамках приведенного кода разницы между жабой и плюсами почти нет.
0
Добавил на C++, как обычно в стиле " не делайте так дети никогда ".
Если не будет желающих написать что-то в этом роде на bash, python или perl больше ничего добавлять в эту статейку не буду.
0
От всего С++ там только cin/cout юзается.
0
Точно, от плюсов там только cin/cout, они как раз и облегчают эту возню с портом ( по сравнению с предыдущем кодом на чистом C ).
0
Упростил код на C выкинув getchar, вроде уже не так страшно.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.