Веб-тренажер arduino
- Войдите на сайт для отправки комментариев
Здравствуйте! Не так давно появилась идея создания он-лайн тренажера для Arduino. Я веду лабораторные занятия в универсистете по курсу "Организация обмена информацией". В этом курсе активно используется Arduino в качестве удобной платформы для разработки и тестирования алгоритмов. Хотелось бы дать возможность заочникам, вечерникам проверять свои программы без доступа к плате. Пока готов прототип программы:

Симулятор целиком написан на JavaScript на основе интерпретатора http://math.chapman.edu/~jipsen/js/ и графической библиотеки Raphael http://raphaeljs.com Алгоритм работы следующий:
1. Пользователь вводит текст программы в левую колонку
2. Нажимает кнопку Запуск. При этом текст из языка Arduino конвертируется в чистый JavaScript и интерпретируется.
3. Результаты смотрит как в консольном окне, так и на самом изображении платы.
Также существует возможность проверять результаты выполнения программы (Check-Box Проверка). После выполнения программы пользователем выдается сообщение о выполнении задачи или провале. Сейчас реализованы три задачи: управление светодиодом, устранение дребезга кнопки, считывание матричной клавиатуры. Хотелось бы узнать мнение общества на подобный проект и есть ли желающие поучаствовать в нем.
Мысль хорошая, но лучше ограничить эмуляцию десятком стандартных эффектов "для начинающих". Кому будет интересно - лучше сразу переходить к железу, а чтобы понять это - достаточно того десятка эффектов.
Вы правы Андрей, что нужно ограничиться базовыми функциями для начинающих, однако когда у вас в группе человек 15-20, надо всех обеспечить компьютерами, Arduino, макетными платами с датчиками, тут вопрос становиться трудно решаем. Целью тренажера должно быть освоение алгоритмов обработки данных с использованием Arduino, а потом закрепление знаний на промежуточных "сложных" лабораторных работах со всеми необходимыми датчиками. Вот пример устранения дребезка кнопки:
Пример кода взят из книги Arduino CoockBook. Вместо того, чтобы студент долго разбирался на реальном устройстве с дребезгом, можно сам алгоритм его устранения отработать автономно.
Значит теперь студенты смогут делать лабораторные прямо из дома? отлаживать алгоритмы и все такое? здоооорово ))
К сожалению поучаствовать готов только в качестве бета-тестера ;)
Спасибо за такую инициативу, постараюсь выложить бета версию на какой-нибудь бесплатный хостинг, чтобы можно было "пощупать". Скину ссылку
Прототип выложен, конечно там много не доделано, так что не судите строго: http://kafedra11.16mb.com/ArduinoTest/
Думаю как аккуратнее добавить электрические схемы заданий. Из текущих возможностей:
1) Цифровой ввод/вывод
2) Вывод на консоль через методы класса Serial (print,println)
3) задержки, стандартные математические функции, массивы
4) пользовательские функции
Ответ для задания 2:
Ответ для задания 3:
С точки зрения логики программирования - последний if надо заменять на esle. :) Иначе какая-то мысль незаконченная получается.
Все условия в примере развязаны, хотя более корректный вариант, конечно:
if ( (digitalRead(0)==HIGH) && (digitalRead(5)==HIGH) ) digitalWrite(9,HIGH); else if ( (digitalRead(1)==HIGH) && (digitalRead(6)==HIGH) ) digitalWrite(10,HIGH); else if ( (digitalRead(2)==HIGH) && (digitalRead(7)==HIGH) ) digitalWrite(11,HIGH); else if ( (digitalRead(3)==HIGH) && (digitalRead(8)==HIGH) ) digitalWrite(12,HIGH); else { //Необработанная комбинация };Еще вариант, с массивом:
const int led_total = 4; //Размер массива const int led_start_index = 9; const int led_map[led_total][2] = { {0, 5}, {1, 6}, {2, 7}, {3, 8} }; void setup() { int i; for (i=0;i<8;i++) pinMode(i,INPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); } void loop() { for (int i=0;i<led_total;i++) { if ( (digitalRead(led_map[i][0])==HIGH) && (digitalRead(led_map[i][1])==HIGH) ) { digitalWrite(led_start_index + i,HIGH); } } }