Доброго времени суток. Задумал купить Arduino, пугает одно, изучение нового языка. Думаю из темы частично ясно, о чём хочу спросить. Существуют ли библиотеки позволяющие писать скетчи непосредственно на C# без участия стандартного языка Arduin`ы? З.Ы Заранее спасибо и прошу прощения если написал не в тот раздел....
Для начала платы, совместимые с ардуиновской периферией, которые изначально рассчитаны на разработку на C#: http://amperka.ru/product/netduino-2 http://amperka.ru/product/netduino-plus-2 Правда я с ними не работал (и не собираюсь), потому о подводных камнях ничего не скажу. Разве замечу: следует учитывать, что платы рассчитаны на 3.3 В логику. Что же до программирования на C# обычной ардуины, то возникает вопрос, возможно ли вообще вместить в куцые флэш и ОЗУ МК ардуины программу на C#? Все-таки у этого языка есть особенности, требующие дополнительного расхода ОЗУ (а в случае ардуины и флэша, поскольку там хранится программа), ибо всегда порождается управляемый код.
Дело в том, что бинарник на основе C# -- это байт-код, который требует CLR (Common Language Runtime). Здесь можно провести аналогию с Java, где скомпилированные классы то же являются байт-кодом и требуют JVM (Java Virtual Machine). Из чего следует, что платы на базе AVR не подойдут. Хотя, если найдете реализацию CLR для AVR, которая сможет уместиться в память выбранного Вами контроллера, то....
А разве С шарп не есть развитие С? С чего бы это "ардуиновский язык" (С++) требовал изучения работающими на щарпе?
Спасибо всем за ответы. А про C# и С/С++, У них конечно много общего, но сами по себе, они разные у них даже логика программирования отличается, не говоря уже о логике построения кода, ключевых словах и операторах.
Логика программирования на C# срели прочего как раз определяется машинерией, поррждающей управляемый код, решающий многие вопросы за программиста и скрывающий от программиста некоторые аспекты, в частности речь идет о некоторых деталях работы с указателями. Программирование же на классическом C/C++ (бвз расширений, порождающих управляемый код) предполагает полный контроль за поведением порграммы, включая выделение и освобождение памяти.
А почему бы и не выучить? Я к примеру за несколько часов управился. Не думаю, что на C# можно сделать код таким же простым. Я его не учил, но попробуйте написать программку для терменвокса! На обычном Arduino код будет таким: Код (Text): // даём имена для пинов с пьезопищалкой (англ. buzzer) и фото- // резистором (англ. Light Dependent Resistor или просто LDR) #define BUZZER_PIN 3 #define LDR_PIN A0 void setup() { pinMode(BUZZER_PIN, OUTPUT); } void loop() { int val, frequency; val = analogRead(LDR_PIN); frequency = map(val, 0, 1023, 3500, 4500); tone(BUZZER_PIN, frequency, 20); } } А на NetDuino (C#): Код (Text): using System; using System.Net; using System.Net.Sockets; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace Theremin { public class Program { public static void Main() { AnalogInput ldr = new AnalogInput(AnalogChannels.ANALOG_PIN_A0); PWM buzzer = new PWM(PWMChannels.PWM_PIN_D3, 3000, 0.5, false); OutputPort[] leds = { new OutputPort(Pins.GPIO_PIN_D9, false), new OutputPort(Pins.GPIO_PIN_D8, false), new OutputPort(Pins.GPIO_PIN_D10, false), new OutputPort(Pins.GPIO_PIN_D7, false), new OutputPort(Pins.GPIO_PIN_D11, false), new OutputPort(Pins.GPIO_PIN_D6, false), new OutputPort(Pins.GPIO_PIN_D12, false), new OutputPort(Pins.GPIO_PIN_D5, false), new OutputPort(Pins.GPIO_PIN_D13, false), new OutputPort(Pins.GPIO_PIN_D4, false) }; buzzer.Start(); while (true) { double darkness = ldr.Read(); buzzer.Frequency = 1000 + 3000 * darkness; int segmentCount = (int)System.Math.Round(10.0 * darkness); for (int i = 0; i < leds.Length; ++i) leds[i].Write(i <= segmentCount); } } } } Мой вывод этому: Язык Arduino (НЕ C++!!!) интуитивно понятный и занимает меньше времени в написании. Да и статей и ответов на Ваши вопросы будет больше, если попробовать этот язык!
Не существует в природе такой вещи как "язык Ардуино". То, что вы этими словами называете - это библиотека "Wiring", написанная на С++.