Ви не увійшли.
google://dwin arduino library
їх дофіга
можна не гратися в реверс-інжинірінг
ЗІ
Щось форум глючить. Якісь повідомлення показує, якісь ні..
Сорян, був неправий.
Ну тоді читати https://arduino.ua/prod2423-sim800c-v2-modyl-gsm-85090018001900-bluetooth - там цілий епос.
https://arduino.ua/prod1665-gsm-modyl-na-sim800l
Звертаємо увагу, що у модуля напруга логічного високого рівня становить 2.8В, що вимагає застосування перетворювача логічних рівнів при використанні модему з контролером Arduino.
Перевищення вхідної напруги інтерфейсу UART призведе до псування модуля SIM800!
https://arduino.ua/prod2165-preobrazovatel-logicheskih-yrovnei-dvynapravlennii врятує наступним разом.
Не вірю.
+1
Але цікаво було б побачити цю історію успіху
танунафіг..
Дешевше переписати з нуля.
Стороння людина в простиню з digitalread/digitalwrite без труда не врюхає.
while(1) - можна спокійно викинути, функція loop() сама перезапускається.
FlexiTimer2 - хз що це і як воно працює, підозрюю що якась ліба з таймером. Без вивчення readme таке крпще не використовувати.
TubeDisplay4Bit - судячи з назви, щось пов"язане з дисплеєм. Але всередині там щось з секундами робиться.
В пєчьку! (ц)
ну я ж код написав..
if (digitalRead(INPUT1)==LOW)
uint8_t new_value = digitalRead(somePin);
if (new_value != prev_value)
{
prev_value = new_value;
do_some_shit()uint8_t new_value = digitalRead(somePin);
if (new_value != prev_value)
{
prev_value = new_value;
if (new_value == LOW)
need_start = true;
};
}
if (need_start) {need_start = false;...}
Ну я в же один раз пропонував використовувати не низький рівень, а перехід з високого рівня в низький.
Взагалі бажано спочатку намалювати на папірці якісь графіки-квадратики-стрілки, а вже потім хапатись кодити. Бо по перше у вас вийде код, який складно читати. По друге, вам буде складно вносити туди зміни.
Намалюйте на папірці діаграму входного сигналу і все вам стане ясно
uint_8t prev_value;
void setup()
{
prev_value = digitalRead(somePin);
}
void loop()
{
uint8_t new_value = digitalRead(somePin);
if (new_value != prev_value)
{
prev_value = new_value;
do_some_shit();
}
}
Десь так.
Якщо треба щоб воно реагувало не на будь яку зміну сигналу, а лише на ввімкнення - добавте ще один if, я впевнений, все вийде
Якщо треба вміти ловити сигнал під час роботи 5 секундної функції, значить треба робити інакше. На перериваннях, наприклад.
Дивитись код всередині архіву неспортивно Акби воно на гітхабі було, з синтаксисом..
Спробую вгадати.
Ви в циклі міряєте логічний рівень на якомусь піні. Якщо там 1 - запускаєте якийсь процес довжиною 5 сек. Коли процес закінчується - там знову все ще 1.
Рішення таке: треба порвінювати рівень який зараз з попереднім рівнем; якщо вони відрізняються, тоді щось робити.
Ну, дешева китайська електроніка це завжди трошки лотерея
2s charger module
https://vi.aliexpress.com/item/1005004987094908.html наприклад.
Якщо необхідно щоб від usb - беріть з usb
Якщо потрібно щоб з балансуванням - https://vi.aliexpress.com/item/1005006570395304.html
Візьміть готовий модуль з usb на вході і 2 акумуляторами.
8В для серви забагато до речі.
І для мотора такого теж.
ds3231 вертає неправильний час чи ваш годинник показує неправильний час?
Як взагалі написати змінна А дорівнюе третьому біту змінноі D ?
По ардуінівськи:
є спеціальні функції
https://doc.arduino.ua/ru/prog/BitRead
По avr-івськи
Є макрос
#define _BV(bit) (1 << (bit))
десь так тоді
// якщо вам конче потрібно отримати саме 1 або 0
uint8_t A = D & _BV(bit) ? 1 : 0;
// якщо вас задовольняє те що змінна просто !=0
uint8_t A = D & _BV(bit);
А то можна і так, якщо хочеться байти економити
#define BIT0 1
#define BIT1 (1<<1)
#define BIT2 (1<<2)
#define BIT3 (1<<3)
#define BIT4 (1<<4)
#define BIT5 (1<<5)
#define BIT6 (1<<6)
#define BIT7 (1<<7)
uint8_t A = D & BIT7;
Можна ще придумати кілька способів
Не треба робити бітову магію там де вона не потрібна. Вам, напевно, потрібно виконати якийсь ногодриг з пінами порту? Ну так зробіть функцію з промовною назвою, rotate_left() наприклад, і всередині поставте одиниці і нулі як вам потрібно. Не ускладнюйте.
Заміть 1000 слів - дивіться як зроблено в Arduino
НЯП всередині ISR присідання з атомарністю не потрібні, бо переривання забороняється автоматично.
#if defined(TIM0_OVF_vect)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}
А ззовні - читайте коментар до коду
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read millis_timer_millis or we might get an
// inconsistent value (e.g. in the middle of a write to millis_timer_millis)
cli();
m = millis_timer_millis;
SREG = oldSREG;
return m;
}
ISR(PCINT2_vect) {
unsigned char result = r.process();
Так робити стрьомно. ISR повинно виконуватись максимально швидко, а тут викликається якийсь метод з ліби енкодера, хз що він робитиме. Якщо всередині Serial.print, буде ой.
Як правило, регулярні дії (process(), tick(), ..) викликають в loop - там воно точно спрацює як треба.
Якщо в ISR ви щось робите з глобальною змінною, яка більша ніж uint8_t - на цей час треба забороняти переривання. Приблизно так:
ISR()
..
cli();
do_some_sheet
sei();
loop()
..
cli();
do_some_sheet
sei();
Можливо, варто переосмислити постановку задачі. Може не серва потрібна а тупий соленоїд? Є напруга - одне положення, немає напруги - інше положення..
https://stackoverflow.com/questions/71579926/how-to-use-micropython-classes-in-separate-files
ЗІ Щось форум якось дивно працює. Походу сєкрєт настройкі phpbb утєрян
. Тільки я би для зручності перевернув полярність діодів
В уже спаяному кубі це не просто
Не бажаєте схему показати?
Вам потрібно, щоб струм через світлодіоди був стабільний, без залежності скільки їх ввімкнено? тоді на кожен led в групі - окремий резистор (16 шт). І порахуйте який потрібен струм, може mosfet лишній.
Якщо 1 резистор на групу з 16 led - в залежності від кількості ввімкнених led яскравість буде мінятися.Можна спробувати скомпенсувати часом експозиції - підібрати резистор, щоб нормально світились всі 16, а коли менше - зменшувати час, але це буде багато веселих дослідів
Алгоритми DSP вже працюють?
Це тільки ідея..
https://gridbots.com/bat.html
Я радий за індійців