Помогите новичку с доработкой кода

djsan
Offline
Зарегистрирован: 11.06.2015

Доброе время суток всем

У меня возникла такая проблема

Есть некий скетч, который работает примерно так

С Bluetooth приходит какой-либо символ к примеру буква латинского алфавита (a или x) не важно и при получение этого символа Ардуино начинает писать сообщения в Serial имитируя клавиатуру ввода команд с помощью Keyboard.println все это происходит через цикл выбора Case

Я с толкнулся с такой проблемой что дошёл до определённого количества вводимых символов в Serial с помощью Keyboard.println  начинаю этот предел превышать то есть дописываю скетч чтоб он еще вводил какие либо команды в serial, после чего компилирую скетч программирую Ардуино, во время этого процесса среда arduino не выдает не каких ошибок ну как будто все хорошо все правильно, но после чего у меня сразу устройства становится как не опознанным объектом подключённым к USB и при этом девайс не работает пока его не ребутнешь с помощью контакта reset и во время когда происходит перезагрузка Ардуино если успеется перезолить другой рабочий скетч к примеру мигание 13 pin-ом то реанимировать Ардуино удается

Вопрос таков с чем это связано и как это решить?

 я не слишком силен в программирование, помогите пожалуйста решить эту проблему

Сначала подумал, что велик объем обще суммарного количество водимых сообщений

Но после взял удалил лишние вводимые команды до того момента чтобы при компиляции девайс работал высчитал методом тыка, так что бы последний символ вводится и все при этом предел, если дописать еще одну букву, то работать не будет, затем дописал скетч сразу ниже этого рабочего скетча, так же вводятся сообщения в serial, но только не при получении символов с Bluetooth, а при замыкании контактов на Ардуино, то есть значит еще можно водить сообщения для ввода в serial

И тут я подумал может дело в самом цикле выбора Case? Что есть там какой-то счетчик и который доходит до предела то там как-то обнуляется, ну в общем не в курсе и без понятия, ну я так думаю если было бы так-то, наверное, разработчики предусмотрели бы чтоб в среде IDE как-то бы это он сообщал

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

часть кода 

case 'R':
  
	  Keyboard.println("mkdir mnt/cf/update/log");
      delay(1000);
	  //Процесс копирование//
      Keyboard.println("cp -R mnt/cf/log/messages mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/messages.0 mnt/cf/update/log");
      delay(2000);
      Keyboard.println("cp -R mnt/cf/log/auth.log.1 mnt/cf/update/log");
      delay(2000);
      Keyboard.println("cp -R mnt/cf/log/controller_poll.log.1 mnt/cf/update/log");
      delay(2000);
	   Keyboard.println("cp -R mnt/cf/log/cron.log.1 mnt/cf/update/log");
      delay(2000);
       Keyboard.println("cp -R mnt/cf/log/datahub.log.1 mnt/cf/update/log");
      delay(2000);
      Keyboard.println("cp -R mnt/cf/log/db_server.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/diesel_conf.log.1 mnt/cf/update/log");
      delay(2000);
      Keyboard.println("cp -R mnt/cf/log/dropbear.log.1 mnt/cf/update/log");
      delay(2000);
 
       Keyboard.println("cp -R mnt/cf/log/engine_poll.log.1 mnt/cf/update/log");
	  delay(4000);
      Keyboard.println("cp -R mnt/cf/log/fuel_poll.log.1 mnt/cf/update/log");
      delay(15000);
      Keyboard.println("cp -R mnt/cf/log/generator_poll.log.1 mnt/cf/update/log");
      delay(2000);
      Keyboard.println("cp -R mnt/cf/log/gps_poll.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/gpsd.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/init.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/kern.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/lig_processing.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/nfsd.log.1 mnt/cf/update/log");
	  delay(2000);
      Keyboard.println("cp -R mnt/cf/log/ntpd.log.1 mnt/cf/update/log");
      delay(2000);

    //Процесс копирование логов завершен//
      Keyboard.println("exit");
	  delay(2000);

      Keyboard.println("mkdir /mnt/update/evilino");
      delay(2000);
      Keyboard.println("mount /dev/sdb1 /mnt/update/evilino");
      delay(1000);
     
      Keyboard.println("cp -R mnt/update/log mnt/update/evilino/logs");
	  delay(90000);
      Keyboard.println("cd mnt/update/evilino/logs/log");
	  delay(1000);
      Keyboard.println("ls");
	  delay(3000);
      Keyboard.println("cd");
	  delay(2000);
      Keyboard.println("rm -rf mnt/update/log");
	  delay(4000);
      Keyboard.println("umount /mnt/update/evilino");
	  delay(15000);
      Keyboard.println("rm -rf mnt/update/evilino");
	  delay(3000);
   
   
   Keyboard.releaseAll();
      break;
      
      

мне необходимо дописать еще код в три раза привышающий этот но из за данной проблемы не могу 

Arhat109
Offline
Зарегистрирован: 26.05.2015

Когда компиляете скетч, там должна выходить инфа о количестве занятой памяти под программу и данные. Сопоставьте ОБЕ цифирьки с имеющейся памятью в вашей машинке... думаю вопрос отпадет.

Arhat109
Offline
Зарегистрирован: 26.05.2015

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

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

maksim пишет:

http://playground.arduino.cc/Learning/Memory

Serial.println(F("This string will be stored in flash memory"));

djsan
Offline
Зарегистрирован: 11.06.2015

Спасибо, что откликнулись

Maksim огромное вам спасибо вы мне очень помогли проверил, пока что работает, но весь код еще не дописал только на 14 сообщений, сделал как тестовый вариант, надеюсь, что все что мне нужно все влезет

Arhat109 ПО поводу скриптов, это было бы прекрасно и на много проще, к сожалению, это что-то типа бортового компьютера и нарушать архитектуру директорий и файлов посторонними файлами, ну если вкратце, то просто нельзя так как это собьет всю систему, так как там каждое действия мониторится и сигнализируется