|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Tess..
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
// D0 connects to digital pin 8 (Notice these are
// D1 connects to digital pin 9 NOT in order!)
// D2 connects to digital pin 2
// D3 connects to digital pin 3
// D4 connects to digital pin 4
// D5 connects to digital pin 5
// D6 connects to digital pin 6
// D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;
void setup(void) {
Serial.begin(9600);
Serial.println(F("TFT LCD test"));
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
Serial.println(F("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
Serial.println(F("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif
Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height());
tft.reset();
//uint16_t identifier = tft.readID();
uint16_t identifier = 0x9328;
// if(identifier == 0x9325) {
// Serial.println(F("Found ILI9325 LCD driver"));
// } else if(identifier == 0x9328) {
// Serial.println(F("Found ILI9328 LCD driver"));
// } else if(identifier == 0x7575) {
// Serial.println(F("Found HX8347G LCD driver"));
// } else if(identifier == 0x9341) {
// Serial.println(F("Found ILI9341 LCD driver"));
// } else if(identifier == 0x8357) {
// Serial.println(F("Found HX8357D LCD driver"));
// } else {
// Serial.print(F("Unknown LCD driver chip: "));
// Serial.println(identifier, HEX);
// Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
// Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
// Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
// Serial.println(F("If using the breakout board, it should NOT be #defined!"));
// Serial.println(F("Also if using the breakout, double-check that all wiring"));
// Serial.println(F("matches the tutorial."));
// return;
// }
tft.begin(identifier);
Serial.println(F("Benchmark Time (microseconds)"));
Serial.print(F("Screen fill "));
Serial.println(testFillScreen());
delay(500);
Serial.print(F("Text "));
Serial.println(testText());
delay(3000);
Serial.print(F("Lines "));
Serial.println(testLines(CYAN));
delay(500);
Serial.print(F("Horiz/Vert Lines "));
Serial.println(testFastLines(RED, BLUE));
delay(500);
Serial.print(F("Rectangles (outline) "));
Serial.println(testRects(GREEN));
delay(500);
Serial.print(F("Rectangles (filled) "));
Serial.println(testFilledRects(YELLOW, MAGENTA));
delay(500);
Serial.print(F("Circles (filled) "));
Serial.println(testFilledCircles(10, MAGENTA));
Serial.print(F("Circles (outline) "));
Serial.println(testCircles(10, WHITE));
delay(500);
Serial.print(F("Triangles (outline) "));
Serial.println(testTriangles());
delay(500);
Serial.print(F("Triangles (filled) "));
Serial.println(testFilledTriangles());
delay(500);
Serial.print(F("Rounded rects (outline) "));
Serial.println(testRoundRects());
delay(500);
Serial.print(F("Rounded rects (filled) "));
Serial.println(testFilledRoundRects());
delay(500);
Serial.println(F("Done!"));
}
void loop(void) {
for(uint8_t rotation=0; rotation<4; rotation++) {
tft.setRotation(rotation);
testText();
delay(2000);
}
}
unsigned long testFillScreen() {
unsigned long start = micros();
tft.fillScreen(BLACK);
tft.fillScreen(RED);
tft.fillScreen(GREEN);
tft.fillScreen(BLUE);
tft.fillScreen(BLACK);
return micros() - start;
}
unsigned long testText() {
tft.fillScreen(BLACK);
unsigned long start = micros();
tft.setCursor(0, 0);
tft.setTextColor(WHITE); tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(YELLOW); tft.setTextSize(2);
tft.println(1234.56);
tft.setTextColor(RED); tft.setTextSize(3);
tft.println(0xDEADBEEF, HEX);
tft.println();
tft.setTextColor(GREEN);
tft.setTextSize(5);
tft.println("Groop");
tft.setTextSize(2);
tft.println("I implore thee,");
tft.setTextSize(1);
tft.println("my foonting turlingdromes.");
tft.println("And hooptiously drangle me");
tft.println("with crinkly bindlewurdles,");
tft.println("Or I will rend thee");
tft.println("in the gobberwarts");
tft.println("with my blurglecruncheon,");
tft.println("see if I don't!");
return micros() - start;
}
unsigned long testLines(uint16_t color) {
unsigned long start, t;
int x1, y1, x2, y2,
w = tft.width(),
h = tft.height();
tft.fillScreen(BLACK);
x1 = y1 = 0;
y2 = h - 1;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = w - 1;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t = micros() - start; // fillScreen doesn't count against timing
tft.fillScreen(BLACK);
x1 = w - 1;
y1 = 0;
y2 = h - 1;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = 0;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t += micros() - start;
tft.fillScreen(BLACK);
x1 = 0;
y1 = h - 1;
y2 = 0;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = w - 1;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t += micros() - start;
tft.fillScreen(BLACK);
x1 = w - 1;
y1 = h - 1;
y2 = 0;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = 0;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
return micros() - start;
}
unsigned long testFastLines(uint16_t color1, uint16_t color2) {
unsigned long start;
int x, y, w = tft.width(), h = tft.height();
tft.fillScreen(BLACK);
start = micros();
for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
return micros() - start;
}
unsigned long testRects(uint16_t color) {
unsigned long start;
int n, i, i2,
cx = tft.width() / 2,
cy = tft.height() / 2;
tft.fillScreen(BLACK);
n = min(tft.width(), tft.height());
start = micros();
for(i=2; i<n; i+=6) {
i2 = i / 2;
tft.drawRect(cx-i2, cy-i2, i, i, color);
}
return micros() - start;
}
unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
unsigned long start, t = 0;
int n, i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(BLACK);
n = min(tft.width(), tft.height());
for(i=n; i>0; i-=6) {
i2 = i / 2;
start = micros();
tft.fillRect(cx-i2, cy-i2, i, i, color1);
t += micros() - start;
// Outlines are not included in timing results
tft.drawRect(cx-i2, cy-i2, i, i, color2);
}
return t;
}
unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
unsigned long start;
int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
tft.fillScreen(BLACK);
start = micros();
for(x=radius; x<w; x+=r2) {
for(y=radius; y<h; y+=r2) {
tft.fillCircle(x, y, radius, color);
}
}
return micros() - start;
}
unsigned long testCircles(uint8_t radius, uint16_t color) {
unsigned long start;
int x, y, r2 = radius * 2,
w = tft.width() + radius,
h = tft.height() + radius;
// Screen is not cleared for this one -- this is
// intentional and does not affect the reported time.
start = micros();
for(x=0; x<w; x+=r2) {
for(y=0; y<h; y+=r2) {
tft.drawCircle(x, y, radius, color);
}
}
return micros() - start;
}
unsigned long testTriangles() {
unsigned long start;
int n, i, cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(BLACK);
n = min(cx, cy);
start = micros();
for(i=0; i<n; i+=5) {
tft.drawTriangle(
cx , cy - i, // peak
cx - i, cy + i, // bottom left
cx + i, cy + i, // bottom right
tft.color565(0, 0, i));
}
return micros() - start;
}
unsigned long testFilledTriangles() {
unsigned long start, t = 0;
int i, cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(BLACK);
start = micros();
for(i=min(cx,cy); i>10; i-=5) {
start = micros();
tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(0, i, i));
t += micros() - start;
tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(i, i, 0));
}
return t;
}
unsigned long testRoundRects() {
unsigned long start;
int w, i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(BLACK);
w = min(tft.width(), tft.height());
start = micros();
for(i=0; i<w; i+=6) {
i2 = i / 2;
tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
}
return micros() - start;
}
unsigned long testFilledRoundRects() {
unsigned long start;
int i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(BLACK);
start = micros();
for(i=min(tft.width(), tft.height()); i>20; i-=6) {
i2 = i / 2;
tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
}
return micros() - start;
}
Azon túl, hogy hibás a rajz is és a program is (mindkettőt korrigáltam), elrontottam a nyák-ot és a nyomógombok folyamatos zárlatot okoztak a 7,8,9-es kimeneteken ezért nem tudott a program tovább futni. Nem tudta a program magas szintre emelni a kimeneteket a progi és leállt.
Hogyan tudnék kódot beilleszteni a cntr c/v módszer helyett?
Volt amikor sikerült,de most elfelejtettem.
Jobb egérgomb - Másolás
Jobb egérgomb - Beillesztés
Ezt windows alatt akarod (?) mert androidnál másképp kell. Ki kell jelőlni a szöveget (bal egér gomb szövegen húzásásval) majd jobb gomb megnyom , menyilik egy lehetőség ahol a másolást kell választani, majd rákattintassz arra a helyre ahova be akarod illeszteni és jobb gomb és beillesztést válsztod.
Lehet rosszul fogalmaztam,ide a fórumra szeretném,az előzőhöz hasonlóan.
Hozzászólásnál "Kód" gomb
Ezt próbáltam,nem sikerült ,de gondolom előtte valahogy ki kellene jelölni forrást.
Hol van a forrás? Jelőld ki ahogy fent leirtam majd válaszd a kód gombot majd ctrl+v A hozzászólás módosítva: Feb 23, 2023
A forrás az arduino IDE-ben van.
Így be tudom tölteni,de a rövidebb rollozható formában szeretném.
Akkor kezdjük elölről . A teljes kódot akarod itt a fórumon megosztani?
Igen,ezt szeretném,hogy ne foglaljon sok helyet a monitoron. A hozzászólás módosítva: Feb 23, 2023
Na akkor most részletesen meséld el, hogy mit csináltál, és mi lett az eredménye!
1, Nyisd meg arduinoba azt a kódot amit be akarsz illeszteni
2, szerkesztés fülön válaszd ki az összes kijelőlését
3,majd megint szerkesztésnél a másolást
4, Itt a fórumon válaszd a válasz vagy új hozzászólást
5, ird le mit akarsz
6, nyomd meg a Kód gombot
7, nyomd meg a Ctrl és a v gombot
8, Hozzászólás elküldése gomb megnyomása és kész is A hozzászólás módosítva: Feb 23, 2023
Esetleg megoldás lehet még a
szerkesztés fül-> másolás fórumba lehetőség de akkor az első [/code] elött kell a kérdést feltenni
Több 1-wire szenzort szeretnék beolvasni,ez a ds18b20-ak esetén sikerül is,de a ds2423 -nál csak egyet kezel ennek a könyvtára és nekem legalább öt kellene.Nem találtam olyan könyvtárat,ami többet tud kezelni,mint a hőszenzoroké.Hogyan lehetne a programot megírni,hogy ne kelljen mindet külön pinre kötni?
Így működik a beillesztés,a 3. pontot hagytam ki.(mentségem a 75 év)
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <DS2423.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
const uint8_t ONE_WIRE_PIN = 8;
uint8_t DS2423_address[] = { 0x1D, 0xEF, 0xDD, 0x0F, 0x00, 0x00, 0x00, 0xE6 };//ds2423
OneWire ow(ONE_WIRE_PIN);
DS2423 ds2423(&ow, DS2423_address);
DallasTemperature sensors(&oneWire);
DeviceAddress szobafent = {0x28, 0x44, 0x8E, 0x07, 0xD6, 0x01, 0x3C, 0x49};//Rom 13
DeviceAddress szobalent = {0x10, 0xE1, 0xCE, 0x0A, 0x02, 0x08, 0x00, 0x47};//Rom 39
DeviceAddress falszig = {0x28, 0x05, 0x8A, 0x11, 0x05, 0x00, 0x00, 0x01};//Rom 43
DeviceAddress kulsoho = {0x10, 0x05, 0x6A, 0x12, 0x01, 0x08, 0x00, 0x5E};//Rom 44
DeviceAddress gardrob = {0x28, 0x1C, 0x39, 0xEA, 0x03, 0x00, 0x00, 0xF9};//Rom 45
DeviceAddress mamelo = {0x28, 0xD4, 0x09, 0xEA, 0x03, 0x00, 0x00, 0x43};//Rom 46
DeviceAddress villki = {0x28, 0x58, 0x85, 0x83, 0x04, 0x00, 0x00, 0x47};//Rom 47
float tempF; //Aktuális mért ds18b20 eredmény
float tempf;//-"-
int villk;//Villanykazán számláló
float szobaf;//Tetőtéri szoba hőfok
void setup() {
Serial.begin(9600);
ds2423.begin(DS2423_COUNTER_A | DS2423_COUNTER_B);
sensors.begin();
sensors. setResolution(szobafent, 12); //DS18b20 felbontás 12 bit
sensors.setResolution(szobalent, 12);
sensors.setResolution(falszig, 12);
sensors.setResolution(kulsoho, 12);
sensors.setResolution(gardrob, 12);
sensors.setResolution(mamelo, 12);
sensors.setResolution(villki, 12);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempF = sensors.getTempC(deviceAddress);
Serial.println(tempF, 1);
tempf = tempF;
}
void loop() {
ds2423.update();
Serial.print("hosziv kwh = ");
Serial.print(ds2423.getCount(DS2423_COUNTER_A));
Serial.println(" ");
Serial.print("vill kaz kwh = ");
Serial.println(ds2423.getCount(DS2423_COUNTER_B));
villk = (ds2423.getCount(DS2423_COUNTER_B)); //Villanykazán számláló !!!
delay(1000);
sensors.requestTemperatures();
Serial.print("szoba fent:");
printTemperature(szobafent);
szobaf=sensors.getTempC(szobafent);// ????
Serial.print(szobaf,1);
Serial.print("szoba lent:");
printTemperature(szobalent);
Serial.print("fal/szigeteles:");
printTemperature(falszig);
Serial.print("kulsohomer:");
printTemperature(kulsoho);
Serial.print("gardrobho:");
printTemperature(gardrob);
Serial.print("mamutelo:");
printTemperature(mamelo);
Serial.print("villanyki:");
printTemperature(villki);
Serial.println("-");
delay(59000);
}
Idézet: „(mentségem a 75 év)”
Mindenkinek szivesen segitünk, a kor nem számit
A gond abból adódik, hogy ugyan azon a címen szeretnéd a két szenzort megszólítani. Elvileg, ha egy pinre kötöd, akkor a saját címeiken el tudod érni az eszközöket.
A codebender.cc oldalon van egy címkereső, használd: Bővebben: Link
Mind az öt ds2423-nak ismerem a címét és ha a 8.sorban valamelyiket beírom,ki tudom olvasni .
Úgy szeretném ezeket is kiolvasni ,mint a hőszenzoroknál,de ennek a könyvtára úgy tűnik nem alkalmas.Ezért keresek másik kőnyvtárat,vagy megoldást.
Nem tudom érted-e a programkódot amit összeraktál? Ugyanis ha tudod a címeiket, akkor ezzel a könyvtárral is meg tudod oldani viszonylag egyszerűen.
uint8_t DS2423_address[] = { 0x1D, 0xEF, 0xDD, 0x0F, 0x00, 0x00, 0x00, 0xE6 };//ds2423
OneWire ow(ONE_WIRE_PIN);
DS2423 ds2423(&ow, DS2423_address);
Itt az történik, hogy a ds2423 nevű DS2423 típusú objektumot létrehozod azzal a címmel, amit megadtál.
Magyarul ha többet akarsz, akkor több objektumot is létre tudsz hozni, csak be kell írnod a címeiket annak megfelelően:
uint8_t DS2423_address[] = { 0x1D, 0xEF, 0xDD, 0x0F, 0x00, 0x00, 0x00, 0xE6 };//ds2423
OneWire ow(ONE_WIRE_PIN);
DS2423 elsoSzenzor(&ow, DS2423_address);
DS2423_address = { masodikcim };
DS2423 masodikSzenzor(&ow, DS2423_address);
...
DS2423_address = { n-edikcim };
DS2423 n-edikSzenzor(&ow, DS2423_address);
Majd a kiíráshoz a 43-50. soraidat ismételgeted, de nem ds2423.update() és hasonlók lesznek benne, hanem azok a nevek, amiknek az objektumaidat elnevezted.
Köszönöm működik,minden szenzort lát.Kicsit több sor,minden DS2423-at külön kell indítani és kiolvasni,de legalább 1 pin kell hozzá.Mégegyszer kösz.
Örülök, hogy sikerült megoldani.
Ezt a választ biztos hogy nekem szántad?
Sziasztok.
szeretnék az autómba ardunio segítségével egy ablak emelőt.
De az arduniot nem szeretném haza vágni igy a kapcsolásba szeretném kérni a segítségeteket.
A kapcsolás lényege amikor Bezárom a kocsit Akkor 12v megjelenik a (1.colseimpulse) lábon és az ardunio érzékelné ezt.
Az a kérdésem hogy 12v lekezeli az ardunio és ha nincs 12v akkor 0 értéket ad vissza ? (Nem fog lebegni a láb)
2.colseimpulse pedig megállítja az ablakemelő részt.
BC337-et használnék mert az van itthon
A programkáddal el bajlódom.
Bocsánat a duplapost ért.
Érdemes ardunio 12v lábánál szűrő kondikat rakni ha igen megkorákat?
Az Arduinonak nincs 12 Voltos lába. Ha szürökondikat akarsz akkor azokat az AVR lábához kell rakni, de azok többnyire amugy is ott vannak.
Nem teljesen értem mi az a "1.colseimpulse" .
Ha csak az ablakok végállását akarod az arduinoval "tudatni" akkor elég 2 mikrokapcsolót felszerelni oda ahol a végállások vannak. Innentől kezdve meg csak kapcsolómódként kell megirni a programot 2 digitális lábra. (12V-ot nem vezetünk 5V toleráns lábra)
Azt irtad
Idézet: „De az arduniot nem szeretném haza vágni”
Na akkor ajánlom hogy a VIN elé tegyél be egy LM7808 vagy LM7809-et mert a feszültség a kocsiba akár 14V is lehet és ez megöli az arduinot.
Dacia Lodgyban mértem a gombokhoz menő tápot és annyira pontosan 12V volt mindenféle zaj nélkül, hogy esküdni mernék rá, hogy eleve stabilizált tápot kapnak ezek a fogyasztók. Láttatok már ilyen megoldást? Persze attól még nem árt a plusz védelem, de nem feltétlenül szükséges.
Az Arduino pin-jeire elvileg lehet a tápfeszültségnél nagyobb feszültséget kötni. Belül egy védődióda levezeti a VCC-re. Két feltétele van: az áramot le kell korlátozni ellenállással, hogy a túlfeszültség dióda maximum áramát ne érje el (ha jól emlékszem ez kisebb mint 1mA, de lásd adatlap). És biztosítani kell, hogy ez az áram ne emelje meg a VCC-t, ami akkor teljesül ha ennél nagyobb a fogyasztása a rendszernek. Ennek ellenére én is javasolnék valami bemenet védő áramkört a biztonság kedvéért. A hozzászólás módosítva: Feb 24, 2023
Bocs akkor félre érthetően fogalmaztam.
A bejövő feszültség 12v volt amit "1.colseimpulse" on kap majd az ardunio jelként.
Csak hogy az ardunio elviseli a 12v bemenő jelet?
1.colseimpulse az azt csinálja amikor a bezárás gombra nyomok akkor xy ideiig megjelenik a 12v feszültség.
Jonni
A végállás az ablak emelő részébe bent van. XY idegig kell csak jelet adni a D13 lábon pontosan 5 sec.
Idézet: „Na akkor ajánlom hogy a VIN elé tegyél be egy LM7808 vagy LM7809-et mert a feszültség a kocsiba akár 14V is lehet és ez megöli az arduinot.”
VIN úgy tudom van stab ic nem?
De rakok .
|
|