Ahojte, tak jsem aplikaci předělal na komunikaci mezi dvěma Arduiny: Master a Slave.
Master odečítá rychlost z reed senzoru, slave má tyto hodnoty přijímat a ovládat motor pomocí PWM. Čím rychleji se magnet točí kolem jazýčkového relé na reed senzoru, tím rychleji by měl běžet motor na slave. Pokud reed senzor nesnímá žádnou rychlost, pwm by mělo být 0%.
Bohužel tato aplikace mi zatím funguje tak, že na pwm výstupu se objevují zcela náhodné hodnoty a i když neprojíždím magnetem kolem reed, pwm je schopné mít na výstupu 100%. Už jsem z toho bezradný...
Prosím o pomoc... Děkuji
------------------------------------------------------------------------------
Master
Kód: Vybrat vše
float start, finished;
float elapsed, time;
float circMetric=2.093; // wheel circumference (in meters)
float circImperial; // using 1 kilometer = 0.621371192 miles
int speedk, speedm;
float AuraPWM;
void setup() {
Serial.begin(9600);
Serial.begin(38400); // Default communication rate of the Bluetooth module
circImperial=circMetric*.62137;
attachInterrupt(digitalPinToInterrupt(2), speedCalc, RISING);
start=millis();
}
void speedCalc()
{
//Function called by the interrupt
if((millis()-start)>100) // 100 millisec debounce
{
//calculate elapsed
elapsed=millis()-start;
//reset start
start=millis();
//calculate speed in km/h
speedk=(3600*circMetric)/elapsed;
//calculate speed in mph
speedm=(3600*circImperial)/elapsed;
}
}
void loop() {
Serial.println(speedk);
Serial.write(speedk);
delay(100);
AuraPWM = speedk;
}
------------------------------------------------------------------------------
Slave
Kód: Vybrat vše
#define Aura 3
int state = 0; // Vyctena hodnota z bluetooth
int OldState = 0;
int8_t AuraPWM = 0;
long unsigned OldMillis = 0;
long unsigned OldMillis2 = 0;
void setup() {
pinMode(Aura, OUTPUT);
Serial.begin(38400);
Serial.begin(9600);
}
void loop() {
if (millis() - OldMillis > 500) {
OldMillis = millis();
if (state - OldState == 0) {
state = 0;
}
OldState = state;
}
if (Serial.available() > 0)
{
state = Serial.read();
AuraPWM = state * 10;
if (state != OldState) {
OldMillis = millis();
OldState = state;
}
}
if (millis() - OldMillis2 > 1000) {
OldMillis2 = millis();
Serial.println(state);
analogWrite(Aura, state);
}
}
[code]