Тут буфер уже не нужен, кстати ИОН посмотри как подключен, вход PC1Scroodge писал(а):И почему ты вот эту строчку закомментировал? //adc_bufer = ADCH; // Считываем ADC
Светодиод и кнопка
Модератор: boogyman
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Светодиод и кнопка
Re: Светодиод и кнопка
Почему-то не могу добавить коментарий в уроках уже второй день. Спроршу здесь.
Подскажите как сделать.
Задача кода такая:
при нажатии кнопки (№1 PD0) с фиксацией плавно загорается светодиод (работаеи ШИМ, с этим я разобрался),
при этом если нажать кратковременно другую кнопку (№2 PD1) - светодиод должен потухнуть (можно просто уйти в ноль без ШИМ, типа экстренного выключения), а если нажать эту же кнопку (№2 PD1) опять кратковременно, тогда светодиод должен опять загорется (возобновится работа).
Здесь нужно использовать прерывания или что-то подобное описанное в занятии 2?
Часть моего кода (Attiny 2313, но это не важно):
Подскажите как сделать.
Задача кода такая:
при нажатии кнопки (№1 PD0) с фиксацией плавно загорается светодиод (работаеи ШИМ, с этим я разобрался),
при этом если нажать кратковременно другую кнопку (№2 PD1) - светодиод должен потухнуть (можно просто уйти в ноль без ШИМ, типа экстренного выключения), а если нажать эту же кнопку (№2 PD1) опять кратковременно, тогда светодиод должен опять загорется (возобновится работа).
Здесь нужно использовать прерывания или что-то подобное описанное в занятии 2?
Часть моего кода (Attiny 2313, но это не важно):
Код: Выделить всё
while(1)
{
if((PIND&(1 << PD0)) == 0) //если включен выключатель
{if (i < 255)
{i=i+1; // Плавное включение подсветки пола салона до 100%
OCR1A=i;
_delay_ms(4);
}
}
else
if (i>0)
{i=i-1; // плавно тужнет светодиод
OCR1A=i;
_delay_ms(4);
}
}
Re: Светодиод и кнопка
ПОДСКАЖИТЕ как сделать вычисление основных математических операций (сложение вычитание умножение деление возведение в степень). Стенд - калькулятор.
Матрица кнопок 4x4.
вот так матрица скажем
+123
-456
*789
/^0=
Не знаю как на с++ записать эти вычисления чтобы производились
Матрица кнопок 4x4.
вот так матрица скажем
+123
-456
*789
/^0=
Не знаю как на с++ записать эти вычисления чтобы производились
- RowNiz
- Новичок
- Сообщения: 3
- Зарегистрирован: 14 окт 2015, 17:54
- Откуда: Russia
- Контактная информация:
Светодиод и кнопка
Доброе время суток. Требуется помощь, в решение проблемы.
Проблема в том что необходима сделать чтоб про нажатии кнопки загорался светодиод
а при втором нажатии этой же кнопки тух. Но что я толка не придумывал не получается. Помогите пожалуйста.
Проблема в том что необходима сделать чтоб про нажатии кнопки загорался светодиод
а при втором нажатии этой же кнопки тух. Но что я толка не придумывал не получается. Помогите пожалуйста.
Re: Светодиод и кнопка
Добрый день!
Смотрел урок 1 - рис 2.
Вопрос: Как сделать удержание кнопок в произвольном порядке, т.е. нажимаешь соответствующую кнопку горит Led.При повторном нажатии - гаснет.
И так со всеми кнопками независимо включать и выключать светодиоды.
Как фиксировать одну кнопку я понял исходя из урока №2.
А вот как зафиксировать больше 2х не знаю. (голова распухла)
Прошу помощи.
Спасибо
Смотрел урок 1 - рис 2.
Вопрос: Как сделать удержание кнопок в произвольном порядке, т.е. нажимаешь соответствующую кнопку горит Led.При повторном нажатии - гаснет.
И так со всеми кнопками независимо включать и выключать светодиоды.
Как фиксировать одну кнопку я понял исходя из урока №2.
А вот как зафиксировать больше 2х не знаю. (голова распухла)
Прошу помощи.
Спасибо
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Светодиод и кнопка
Код: Выделить всё
if((PIND&(1 << PD0)) == 0) // если кнопка нажата
{
while((PIND&(1 << PD0)) == 0){} // ждем отпускания кнопки
_delay_ms(50);
PORTB ^= (1 << PB0); // переключаем светодиод
}
if((PIND&(1 << PD1)) == 0) // если кнопка нажата
{
while((PIND&(1 << PD1)) == 0){} // ждем отпускания кнопки
_delay_ms(50);
PORTB ^= (1 << PB1); // переключаем светодиод
}
Re: Светодиод и кнопка
Огромное спасибо, проверил, код работает. Добавляя этот блок 4 раза в бесконечный цикл while(1) и меняя в каждом блоке от PD0 до PD3 всё заработало идеально и независимо. Сам я тоже решил эту проблему, Но думаю, что потребление тока в моем случае гораздо выше.AntonChip писал(а):Код: Выделить всё
if((PIND&(1 << PD0)) == 0) // если кнопка нажата { while((PIND&(1 << PD0)) == 0){} // ждем отпускания кнопки _delay_ms(50); PORTB ^= (1 << PB0); // переключаем светодиод } if((PIND&(1 << PD1)) == 0) // если кнопка нажата { while((PIND&(1 << PD1)) == 0){} // ждем отпускания кнопки _delay_ms(50); PORTB ^= (1 << PB1); // переключаем светодиод }
Вот мой код:
Код: Выделить всё
/*
* Gcc_switch 1led.c
*
* Created: 10.05.2017 14:24:41
* Author : maxvest
*/
#define F_CPU 1000000
#include <avr/io.h>
#include <util/delay.h>
/* оъбявление переменных flag... для временного хранения
прикосновения-снятия пальца с контактов сенсоров т.е. 0 или 1*/
unsigned char flag0=0, flag1=0, flag2=0, flag3=0;
/* объявление переменных val... для временного хранения
количества нажатия- отжатия кнопок для исключения дребезга контакта - 30 измерений*/
unsigned char val0=0, val1=0, val2=0, val3=0;
/* блок переключения пинов PORTB*/
void swPINB0()
{
PORTB ^= (1<<0);
PORTB ^= (1<<4);
}
void swPINB1()
{
PORTB ^= (1<<1);
PORTB ^= (1<<5);
}
void swPINB2()
{
PORTB ^= (1<<2);
PORTB ^= (1<<6);
}
void swPINB3()
{
PORTB ^= (1<<3);
PORTB ^= (1<<7);
}
/* блок проверки прикосновения-снятия пальца с контактов сенсоров т.е. 0 или 1*/
void button0()
{
if (!(PIND & (1<<0))) // проверка на 0 те. нажата то условие сразу за условием (см схему в Протеусе)
{
if ( flag0 == 0) // фиксирование НЕ нажатие, если ДА то >> 1.1
{
if (val0 == 30) // проверка количества опроса (30 раз в сек)
{ flag0 = 1; //1.1
val0 = 0;
return;
}
val0++;
}
else val0 = 0;
}
else
{
if ( flag0 == 1) // фиксирование нажатия, если нет то count =0
{
if (val0==30)
{ flag0=0;
val0=0;
swPINB0();
}
val0 ++;
}
else val0=0;
}
}
void button1()
{
if (!(PIND & (1<<1))) // проверка на 0 те. нажата то условие сразу за условием (см схему в Протеусе)
{
if ( flag1 == 0) // фиксирование НЕ нажатия, если ДА то >> 1.1
{
if (val1 == 30) // проверка количества опроса (30 раз в сек)
{ flag1 = 1; //1.1
val1 = 0;
return;
}
val1 ++;
}
else val1 = 0;
}
else
{
if ( flag1 == 1) // фиксирование нажатия, если нет то count =0
{
if (val1 == 30)
{ flag1 = 0;
val1 = 0;
swPINB1();
}
val1 ++;
}
else val1=0;
}
}
void button2()
{
if (!(PIND & (1<<2))) // проверка на 0 те.- если нажата то условие сразу за условием
{
if ( flag2 == 0) // фиксирование НЕ нажатие, если ДА то >> 1.1
{
if (val2 == 30) // проверка количества опроса (30 раз в сек)
{ flag2 = 1; //1.1
val2 = 0;
return;
}
val2++;
}
else val2 = 0;
}
else
{
if ( flag2 == 1) // фиксирование нажатия, если нет то count =0
{
if (val2==30)
{ flag2=0;
val2=0;
swPINB2();
}
val2 ++;
}
else val2=0;
}
}
void button3()
{
if (!(PIND & (1<<3))) // проверка на 0 те. если нажата то условие сразу за условием
{
if ( flag3 == 0) // фиксирование НЕ нажатия, если ДА то >> 1.1
{
if (val3 == 30) // проверка количества опроса (30 раз в сек)
{ flag3 = 1; //1.1
val3 = 0;
return;
}
val3++;
}
else val3 = 0;
}
else
{
if ( flag3 == 1) // зафиксирование нажатия, если нет то count =0
{
if (val3==30)
{ flag3=0;
val3=0;
swPINB3();
}
val3 ++;
}
else val3=0;
}
}
int main(void)
{
DDRB = 0xFF; // настройка PORTB на выход
PORTB = 0xF0; // устанавливаем на этих выходах 1111 0000(управляющий младший нимбл 0, на индикаторы -старший нимбл 1)
DDRD = 0x0F; // настройка ножки PD0, PD1, PD2, PD3 на вход
PORTD |= (1<<0)|(1<<1)|(1<<2)|(1<<3); // подтягиваем к этим входах внутренние PULL_rezistor'ы
while(1)
{
button0();
button1();
button2();
button3();
}
}
_
PS. А вот как вставить со своего компа схему протеус не нашел. Жаль хотел поделиться схемой сенсорного выключателя.
Re: Светодиод и кнопка
к посту #47
[img
][/img]
Здесь при выключенном свете горят синие точечные диоды в качестве ночной подсветки, При прикосновении к датчику зажигается свет, ну например в кухне. Вокруг кнопки вспыхивает голубой или какой-либо другой ореол света, а точечный индикатор гаснет. При выключении, происходит с точность на оборот.
[img
][/img]
Здесь при выключенном свете горят синие точечные диоды в качестве ночной подсветки, При прикосновении к датчику зажигается свет, ну например в кухне. Вокруг кнопки вспыхивает голубой или какой-либо другой ореол света, а точечный индикатор гаснет. При выключении, происходит с точность на оборот.