Решил перейти на новую платформу, Arduino Due. Кроме того, не пользуюсь средой разработки Arduino IDE, а пишу на почти чистом C в Atmel Studio 6.2. Ищу библиотеки на всевозможные устройства, датчики и прочее. Кое-что уже есть. Помогите и подскажите. Сам что умею и могу: помогу и подскажу. Развитие моего нового проекта на Arduino Due на нашем городском форуме http://elportal.lipetsk.ru Страничка моего проекта: Здесь
Вариантов полно, тинси, галлелео и тд. Да и не всегда нужна высокая производительность, в 95% случаев хватает Меги и ей подобных Мини. Или программирование и библиотеки Дью так сильно отличаются?
Лучше на ты. Есть реальная цель, даже как минимум 3 1. Самая главная контроль производства напитков 2. Контроль гидропонной установки. 3. Умный дом - есть жилище, над которым можно и нужно экспериментировать. Очень много датчиков и исполнительных устройств. Путь комбинирования нескольких мег уже прошел. На Си очень мало библиотек. Или ардуинские или С++.
Гидропонную делал датчиках на 15, про мини справляется вообще не напрягается. В соседней ветке вот говорят, что считать бутылка на конвейре в пять линий по трем размерам по 6штук в секна каждой можно легко и непринужденно на Uno. Может я и не прав, но Дью по моему для математики, тригонометрии, например 3Д куб без компьютера поддерживать.
Рад буду помощи. У меня тоже написан "Гидромат" для мини Только уже 15 датчиков неактуально Навскидку: Каждый ящик это налив/слив + освещение мало/ много + датчик TDS + датчик уровня = 6 + общие: температура + горячо/холодно, датчик освещенности, влажность и так далее. Берем: помидорчики, огурчики, петрушка, укропчик, лучок. Итого уже больше 30.
Больше всего ножек надо на датчики влажности почвы, я их повесил на одну ножку и включаю по очереди через каскад регистров 595, в теории можно сотнями считывать не увеличивая ног.
В теории можно и нужно ставить контроллеры расширяющие кол-во ног. А вот на практике, мне удобнее купить более мощный камень и не задумываться о делении задачи на много камней и ветвлении через регистры и контроллеры. Кроме того я реализовываю многоуровневую логику, позволяющую менять конфигурацию системы "на лету". Грубо говоря, несколькими кнопками, без перепрошивки добавляя еще один "ящик".
С Due у меня не сложилось, но когда-то давно изучал вопрос скорости работы пинов, на Arduino IDE. Возможно будет полезно, вот код, на ADC не смотрите, тогда я еще о них ни чего не знал. Код (Text): inline void digitalWriteDirect(int pin, boolean val) { if(val) g_APinDescription[pin].pPort -> PIO_SODR = g_APinDescription[pin].ulPin; else g_APinDescription[pin].pPort -> PIO_CODR = g_APinDescription[pin].ulPin; } inline int digitalReadDirect(int pin) { return !!(g_APinDescription[pin].pPort -> PIO_PDSR & g_APinDescription[pin].ulPin); } int pin1 = 44; int pin2 = 43; int pin3 = 42; int pin4 = 41; int pin5 = 40; int pin6 = 39; int pin7 = 38; int pin8 = 37; int pin9 = 36; int pin10 = 35; int pin11 = 34; int pin12 = 33; int pin13 = 32; int pin14 = 31; int pin15 = 30; int pin16 = 29; int pin17 = 28; int pin18 = 27; int pin19 = 26; int pin20 = 25; int pin21 = 24; int pin22 = 23; int pin23 = 22; int pin24 = 49; int pin25 = 48; unsigned long timeCycleOne = 0; unsigned long timeCycle = 0; unsigned long timeCycleMax = 0; unsigned long unsignedLongMax = 4294967295; unsigned long digitalOne = 1; boolean bpin0; boolean bpin1; boolean bpin2; boolean bpin3; boolean bpin4; boolean bpin5; boolean bpin6; boolean bpin7; boolean bpin8; boolean bpin9; int iA0; int iA1; int iA2; int iA3; int iA4; int iA5; int iA6; int iA7; int iA8; int iA9; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(pin1, INPUT); pinMode(pin2, INPUT); pinMode(pin3, INPUT); pinMode(pin4, INPUT); pinMode(pin5, INPUT); pinMode(pin6, INPUT); pinMode(pin7, INPUT); pinMode(pin8, INPUT); pinMode(pin9, INPUT); pinMode(pin10, INPUT); pinMode(pin11, OUTPUT); pinMode(pin12, OUTPUT); pinMode(pin13, OUTPUT); pinMode(pin14, OUTPUT); pinMode(pin15, OUTPUT); pinMode(pin16, OUTPUT); pinMode(pin17, OUTPUT); pinMode(pin18, OUTPUT); pinMode(pin19, OUTPUT); pinMode(pin20, OUTPUT); pinMode(pin21, OUTPUT); pinMode(pin22, OUTPUT); pinMode(pin23, OUTPUT); pinMode(pin24, OUTPUT); pinMode(pin25, OUTPUT); analogReadResolution(12); analogWriteResolution(12); REG_ADC_MR = (REG_ADC_MR & 0xFFF0FFFF) | 0x00020000; Serial.begin(115200); Serial.println("Begin"); } // the loop routine runs over and over again forever: void loop() { timeCycleOne = micros(); // Пустой цикл до 3 /*digitalWriteDirect(pin11, HIGH); // +1 digitalWrite +3 // +1 digitalWriteDirect +1 digitalWriteDirect(pin12, HIGH); // +1 digitalWrite +2 // +1 digitalWriteDirect +0 digitalWriteDirect(pin13, HIGH); // +1 digitalWrite +3 // +1 digitalWriteDirect +0 digitalWriteDirect(pin14, HIGH); digitalWriteDirect(pin15, HIGH); digitalWriteDirect(pin16, HIGH); digitalWriteDirect(pin17, HIGH); digitalWriteDirect(pin18, HIGH); digitalWriteDirect(pin19, HIGH); digitalWriteDirect(pin20, HIGH); digitalWriteDirect(pin21, HIGH); digitalWriteDirect(pin22, HIGH); digitalWriteDirect(pin23, HIGH); digitalWriteDirect(pin24, HIGH); digitalWriteDirect(pin25, HIGH);*/ // 15 digitalWrite + 38 // 15 digitalWriteDirect + 5 /*bpin0 = digitalReadDirect(pin1); // +1 digitalRead +1 // +1 digitalReadDirect +1 bpin1 = digitalReadDirect(pin2); // +1 digitalRead +2 // +1 digitalReadDirect +0 bpin2 = digitalReadDirect(pin3); // +1 digitalRead +0 // +1 digitalReadDirect +1 bpin3 = digitalReadDirect(pin4); bpin4 = digitalReadDirect(pin5); bpin5 = digitalReadDirect(pin6); bpin6 = digitalReadDirect(pin7); bpin7 = digitalReadDirect(pin8); bpin8 = digitalReadDirect(pin9); bpin9 = digitalReadDirect(pin10);*/ // 10 digitalRead + 11 // 10 digitalReadDirect + 7 /*analogWrite(12, 255); // +1 analogWrite +6 analogWrite(11, 255); // +1 analogWrite +6 analogWrite(10, 255); // +1 analogWrite +7 analogWrite(9, 255); analogWrite(8, 255);*/ // 5 analogWrite + 36 iA0 = analogRead(0); // +1 analogRead +39 // +1 analogRead(FASTADC) +4 iA1 = analogRead(1); // +1 analogRead +4 // +1 analogRead(FASTADC) +4 iA2 = analogRead(2); // +1 analogRead +4 // +1 analogRead(FASTADC) +4 iA3 = analogRead(3); // +1 analogRead +4 // +1 analogRead(FASTADC) +4 iA4 = analogRead(4); iA5 = analogRead(5); iA6 = analogRead(6); iA7 = analogRead(7); iA8 = analogRead(8); iA9 = analogRead(9); // 10 analogRead + 76 // 10 analogRead(FASTADC) + 41 // 164 общее подсчет // 162 общее показания // 127 общее подсчет // 125 общее показания + digitalWriteDirect + digitalReadDirect // 92 общее подсчет // 89 общее показания + digitalWriteDirect + digitalReadDirect + FASTADC timeCycle = GetCycleTime(timeCycleOne, micros()); if (timeCycle > timeCycleMax) { timeCycleMax = timeCycle; Serial.println(timeCycleMax); } } unsigned long resultGetCycleTime = 0; unsigned long GetCycleTime(unsigned long BeginTime, unsigned long EndTime) { if (EndTime<BeginTime) { resultGetCycleTime = unsignedLongMax - BeginTime + EndTime + digitalOne; } else { resultGetCycleTime = EndTime - BeginTime; } return resultGetCycleTime; } Тестирование проходило на не оригинальной Due. Сама Due, мне не понравилась, причин было масса, не большое кол-во статей и материалов по данному чипу. Не большая линейка отладочных плат на Atmel Sam3, которых на тот момент можно было купить в РФ и т.д. Хотя возможно, сказалось мое отсутствие опыта, когда изучал данную плату. Поэтому остановился на STM32F, для тех задач, где AVR не хватает, в частности на STM32F4. Огромное количество статей, материалов по контролерам STM32. Производительность, большое кол-во периферии (зависит от чипа). Множество библиотек, нормальная отладка. Большое количество отладочных плат в РФ и их не большая стоимость. Это лишь мнение любителя.
Я даже не любитель, а только начинающий Прыгать на другую платформу особо не хочу, только если будет большая разница в показателе цена/функции. Так уж случайно получилось, что даже и не думал об STM, Rapsberry PI. А теперь уже наверное и поздно. За код спасибо. Материалов по Due действительно нет. Поэтому и хочу в одну кучу, на своей страничке все собрать .