2000 рублей Ардуино Мега 6 светодиодов 1 кнопка SD карта Есть небольшой код для считывания с SD карты тестового файла. по значением тестового файла зажигаются светодиоды на время в соответствии со значением. Обработка (чтение) происходит построчно. Структура тестового файла: (это 7 столбцов со значениями). 1 200 300 0 200 150 50 2 0 200 150 200 350 50 3 20 170 20 0 150 500 Первый столбец - идентификатор строки. Второй - шестой столбец - значение времени на которое зажигаются светодиоды в млсек. Каждое значение обрабатывается по нажатию кнопки. Это все реализовано. Все работает. Что нужно доработать. 1. Выводить в порт значение идентификатора строки при обработке очередной строки. 2. Подключить весы №1 через ацепешку hx711. 3. Подключить весы №2 через hx711. 4. Подключить серву. 5. Перед обработкой строки проверить значение с весов №2, которое должно быть не ниже заданного значения в коде (сделать, что б можно было менять в коде). Если значение больше, то продолжать, если меньше, то вывести в порт "ERROR2". Продолжение по нажатию кнопки, естественно опять с проверкой значения весов2. 5. Заменить обработку значений второго столбца (это был ранее светодиод№1, но это не важно) на следующий алгоритм: Включить серву на определенный угол (задается в коде). Выключить серву (вернуть на начальное состояние), только после того, как значение весов №1 достигнет заданного значения (значение в текстовом файле второй столбец). Далее продолжать обработку .следующих значений светодиодов, так как сейчас реализовано. Вывести в порт "окончание обработки строки", соответственно обработка следующей строки по нажатию кнопки. PS Весы взяты для примера... главное ацпешки подкинуть и обработку значений с них... Вот девственный код.... Код (C++): #include <SPI.h> #include <SD.h> #define UART_BAUDRATE 9600 #define FILE_NAME "COLOR.TXT" #define SD_CS 10 //выбор SD #define KEY 9 //кнопка на землю #define LED1 4 #define LED2 5 #define LED3 6 #define LED4 7 #define LED5 8 #define LED6 11 File file; const uint8_t led[] = { LED1, LED2, LED3, LED4, LED5, LED6 }; void setup() { Serial.begin(UART_BAUDRATE); pinMode(KEY, INPUT_PULLUP); //подтяжка for (uint8_t i = 0; i < sizeof(led); i++) pinMode(led[i], OUTPUT); //светодиоды Serial.print("Initializing SD card... "); if (!SD.begin(SD_CS)) { //карта Serial.println("failed! Stop."); while (1); } Serial.println("ok."); file = SD.open(FILE_NAME); //открываем файл if (file) { Serial.println(); Serial.println("Reading " FILE_NAME ":"); char buff[6]; char *str = buff; while (file.available()) { //читаем в буфер static uint8_t i, nr; *str = file.read(); if (*str++ < '0') { str = buff; uint16_t t = atoi(buff); //преобразуем в цифру if (!i++) { nr = t; while (digitalRead(KEY)); //ожидаем кнопку } else { //светодиоды digitalWrite(led[i - 2], HIGH); while (t--) delay(1); digitalWrite(led[i - 2], LOW); if (i >= sizeof(led) + 1) { //конец строки i = 0; file.read(); Serial.print("Обработан "); Serial.println(nr); } } } } file.close(); //закрываем файл Serial.println("end"); } else Serial.println("error opening " FILE_NAME); } void loop() { }
наверно дело в ценнике. Вы, похоже, думаете, что "доработать код" - это проще, чем написать его с нуля. Ведь код-то уже есть... А исполнители считают наоборот. Вместо того чтоб спроектировать и написать код по ТЗ - исполнителю придется разобраться в вашем скетче, найти и исправить все ошибки - и только потом приступить к выполнению задания.
Что ж ты будешь делать....Не везет, так, не везет.... А там 8 марта не за горизонтом... Останусь я чую... без кода...
Могу сделать всё заново(весь скетч) , но через неделю . Самый сложный вопрос , это проверка скетча , кто его будет проверять? Если я буду проверять , то мне нужны комплектующие и дополнительно 2000р. .
Это точно ... обычно такая история заканчивается перепроверкой проверенного. В принципе можно проверить в Протеусе. Были сомнения с SD картой. Но вчера я их развеял ... Создал образ карты с записанным туда текстовым файлом , вроде текст читает в терминал Протеуса.