Всем привет. Вот, изваял приборчик, измеряет Вашу реакцию. Вспыхнула надпись "----", как увидел, жми Кнопку.
Покажет время от вспышки до нажатия. Нужен Arduino Nano, LED-Дисплей 4 разрядный цифровой 7 сегментов+точка,
резистор 10кОм, Кнопка. Работает! Легко повторить, азартная вещь, народ соревнуется кто быстрей. Стандартные результаты типа 0,198-0,220, рекорды 0,165 ! Левая рука медленней правой. А в сост.алкоголь.опь. вообще
зашкаливает за пол-секунды. Выводы делаем сами. За точность прибора не ручаюсь, но стабильность работы гарантирую.
// Arduino Nano. ТАЙМЕР для измерения Вашей реакции. Как только высвечиваются тире "----",
//сразу жмем Кнопку, тире гаснут, на дисплее время между вспышкой тире и нажатием кнопки
//в Сек и их долях. Так можно численно до миллисекунд оценить Вашу реакцию.
//Полный интервал 10с, точность 1мс, сам гаснет и измеряет снова циклически.
//Азартная игрушка. Кто быстрей..
// СХЕМА: Дисплей-LED красный, 4 разр, 8сегментов(вкл.ДесятТочку dp), ОбщАнод, управление
//сегментами по-минусу.
//Сегменты abcdefg -> D2-D8, dp-> D9, катоды Разрядов RZ1-RZ4 -> D10-D13. (RZ1 младший, справа)
// Кнопка от A6 к GND, резюк 10кОм от A6 к +5V.
int GASH(int x){PORTB = B11111111;}// функция гашения всех разрядов дисплея
//образы Цифр 0-9 тире, дес.точка. Общий Анод, сегменты и разряды управл.минусом
int CIF0(int x){PORTB = B11111111; PORTD = B00000000; digitalWrite(8, HIGH); return x;}// cif 0
int CIF1(int x){PORTB = B11111111; PORTD = B11100100; digitalWrite(8, HIGH); return x;}// cif 1
int CIF2(int x){PORTB = B11111111; PORTD = B10010000; digitalWrite(8, LOW); return x;}// cif 2
int CIF3(int x){PORTB = B11111111; PORTD = B11000000; digitalWrite(8, LOW); return x;}// cif 3
int CIF4(int x){PORTB = B11111111; PORTD = B01100100; digitalWrite(8, LOW); return x;}// cif 4
int CIF5(int x){PORTB = B11111111; PORTD = B01001000; digitalWrite(8, LOW); return x;}// cif 5
int CIF6(int x){PORTB = B11111111; PORTD = B00001000; digitalWrite(8, LOW); return x;}// cif 6
int CIF7(int x){PORTB = B11111111; PORTD = B11100000; digitalWrite(8, HIGH); return x;}// cif 7
int CIF8(int x){PORTB = B11111111; PORTD = B00000000; digitalWrite(8, LOW); return x;}// cif 8
int CIF9(int x){PORTB = B11111111; PORTD = B01000000; digitalWrite(8, LOW); return x;}// cif 9
int CIFtire(int x){PORTB = B11111111; PORTD = B11111100; digitalWrite(8, LOW); return x;}// cif tire - тире "-"
int CIFdp(int x){PORTB = B11111111; PORTD = B11111100; digitalWrite(9, LOW); return x;}// cif DP - точка десят.
int tim=2;
int x; int y; int a; int b;//пустые переменные для вызова Подпрограмм-Функций
int kn; //kn - Кнопка подключ на порт А6, резист 10кОм 5В, нажал - масса на А6
int R; int i; int j;
int RZ4=13; int RZ3=12; int RZ2=11; int RZ1=10;// - разряды дисплея. R13-старший, слева.
int R4;int R3;int R2;int R1;// хран времени счета в сек, сек/10, сек/100, сек/1000.
//
int SIMB(int a){ //сопоставляет числу R его образ CIF.. и светит на Дисплее
if (R==0){y=CIF0(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==1){y=CIF1(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==2){y=CIF2(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==3){y=CIF3(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==4){y=CIF4(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==5){y=CIF5(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==6){y=CIF6(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==7){y=CIF7(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==8){y=CIF8(x); digitalWrite(RZ4-i, LOW); delay (tim);}
if (R==9){y=CIF9(x); digitalWrite(RZ4-i, LOW); delay (tim);}; return a;
}
void setup() {
//port D: 7 6 5 4 3 2 1 0 - номера порта D
//PORTB=B f e d c b a Rx Tx - сегменты a-f
//PORTD=B 1 1 R4 R3 R2 R1 . g - сегменты d,дес тчк "."
//port D: 13 12 11 10 9 8 - номера порта D
//настройка портов D, B
DDRD=DDRD | B11111100;// D7-D2 выходы, Rx,Tx не трогаем
DDRB=DDRB | B00111111;// B7,B6 не трогаем, B5-B0 выходы
// Serial.begin(9600); // Serial.println(...); -рудимент для контроля в процессе..
}
void loop() {
start: y=GASH(x); delay(500);
y=CIFtire(x); digitalWrite(RZ4, LOW); digitalWrite(RZ3, LOW); digitalWrite(RZ2, LOW);
digitalWrite(RZ1, LOW); // "----" - старт, начало отсчета времени в мс
MR4: R4=0;
MR3: R3=0;
MR2: R2=0;
MR1: R1=0;
MKN: kn=analogRead(A6); if(kn<500){goto MEND;}//Кноп Нажата, выходим из счета
delayMicroseconds(885);// Кноп Не Нажата, отсчет идет. 885мкс - экспериментально
R1=R1+1; if(R1>9){goto RR2;}
goto MKN;
RR2: R2=R2+1; if(R2>9){goto RR3;}
goto MR1;
RR3: R3=R3+1; if(R3>9){goto RR4;}
goto MR2;
RR4: R4=R4+1; if(R4>9){goto start;}
goto MR3;
MEND: y=GASH(x);//гасим "----"
RASTR: j=250;//регулир.длительность свечения Результата - около 2с
RA2: i=0;
y=CIFdp(x); digitalWrite(RZ4, LOW); delay(3);// десят.точка в левом разряде
R=R4; b=SIMB(a); i=i+1;//
R=R3; b=SIMB(a); i=i+1;
R=R2; b=SIMB(a); i=i+1;
R=R1; b=SIMB(a); i=i+1;
j=j-1; if (j>0){goto RA2;}
y=GASH(x); // гасим паразитные остатки сегментов
delay(1500);//время возврата к СТАРТу
}
Да всё нормально, для первого раза пойдет, но еще пахать и пахать просторы знаний.
Из самых больших минусов - это привязка к тактовой частоте МК. Можно было проще, вывести на экран минусы, считать millis1, потом, при нажатии кнопки, снова считать millis2, вычесть millis1 из millis2 и получить реальное время в мс, которое и вывести на ЛЕДы.
к частоте привязал, goto расставлял, каюсь, я не профи. лепил из того что было. работает, однако, не сбоит, уверен что и не сбойнет. спасибо за критику. вопросы есть.
- intCIF3(intx){PORTB = B11111111; PORTD = B11000000; digitalWrite(8, LOW); returnx;}// cif 3 - так я создаю образ цифры 3, например, остальные аналогично. нельзя ли как то попроще покомпактней? два порта сразу раздражают. в PIC было по-байтно по-портно, там RX TX не было. побитно писать тоже лень, много операторов набегает типа digitalWrite(8, LOW)
-
intSIMB(inta){ //сопоставляет числу R его образ CIF.. и светит на Дисплее
if(R==1){y=CIF1(x); digitalWrite(RZ4-i, LOW); delay (tim);}... и т.д. по другому не смого придумать, тяжеловат и долог алгоритм выведения образа на дисплей. попроще можно, чтоб образ один раз изъялся из CIF0-CIF9 и крутился в коротком цикле без обращения к SIMB(int a) со многими if-ми? на PIC я быстро разобрался ассемблером по-байтно, а здесь что-то не задалося..
- если время мерить millis2-millis1 то огромное двоичное число получается типа B000111010... , как его потом в десятичное переделать, да еще в образы в 4 разряда запихать? готовые подпрограммы перевода одного в другое надо? не потянул..
но я же выкрутился из положения. я такой алгоритм еще на PIC делал
как я понимаю millis по-сути встроенный таймер, да, типа WDT что-то? сильная вещь, надо брать.
- ничего не рисует, дисплей пустой. Компиляция проходит норм, не ругается. Как нарисовать Пиксель, Линию, Прямоуголь., Круг и пр.? Исправьте, пожалуйста, второй скетч.
чего не хватает в скетче, почему не рисует? Библ.вроде подключилась, контроллер 8544 тоже, компиляция выполнена. Рисунков нет. Пожалуйста, доработайте.
Спасибо всем кто ел. А готовить любойможет. ще вопрос. Гружу любой скетч, даже самый простой в Ардуину. Начинается вроде загрузка, даже пишет "Загрузка выполнена". а потом вылетает надпись Оранж.цвета внизу окна компиляции:
avrdude: stk500_getsync(): not in sync: resp=0x00 , в результате ничего никуда не грузнулось, Ардуинка не работает по новозалитому скетчу, а быстро моргает 13-диодом, вот и все. ЧТо это? Поломалсь Ардуинка? Заменить на новую?
Подскажите, как быстро и просто вывести набор 1 и 0 в порты D2-D12 (десять PINов)
одной командой в одну строку. Побитно выводить слишком громоздко ,типа digitalWrite(12, 0),
digjtalWrite(11, 1), ... неудобно.
Одной командой разве можно? Минимум 2. У меня получилось 3. Если взять входы с 3-го по 12й (что-б 10 было) то можно так:
n=1023;// некое число от 0 до 1023 (10 бит), если "0" -на всех выводах "0", если "1023" -то на всех "1"
PORTD= n&B11111000; //биты 0..3 не занимать
n=n>>5;//что-б записать старший байт нужно подвинуть младший
PORTB=n&B00011111; //биты 5..7 не занимать
n=0; //на всякий случай сбросить, ибо там уже не n
Всем привет, учусь работать с Ардуино. Начал с уроков Блюма. Сделал воторой урок, вот только светодиод не меняет яркость, а горит постоянно с одинаковой яркостью. Программа вроде правильная, так как после нажатия кнопки 5 раз, светодиод отключается. Кто-нибудь может объяснить в чем проблема?
Есть желание и необходимость в освоении платформы Arduino. Как минимум научиться и поиграться, как максимум построить установщик SMD компонентов. Со вторым примерно ясно: нужен комплект для 3D принтера, но на Али просят 15К за полный комплект на Mega2560 R3 . К тому же, скорее всего в лоб все собрать не получится. Поэтому вопрос: какой набор взять, чтобы научиться и в случае успеха докупить комплектующие и достич конечной цели?
Это станок, который по программе устанавливает на печатную плату компоненты для поверхностного монтажа, именуемые SMD. Для примера и подражания - простой станок, китаец, TM220A. 2 присоcки, довольно шустрый. Шасси не сложное, похоже на фрезерный станок CNC или 3D принтер. В сети полно видео про него....(Как тут ссылку вставить? Все виснет!).
RX TX на сидят на D0 D1, сегменты лучше подключить далее к D2-D9
ну а лучше через 74hc595, три ноги всего займет
помогите написать скетч, дисплей светит число 06, два старших разряда не светят. сегменты D2-D9, катоды A0-A3. запутался я.
никто не может что ли? спасибо.
Всем привет. Вот, изваял приборчик, измеряет Вашу реакцию. Вспыхнула надпись "----", как увидел, жми Кнопку.
Покажет время от вспышки до нажатия. Нужен Arduino Nano, LED-Дисплей 4 разрядный цифровой 7 сегментов+точка,
резистор 10кОм, Кнопка. Работает! Легко повторить, азартная вещь, народ соревнуется кто быстрей. Стандартные результаты типа 0,198-0,220, рекорды 0,165 ! Левая рука медленней правой. А в сост.алкоголь.опь. вообще
зашкаливает за пол-секунды. Выводы делаем сами. За точность прибора не ручаюсь, но стабильность работы гарантирую.
Да уж, учиться, учиться и учиться.. :)
Да всё нормально, для первого раза пойдет, но еще пахать и пахать просторы знаний.
Из самых больших минусов - это привязка к тактовой частоте МК. Можно было проще, вывести на экран минусы, считать millis1, потом, при нажатии кнопки, снова считать millis2, вычесть millis1 из millis2 и получить реальное время в мс, которое и вывести на ЛЕДы.
Но не ленив - это точно. :)
Удачи! И новых открытий!
имхо самый большой минус - использование goto
имхо самый большой минус - использование goto
Что такое goto по сравнению с привязкой к частоте работы МК, да ерунда.
Думаю будет уместно на эту тему оставить здесь ссылку http://pic24.ru/doku.php/osa/articles/encoding_without_errors#
Рекомендую почитать всем. Про goto там тоже есть. Со статьёй согласен на 99.9%
к частоте привязал, goto расставлял, каюсь, я не профи. лепил из того что было. работает, однако, не сбоит, уверен что и не сбойнет. спасибо за критику. вопросы есть.
-
int
CIF3(
int
x){PORTB = B11111111; PORTD = B11000000; digitalWrite(8, LOW);
return
x;}
// cif 3 - так я создаю образ цифры 3, например, остальные аналогично. нельзя ли как то попроще покомпактней? два порта сразу раздражают. в PIC было по-байтно по-портно, там RX TX не было. побитно писать тоже лень, много операторов набегает типа
digitalWrite(8, LOW)int
SIMB(
int
a){
//сопоставляет числу R его образ CIF.. и светит на Дисплее
32
if
(R==0){y=CIF0(x); digitalWrite(RZ4-i, LOW); delay (tim);}
3
if
(R==1){y=CIF1(x); digitalWrite(RZ4-i, LOW); delay (tim);}... и т.д. по другому не смого придумать, тяжеловат и долог алгоритм выведения образа на дисплей. попроще можно, чтоб образ один раз изъялся из CIF0-CIF9 и крутился в коротком цикле без обращения к SIMB(int a) со многими if-ми? на PIC я быстро разобрался ассемблером по-байтно, а здесь что-то не задалося..
- если время мерить millis2-millis1 то огромное двоичное число получается типа B000111010... , как его потом в десятичное переделать, да еще в образы в 4 разряда запихать? готовые подпрограммы перевода одного в другое надо? не потянул..
но я же выкрутился из положения. я такой алгоритм еще на PIC делал
как я понимаю millis по-сути встроенный таймер, да, типа WDT что-то? сильная вещь, надо брать.
Всем привет. Есть дисплей ЖК Nokia3310 на контроллере PCD8544. Скетч первый работает, пишет " Time, sec "секунды считает .
#include <PCD8544.h>
static PCD8544 lcd;
void setup() { lcd.begin(84, 48);
}
void loop() {
static int cnt = 0;
lcd.setCursor(0, 0); lcd.print(" Time, sec");
lcd.setCursor(1, 2); lcd.print(millis()/1000);
cnt++;
}
В втором скетче ниже подключаю граф.библ. U8glib, а таймер удаляю за ненадобностью, хочу нарисовать графич.примитивы.
#include <PCD8544.h>
#include <U8glib.h>
U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
void setup() {
}
void loop() {
u8g.drawPixel(20, 30);
u8g.drawHLine(5, 10, 20);
u8g.drawBox(5, 10, 20, 10);
}
- ничего не рисует, дисплей пустой. Компиляция проходит норм, не ругается. Как нарисовать Пиксель, Линию, Прямоуголь., Круг и пр.? Исправьте, пожалуйста, второй скетч.
да и русский язык часто переходит в мат :)
я про рисовалку, а не про мат
чего не хватает в скетче, почему не рисует? Библ.вроде подключилась, контроллер 8544 тоже, компиляция выполнена. Рисунков нет. Пожалуйста, доработайте.
Спасибо всем кто ел. А готовить любойможет. ще вопрос. Гружу любой скетч, даже самый простой в Ардуину. Начинается вроде загрузка, даже пишет "Загрузка выполнена". а потом вылетает надпись Оранж.цвета внизу окна компиляции:
avrdude: stk500_getsync(): not in sync: resp=0x00 , в результате ничего никуда не грузнулось, Ардуинка не работает по новозалитому скетчу, а быстро моргает 13-диодом, вот и все. ЧТо это? Поломалсь Ардуинка? Заменить на новую?
http://robocraft.ru/blog/arduino/714.html
http://chingachgook.net/arduino/ispravlyaem-oshibku-avrdude-stk500_getsy...
Подскажите, как быстро и просто вывести набор 1 и 0 в порты D2-D12 (десять PINов)
одной командой в одну строку. Побитно выводить слишком громоздко ,типа digitalWrite(12, 0),
digjtalWrite(11, 1), ... неудобно.
sasa999 ,
http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry
называйте пины пинами , а группу пинов - портом
Одной командой разве можно? Минимум 2. У меня получилось 3. Если взять входы с 3-го по 12й (что-б 10 было) то можно так:
вроде разобрался. точнее говоря получилось. Спасибо!
Всем привет, учусь работать с Ардуино. Начал с уроков Блюма. Сделал воторой урок, вот только светодиод не меняет яркость, а горит постоянно с одинаковой яркостью. Программа вроде правильная, так как после нажатия кнопки 5 раз, светодиод отключается. Кто-нибудь может объяснить в чем проблема?
создайте новую тему - отображающую вопрос, загрузите код.....
http://arduino.ru/forum/obshchii/sozdanie-temy
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
:)
.....потом только - вопросы
Здравствуйте!
Есть желание и необходимость в освоении платформы Arduino. Как минимум научиться и поиграться, как максимум построить установщик SMD компонентов. Со вторым примерно ясно: нужен комплект для 3D принтера, но на Али просят 15К за полный комплект на Mega2560 R3 . К тому же, скорее всего в лоб все собрать не получится. Поэтому вопрос: какой набор взять, чтобы научиться и в случае успеха докупить комплектующие и достич конечной цели?
что такое "установщик SMD компонентов"?
Это станок, который по программе устанавливает на печатную плату компоненты для поверхностного монтажа, именуемые SMD. Для примера и подражания - простой станок, китаец, TM220A. 2 присоcки, довольно шустрый. Шасси не сложное, похоже на фрезерный станок CNC или 3D принтер. В сети полно видео про него....(Как тут ссылку вставить? Все виснет!).