Более сложные моменты проверяются отладкой в железе с выводом контрольной информации на терминалку IDE.
Более сложные моменты проверяются отладкой в железе с выводом контрольной информации на терминалку IDE.
я бы так не сказал, разница гораздо больше, одной FLASH-памяти 256К против 32К - это несущественно?! 4 штуки 16-битных таймера, 4 USART - это мелочи?!BOB51 писал(а):Разница между мега 2560 и мегой 328 только в наличии "полных портов" на 8 бит
Код: Выделить всё
/*
*---- шаблон главного файла проекта ----*
*------------ TEST -------------------*
* test.ino
*/
//---------------------------------------------------------
/*
* раздел подключаемых файлов, обьявлений
* и размещения конструкторов классов
*/
//#include "test.h" // файл глобальных дефайнов текущего проекта
#define LED 7 // control led active 1
#define knop 14 // кнопка active 0
#define skstm 35 // (antizvon) значение антидребезговой паузы в mS
#define cnt1_data 15 // значение кванта для указателя(вектора) в 1015mS
volatile byte SnDat = 1; // буфер предыдущего значения кнопки
volatile int cnt1 = 0; // счетчик досчета "условных единиц" для вектора исполняемой программы
volatile byte ptrr = 0; // указатель(вектор) исполнительной программы
volatile byte count = 0; // счетчик количества коротких нажатий
// обнуляется "длинным удержанием"
volatile byte flag1 = 0; // флаг "зафиксировано изменение статуса кнопки"
volatile byte flag2 = 0; // флаг "изменение статуса кнопки подтверждено"
volatile byte en_cnt1 = 0; // флаг "счет интервала разрешен"
// инициалзация выводов МК и генератора сетки опроса сенсоров/кнопок
void skan_init();
//---------------------------------------------------------
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
skan_init();
}
//---------------------------------------------------------
void loop() {
// put your main code here, to run repeatedly:
if(flag2)
{
flag2=0;
// если кнопка стала равна 0
if (!SnDat)
{
ptrr = 0; // сброс вектора в 0
cnt1 = 0; en_cnt1 = 1; // активировать счет
}
// если удерживается статус 0
//продолжить счет
// если кнопка стала равна 1
else{
en_cnt1 = 0; // остановить счет
// отработать исполнитель согласно вектора
switch (ptrr) {
case 0:
//do something when var equals 1 фальстарт(0-525mS)
break;
case 1 ... 5:
//do something when var equals 2 интервал номер 1 (525 - 2625mS)
digitalWrite(LED, HIGH); count++;
Serial.println(count, DEC);
break;
case 6 ... 15:
//do something when var equals 3 интервал номер 2 (3150 - 7875mS)
digitalWrite(LED, LOW); count = 0;
break;
case 16 ... 25:
//do something when var equals 6 аварийный сброс по "залипанию" (8400- 13125mS)
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}
}
// если удерживается статус 1
// ничего не делать
}
}
//---------------------------------------------------------
/*
* "подвал" с описанием функций
*/
// инициалзация выводов МК и генератора сетки опроса сенсоров/кнопок
void skan_init()
{
digitalWrite(knop, HIGH);
pinMode(knop, INPUT_PULLUP);
digitalWrite(LED, LOW);
pinMode(LED, OUTPUT);
cli(); //noInterrupts();
OCR0A = 127; TIMSK0 |= (1<<OCIE0A);
sei(); //interrupts();
}
/* генератор сетки опроса сенсоров/кнопок (1mS)
* и самого опроса ЛВК
* по выходу при подтвержденной комбинации
* flag2=1, SnDat = значению кнопки,
* skstm = время удержания комбинации в mS*skstm (50mS)
*/
ISR(TIMER0_COMPA_vect)
{
static byte Cnt_A=0; // счетчик досчета для антидребезговой паузы в uS
static byte sn_tmp0; // буфер текущего значения кнопки
Cnt_A++;
if (Cnt_A == skstm)
{
Cnt_A=0;
sn_tmp0 = digitalRead(knop); // читаем порт в буфер текущего значения
// действия при совпадении с предыдущим значением
if (SnDat == sn_tmp0)
{
if (flag1)
{
flag1=0; // антидребезг отработан, значение подтверждено
flag2=1; // запрос на обработку в основном цикле программы
// сбрасывается в основном цикле программы
}
}
// действия при несовпадении с предыдущим значением
else {flag1=1; SnDat = sn_tmp0;}
// вычисление вектора по количеству переполнений счетчика длительности
// cnt1 если данное действие резрешено основной программой
if (en_cnt1)
{
cnt1++;
if (cnt1 == cnt1_data){cnt1=0; ptrr++;}
}
}
}
//---------------------------------------------------------
//-------------конец файла/end of file---------------------
А бесперебойник использовать ? Хотя у меня самого нету. замучился аккумуляторы менять.(пока мне местные приключения с электроотключениями еще системный блок окончательно не добили).
Код: Выделить всё
#include <stdio.h>
#include <conio.h>
int MinMax ( int a, int b, int &Max )
{
if ( a > b ) { Max = a; return b; }
else { Max = b; return a; }
}
main()
{
int N, M, min, max;
printf ( "\nВведите 2 целых числа ");
scanf ( "%d%d", &N, &M );
min = MinMax ( N, M, max ); // вызов функции
printf ( "Наименьшее из них %d, наибольшее — %d\n", min, max );
getch();
}