Официальный сайт компании Arduino по адресу arduino.cc
Ultrasonic и attiny13 вмещение скетча
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 25/05/2013 - 00:16
В общем суть такая. Нужно воткнуть скетч в тиньку. При определеннорасстоянии от объекта на несколько милисекунд зажеч светодиод.
void setup() { DDRB = 0b10111; } void loop() { PORTB|=1<<PINB3; delayMicroseconds(10); PORTB&=~(1<<PINB3); uint8_t D1 = pulseIn(2, HIGH, 20000)/29.0/2; if (D1<40&&D1>1){ PORTB|=1<<PINB4; delay(50); } else{ PORTB&=~(1<<PINB4); } }
Код конечно не рабочий, набрасал на скорую руку. Но суть в том, что функция pulseIn занимает огромное место и скетчик вроде очень примитивный получается больше 1024 Бт. Чем заменить?
Ну естественно digitalRead'ы и digitalWrite'ы замените.
if(digitalRead(2)) = if(PINB&(1<<PINB2))
1430 Бт не влазиет(
Но без этой математической операции не катит :(
Как это не обойтись без деления?
Поменяйте
на
И, кстати, вообще уберите D1
Как это не обойтись без деления?
Поменяйте
на
И, кстати, вообще уберите D1
Вопрос решился очень просто. Заменил 29.0 на просто 29 и скетчик похудел в более чем 2 раза. Все работает. Всем спасибо!
Извините, а можно для начинающих обозначить что куда подключать? Или указать на литературу, что поможет разобраться с данным обозначением портов?)
Выяснил непонятное явление. Если написать данный алгоритм с оптимизацией, т.е. без
void
loop
(), а с int main() и while (1), то ultrasonic почему-то не работает!
KrokGord, дык немудрено. Не цепляется в данном случае весь ардуиновский обвес.