SLAVE
probíhá rychle dle cyklu arduina
Kód: Vybrat vše
if (Serial.available() > 0) // dokud jsou nějaká data přijatá v buferu proběhne tato podmínka
{
state = Serial.read(); // vyčte jeden "byte" - pokud pošleš "50" - vyčte v prvním kole jen "5" podle mne
// až když podmínka proběhne podruhé tak vyčte tu "0"
AuraPWM = state * 10;
if (state != OldState) {
OldMillis = millis();
OldState = state;
}
}
Jaká to máš vlastně Arduina ?
1) pokud odešleš "50" tato podmínka probíhá rychle za sebou, nejprve přijmeš "5" tak uděláš PWM = 50 (5*10) a v dalším cyklu hned přijmeš "0" PWM = 0 (5*0) - to ani nepostřehneš
2) nemáš to Arduino připojené při testování k PC doufám ? Arduina mívají jenom jeden sériový port a pokud po nahrání jsi připojen a sleduješ co ti Arduino posílá, tak to nemůže komunikovat i s BT modulem - musel by jsi použít knihovnu <SoftwareSerial.h>
Hoď na každý řádek komentář co to dělá - nechápu některé myšlenkové pochody, třeba co má dělat toto ?
Kód: Vybrat vše
if (millis() - OldMillis > 500) {
OldMillis = millis();
if (state - OldState == 0) {
state = 0;
}
OldState = state;
}
if (Serial.available() > 0)
{ .....
- jednou za 500ms
- pokud je právě vyčtená hodnota stejná jako předchozí - nastav právě vyčtenou hodnotu na 0
- předchozí hodnotu nastav na 0
celkem nesmysl
- smyčka s vyčítáním pak funguje rychle každý cyklus
*********************************************************************************************************************
Já bych to stavěl jinak:
- jednou za 500ms udělej vše toto
- - vyčti bufer z BT - jeden znak (odesílej jen čísla 0-9)
- - porovnej zda je jiný než naposled přijatý,
- - - pokud ano změń PWM + ulož ho jako naposledy přijatý
- - - pokud ne tak nic
- - konec IF vyčtení c BT
- konec IF 500ms podmínky
1) ODSAZUJ text kodu dle podmínek
2) piš komentáře co který řádek dělá - kvůli nám , aby se vědělo co zamýšlíš