Processing - graf
Moderátor: Moderátoři
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
Processing - graf
Má s tímto někdo nějaké zkušenosti?
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
a pokračuj v původním vlákně, jinak dostaneš od admina přes porty.
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
import processing.serial.*;
String temperature = "";
PImage pozadi;
PFont font;
Serial port;
void setup() {
pozadi = loadImage("pozadi.jpg");
size(1024, 768, P2D);
rect(30, 20, 55, 55, 7);
font = loadFont("Algerian-30.vlw");
port = new Serial(this, "COM4", 9600);
fill(0);
smooth();
}
void draw () {
image(pozadi, 0, 0, width, height);
int q = second();
int w = hour();
int e = minute();
int r = day();
int t = month();
int z = year();
text(":" , 78, 50);
text(":" , 115, 50);
text("." , 78, 80);
text("." , 115, 80);
fill(249, 250, 56);
if (port.available()>0) {
delay(100);
temperature = port.readString();
if(temperature.length() > 0)
{
int div_n = temperature.indexOf( '|' );
if( div_n > 0 )
{
float temp1 = float( temperature.substring( 0, div_n ));
float temp2 = float( temperature.substring( div_n+1 ));
text(temp1 +""+ temp2, width/3, height/3);
String
s = String.valueOf(w);
text(s, 47, 50);
textFont(font, 25);
s = String.valueOf(e);
text(s, 85, 50);
s = String.valueOf(q);
text(s, 120, 50);
s = String.valueOf(r);
text(s, 47, 80);
s = String.valueOf(t);
text(s, 85, 80);
s = String.valueOf(z);
text(s, 122, 80);
}}}
}
A pro Arduino:
int sensorPin1 = 0; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
int sensorPin2 = 1; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
//funkce uvedené zde se načtou po spuštění arduina a platí po celou dobu běhu programu.
void setup()
{
Serial.begin(9600); //nabindování sériové komunikace s počítačem.
Serial.println("Vitejte v programu na mereni teploty."); // odeslani textu po seriove lince s odradkovanim
}
void loop() // tyto funkce se cyklicky opakují
{
//čtení napěťových hodnot z teplotního senzoru
int reading1 = analogRead(sensorPin1);
int reading2 = analogRead(sensorPin2);
// převod načtených hodnot na napětí (?), for 3.3v arduino use 3.3
float voltage1 = reading1 * 3.3;
voltage1 /= 1024.0;
float voltage2 = reading2 * 3.3;
voltage2 /= 1024.0;
// zobrazení napěťových hodnot
Serial.println(voltage1+'|'+voltage2);
delay(5000); //doba zobrazení textu 5s
}
Mělo by to bejt tak, že mi arduino měří analogově teplotu, a ta se mi zobrazí na vizualizaci v Processingu. Okno processingu se zobrazí, ale žádné údaje tam nejsou.. co s tím?
Děkuji.
Kód: Vybrat vše
Serial.println("Vitejte v programu na mereni teploty."); // odeslani textu po seriove lince s odradkovanim
Asi bude potřeba vytvořit nějaký přenosový protokol...
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
A k čemu přenosovej protokol? Když jsem měl toto:
Kód: Vybrat vše
int sensorPin1 = 0; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
int sensorPin2 = 1; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
//funkce uvedené zde se načtou po spuštění arduina a platí po celou dobu běhu programu.
void setup()
{
Serial.begin(9600); //nabindování sériové komunikace s počítačem.
Serial.println("Vitejte v programu na mereni teploty."); // odeslani textu po seriove lince s odradkovanim
}
void loop() // tyto funkce se cyklicky opakují
{
//čtení napěťových hodnot z teplotního senzoru
int reading1 = analogRead(sensorPin1);
int reading2 = analogRead(sensorPin2);
// převod načtených hodnot na napětí (?), for 3.3v arduino use 3.3
float voltage1 = reading1 * 3.3;
voltage1 /= 1024.0;
float voltage2 = reading2 * 3.3;
voltage2 /= 1024.0;
// zobrazení napěťových hodnot
Serial.print("Senzor A:"); Serial.print(voltage1); Serial.println(" V");
Serial.print("Senzor B:"); Serial.print(voltage2); Serial.println(" V");
// zobrazení teploty v °C
float temperatureC1 = (voltage1 - 0.5) * 100 ; //převod teploty (10 mv = 1 °C) s celkovám rozsahem 500mV !offset!
//to degrees ((voltage - 500mV) times 100 ?)
Serial.print("Teplota A:"); Serial.print(temperatureC1); Serial.println(" stupnu C");
float temperatureC2 = (voltage2 - 0.5) * 100 ; //převod teploty (10 mv = 1 °C) s celkovám rozsahem 500mV !offset!
//to degrees ((voltage - 500mV) times 100 ?)
Serial.print("Teplota B:"); Serial.print(temperatureC2); Serial.println(" stupnu C");
delay(5000); //doba zobrazení textu 5s
} Kód: Vybrat vše
import processing.serial.*;
String temperature = "0";
PImage pozadi;
PFont font;
Serial port;
void setup() {
pozadi = loadImage("pozadi.jpg");
size(1024, 768, P2D);
rect(30, 20, 55, 55, 7);
font = loadFont("Algerian-30.vlw");
port = new Serial(this, "COM4", 9600);
fill(0);
smooth();
}
void draw () {
image(pozadi, 0, 0, width, height);
int q = second();
int w = hour();
int e = minute();
int r = day();
int t = month();
int z = year();
text(":" , 78, 50);
text(":" , 115, 50);
text("." , 78, 80);
text("." , 115, 80);
fill(249, 250, 56);
if (port.available()>0) {
delay(100);
temperature = port.readString();
}
text(temperature, width/3, height/3);
String
s = String.valueOf(w);
text(s, 47, 50);
textFont(font, 25);
s = String.valueOf(e);
text(s, 85, 50);
s = String.valueOf(q);
text(s, 120, 50);
s = String.valueOf(r);
text(s, 47, 80);
s = String.valueOf(t);
text(s, 85, 80);
s = String.valueOf(z);
text(s, 122, 80);
}
Tak se mi ta textová informace v okně normálně zobrazila. Nyní jsem chtěl udělat grafické řešení, jako je zde: https://boolscott.wordpress.com/2010/02 ... r-graph-2/
a výsledkem je prázdné Processing okno, kde se mi zobrazí jen soubor pozadi.jpg a žádný graf.
A už si fakt nevím rady.
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
Mám v současné době tento program:
Kód: Vybrat vše
int sensorPin1 = 0; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
int sensorPin2 = 1; //Definice analogového pinu, ke kterému připojím výstup snímače teploty
//citlivost je 10mV na jeden °C
//s celkovou škálou 500mV - umožňuje i záporné hodnoty.
//funkce uvedené zde se načtou po spuštění arduina a platí po celou dobu běhu programu.
void setup()
{
Serial.begin(9600); //nabindování sériové komunikace s počítačem.
Serial.println("Vitejte v programu na mereni teploty."); // odeslani textu po seriove lince s odradkovanim
}
void loop() // tyto funkce se cyklicky opakují
{
//čtení napěťových hodnot z teplotního senzoru
int reading1 = analogRead(sensorPin1);
int reading2 = analogRead(sensorPin2);
// převod načtených hodnot na napětí (?), for 3.3v arduino use 3.3
float voltage1 = reading1 * 5.0;
voltage1 /= 1024.0;
float voltage2 = reading2 * 5.0;
voltage2 /= 1024.0;
// zobrazení napěťových hodnot
Serial.print("Senzor A:"); Serial.print(voltage1); Serial.println(" V");
Serial.print("Senzor B:"); Serial.print(voltage2); Serial.println(" V");
// zobrazení teploty v °C
float temperatureC1 = (voltage1 - 0.5) * 100 ; //převod teploty (10 mv = 1 °C) s celkovám rozsahem 500mV !offset!
//to degrees ((voltage - 500mV) times 100 ?)
Serial.print("Teplota A:"); Serial.print(temperatureC1); Serial.println(" stupnu C");
float temperatureC2 = (voltage2 - 0.5) * 100 ; //převod teploty (10 mv = 1 °C) s celkovám rozsahem 500mV !offset!
//to degrees ((voltage - 500mV) times 100 ?)
Serial.print("Teplota B:"); Serial.print(temperatureC2); Serial.println(" stupnu C");
delay(5000); //doba zobrazení textu 5s
} A tuto vizualizaci:
Kód: Vybrat vše
import processing.serial.*;
String temperature = "0";
PImage pozadi;
PFont font;
Serial port;
void setup() {
pozadi = loadImage("pozadi.jpg");
size(1024, 768, P2D);
rect(30, 20, 55, 55, 7);
font = loadFont("Algerian-30.vlw");
port = new Serial(this, "COM4", 9600);
fill(0);
smooth();
}
void draw () {
image(pozadi, 0, 0, width, height);
int q = second();
int w = hour();
int e = minute();
int r = day();
int t = month();
int z = year();
text(":" , 78, 50);
text(":" , 115, 50);
text("." , 78, 80);
text("." , 115, 80);
fill(249, 250, 56);
if (port.available()>0) {
delay(100);
temperature = port.readString();
}
text(temperature, width/3, height/3);
String
s = String.valueOf(w);
text(s, 47, 50);
textFont(font, 25);
s = String.valueOf(e);
text(s, 85, 50);
s = String.valueOf(q);
text(s, 120, 50);
s = String.valueOf(r);
text(s, 47, 80);
s = String.valueOf(t);
text(s, 85, 80);
s = String.valueOf(z);
text(s, 122, 80);
} Výsledek u mě vypadá takto:
http://img24.cz/images/16052531158694030888.jpg
Chtěl jsem docílit toho, abych měl, namísto textového zobrazení hodnot, graf, jako je tento:
https://boolscott.wordpress.com/2010/02 ... r-graph-2/ (nejde mi o doslovně stejný grafický řešení, ale "pouze" o tento princip: graf mění svou velikost podle měřených hodnot.)
A už nevím, proč mi o věčně nejde. Nevím, co dělám špatně, a mě už je z toho špatně.
Děkuji za radu, sám si už žádnou nedám.
- arduino2015
- Příspěvky: 158
- Registrován: 30 led 2015, 00:00
http://www.dustynrobots.com/nyu/seeing- ... nsed-data/
Nedostatkem je, že tastovací zapojení potenciometru (levá noha uzemněna, prostřední na A0, pravá na 5V) funguje na jedničku, zatímco ta s TM36 (+Vs - 5V, Vout na A0, GND na GND http://www.analog.com/media/en/technica ... _36_37.pdf) taky zobrazí nějakou grafickou hodnotu, ale stále stejnou.
Tak už teda nevím, zda je problém *někde*, anebo, zda jde jen o nastavení škály, že ty teplotní změny jsou pro tento graf moc malé.
Nějaké tipy?
http://www.dustynrobots.com/nyu/seeing- ... nsed-data/