alan
Vytvořené odpovědi
-
AutorPříspěvky
-
alanÚčastník
Zkoušel jsem také přidat další funkci níže v programu poslat. Dal jsem tam pauzu 20 vteřin než se pošle „end“. Ale mám s tím podoboný problém, Tentokrát jsem schopen odeslat čísla najednou ale celý program čeká 20s. Místo toho aby mi to nejdříve odeslalo čísla 123 a pak po 20s end, tak mi to odešle end a až pak čísla a pak znovu po 20 vteřinách end. Což nechápu, protože nedjříve volám void loop a az pak void poslat.
end
123end
void setup (){ Serial.begin(9600); Serial.flush(); digitalWrite (13, HIGH); //turn on debugging LED } void loop (){ int i=0; char commandbuffer[100]; if(Serial.available()){ delay(100); while( Serial.available() && i< 99) { commandbuffer[i++] = Serial.read(); } commandbuffer[i++]='\0'; } if(i>0) Serial.println((char*)commandbuffer); poslat(); } void poslat(){ delay(20000); Serial.println("end"); }
alanÚčastníkNevím proč, ale když nechám v arduinu jen `byte byteRead;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);}
void loop() {
// put your main code here, to run repeatedly:if(Serial.available( )){
byteRead = Serial.read();
Serial.write(byteRead);`
Přečte a odešle mi to jednotlivá čísla dohromady. Tudíž, když zadám třeba i posloupnost dlouhoo(123456789), zobrazí se to i ve stejném pořadí. Když jsem zkoušel upravit kod v arduinu podle vašich rad, tak už v sériovém monitoru mi to ukazovalo ty prázdné znaky postupně „1 2 3 4“. Takže i kdyby se mi to povedlo úspěšně načíst v matlabu, tak by to odeslalo dřív další posloupnost než je potřeba. Myslím si, že je problém jen v arduinu, tam prostě potřebuji přijat ty čísla dohromady, pak je i dohromady odeslat. Počkat chvíli a odeslat nějaký indikátor, který budu schopný v matlabu načíst, když ho načtu, tak azdám další posloupnost čísel z klávesnice.
Dám sem ještě originální kód, který používám v matlabu, ještě bez toho kroku kde má porovnat string nebo netisknutelný znak.clear all; clc; b=Bluetooth('HC-05', 1); %vytvoreni bluetooth objektu i = input('Zadej posloupnost: ','s'); % Zadávání číselné posloupnosti z klávesnice fopen(b); %otevreni komunikace fwrite(b,i); %zapis ciselne posloupnosti d = fscanf(b, '%s'); % oskenovani prijatych dat disp('Zadana posloupnost: '); %vypise na monitor disp(d); fclose(b);
alanÚčastníkAbych byl upřímný, tak úplně nevím co máte namysli nebo jak to mám zakomponovat do programu. Měl bych tedy na začátku programu vytvořit, ty proměnné
char start = char(1); char stop = char(2);
A poté upravit to přijímání a odesílání?
if(Serial.available( )){ byteRead = Serial.read(); Serial.write(start); Serial.write(byteRead); Serial.write(stop); delay(20000); Serial.write("e");
alanÚčastníkJde o to, že ta posloupnost čísel bude vždy jiná. Takže nemůžu nastavit natvrdo o bude začátek a co konec komunikace. Jinak nevím co jste tím myslel.
alanÚčastníkJeště pro vysvětlení by to mělo být takhle
1. nejdříve odeslat 123 z amtlabu do arduina a ihned zpátky do maltabu
2. spoté poslat string „e“ z arduina do matlabu
3. tento string porovnám v matlabu a odešlu další čísla do arduina -
AutorPříspěvky