здравствуйте , прошу помощи , как прописать кнопку сброса одного канала х,
//**********************//
[details="Спойлер"]
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <U8glib.h>
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=717&download=1
U8GLIB_ST7920_128X64 u8g(13,11, 10, U8G_PIN_NONE); // настройка пинов
//***** My settings *****//
int Skrew_X_Pitch = 400; // Шаг винта X, в сотках, 1.0mm = 100
int Enc_X_Line = 360; // Энкодер X, линий/оборот
float Skrew_X_Corr = 1.0000; // Коррекция неточности X винта, 1.0000 = 0.0000%
int Skrew_Y_Pitch = 400; // Шаг винта Y, в сотках, 1.5mm = 150
int Enc_Y_Line = 100; // Энкодер Y, линий/оборот
float Skrew_Y_Corr = 1.0000; // Коррекция неточности Y винта, 1.0000 = 0.0000%
int Skrew_Z_Pitch = 400; // Шаг винта Y, в сотках, 1.5mm = 150
int Enc_Z_Line = 100; // Энкодер Y, линий/оборот
float Skrew_Z_Corr = 1.0000; // Коррекция неточности Y винта, 1.0000 = 0.0000%
// ***** Scale *****
#define Port_D_Init() DDRD=B00000011 // D2,D3 вход ch_X_A/ch_Y_A, D6,D7 вход SCALE DATA, D4 вход ,
#define Read_X_A() (PIND & B00000100) // PD2 энкодеры
#define Read_X_B() (PIND & B01000000) // PD6
#define Read_Y_A() (PIND & B00001000) // PD3
#define Read_Y_B() (PIND & B10000000) // PD7
#define Read_Z_A() (PIND & B00010000) // PD4
#define Read_Z_B() (PIND & B00100000) // PD5
int Enc_X_Tick = Enc_X_Line * 2;
//
long Scale_val_x = 0;
//
long value_x_array[16];
byte x = 0;
long sum_x = 0;
//
//long ABS_button_shift_x = 0;
//long INC_button_shift_x = 0;
long button_shift_x = 0;
long zero_shift_x = 0;
long ABS_zero_shift_x = 0;
long INC_zero_shift_x = 0;
long tmp_value_x = 0;
long print_value_x = 0;
/////////////////////////////////////////////
int Enc_Y_Tick = Enc_Y_Line * 2;
//
long Scale_val_y = 0;
//
long value_y_array[16];
byte y = 0;
long sum_y = 0;
//
//long ABS_button_shift_y = 0;
//long INC_button_shift_y = 0;
long button_shift_y = 0;
long zero_shift_y = 0;
long ABS_zero_shift_y = 0;
long INC_zero_shift_y = 0;
long tmp_value_y = 0;
long print_value_y = 0;
/////////////////////////////////////////////
int Enc_Z_Tick = Enc_Z_Line * 2;
//
long Scale_val_z = 0;
//
long value_z_array[16];
byte z = 0;
long sum_z = 0;
const int button = 14;
int val = 0;
byte state = 0; // переменная состояния
//
//long ABS_button_shift_z = 0;
//long INC_button_shift_z = 0;
long button_shift_z = 0;
long zero_shift_z = 0;
long ABS_zero_shift_z = 0;
long INC_zero_shift_z = 0;
long tmp_value_z = 0;
long print_value_z = 0;
int b = 1;
// ***** Mode *****
//enum Mode
//{
//Mode_DRO,
//Mode_Set_x,
//Mode_Set_y,
// Mode_Set_z
//};
//byte Mode = Mode_DRO;
//boolean mode_ABS_x = true;
//boolean mode_ABS_y = true;
//boolean mode_ABS_z = true;
char sign_x = ' ';
char sign_y = ' ';
char sign_z = ' ';
byte Blink_Timer = 0;
boolean Blink = false;
byte SetMode_Timer = 0;
void setup() {
pinMode( button, INPUT );
cli();
Port_D_Init(); // порт подключения энкодеров
DDRB=B11111110;
// Button_Init();
PORTD=B11111100;
PORTC=B00001111;
PORTB=B00000001; // порт подключения дисплея
EIMSK = (1 << INT0) | (1 << INT1); // Enable INT0,INT1
EICRA = (1 << ISC00) | (1 << ISC10); // INT0,INT1 Any logical change
PCMSK2 = (1 << PCINT20); // set PCINT20 to trigger an interrupt on state change
PCICR = (1 << PCIE0) | (1 << PCIE2); // set PCIE0 to enable PCMSK2 scan
sei();
}
void draw(){
u8g.setRot180();
u8g.setFont(rus6x10);
u8g.drawStr(30, 10, "КООРДИНАТЫ");
u8g.setFont(rus6x10);
u8g.drawStr(5, 25, "ОСЬ Х=");
u8g.setPrintPos( 45, 25);
u8g.print(sign_x);
u8g.setPrintPos( 55, 25);
u8g.println(print_value_x);
u8g.setFont(rus6x10);
u8g.drawStr(5, 35, "ОСЬ Y=");
u8g.setPrintPos( 45, 25);
u8g.print(sign_y);
u8g.setPrintPos( 55, 35);
u8g.println(print_value_y);
u8g.setFont(rus6x10);
u8g.drawStr(5, 45, "ОСЬ Z=");
u8g.setPrintPos( 45, 25);
u8g.print(sign_z);
u8g.setFont(rus6x10);
u8g.setPrintPos( 55, 45);
u8g.println(print_value_z);
}
void loop(){
// ***** x-Axis ***************************************************************
// if (mode_ABS_x == true) {zero_shift_x = ABS_zero_shift_x; button_shift_x = ABS_button_shift_x;}
// else {zero_shift_x = INC_zero_shift_x; button_shift_x = INC_button_shift_x;}
if (++x > 15) {x = 0;}
sum_x = sum_x - value_x_array[x];
value_x_array[x] = Scale_val_x;
sum_x = sum_x + Scale_val_x;
tmp_value_x = (long)((float)((sum_x / 16) - zero_shift_x) * Skrew_X_Pitch / Enc_X_Tick / Skrew_X_Corr + button_shift_x);
if (tmp_value_x < 0) { sign_x = '-'; }
else { sign_x = ' '; }
print_value_x = abs(tmp_value_x);
// ***** y-Axis ******************************************************************
// if (mode_ABS_y == true) {zero_shift_y = ABS_zero_shift_y; button_shift_y = ABS_button_shift_y;}
// else {zero_shift_y = INC_zero_shift_y; button_shift_y = INC_button_shift_y;}
if (++y > 15) {y = 0;}
sum_y = sum_y - value_y_array[y];
value_y_array[y] = Scale_val_y;
sum_y = sum_y + Scale_val_y;
tmp_value_y = (long)((float)((sum_y / 16) - zero_shift_y) * Skrew_Y_Pitch / Enc_Y_Tick / Skrew_Y_Corr + button_shift_y);
if (tmp_value_y < 0) { sign_y = '-'; }
else { sign_y = ' '; }
print_value_y = abs(tmp_value_y);
// ***** z-Axis ******************************************************************
// if (mode_ABS_z == true) {zero_shift_z = ABS_zero_shift_z; button_shift_z = ABS_button_shift_z;}
// else {zero_shift_z = INC_zero_shift_z; button_shift_z = INC_button_shift_z;}
if (++z > 15) {z = 0;}
sum_z = sum_z - value_z_array[z];
value_z_array[z] = Scale_val_z;
sum_z = sum_z + Scale_val_z;
tmp_value_z = (long)((float)((sum_z / 16) - zero_shift_z) * Skrew_Z_Pitch / Enc_Z_Tick / Skrew_Z_Corr + button_shift_z);
if (tmp_value_z < 0) { sign_z = '-'; }
else { sign_z = ' '; }
print_value_z = abs(tmp_value_z);
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
}
ISR(INT0_vect)
{
if (!Read_X_A()) // если канал А=0
{
if (!Read_X_B()) Scale_val_x++; // если канал B=0
else Scale_val_x--; // если канал B=1
}
else // если канал А=1
{
if (!Read_X_B()) Scale_val_x--; // если канал B=0
else Scale_val_x++; // если канал B=1
}
}
ISR(INT1_vect)
{
if (!Read_Y_A())
{
if (!Read_Y_B()) Scale_val_y++;
else Scale_val_y--;
}
else
{
if (!Read_Y_B()) Scale_val_y--;
else Scale_val_y++;
}
}
ISR(PCINT2_vect)
{
if (!Read_Z_A())
{
if (!Read_Z_B()) Scale_val_z++;
else Scale_val_z--;
}
else
{
if (!Read_Z_B()) Scale_val_z--;
else Scale_val_z++;
}
}
[/details]