Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Obiecte vechi și inutile car...

Mentenanta Acoperis

Cheder deteriorat , zgariat, cum ...

Laptop HP 15-AF001NQ, AMD E1-6015...
 Blat de bucatarie lungime 4,60 m

Termostat incalzire si racire

Configurare retea cu modem Vodafo...

Curtea Penala Internationala soli...
 Sunt obligate bancile sa opteze p...

Pensie anticipata partiala cu cer...

Subscriptii

Cat ar costa acest poster, se poa...
 Cum sa scapam de sobolani?

Alser Forest SA a dat teapa de 1,...

COD Eroare ABS ( Ford Mondeo MK5 )

Implanturi dentare clinici Consta...
 

Arduino - automatizare DIY

* * * * * 2 voturi
  • Vă rugăm să vă autentificați pentru a răspunde
1573 răspunsuri în acest subiect

#1459
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Poate sunt paranoic dar nu va recomand sa folositi wi-fi pentru a comanda dispozitive importante.
Wi-fi e hackable oricat de lunga si complexa e parola.

N-as vrea sa aflu cum e sa iti aprinda altcineva lumina, sa iti umble la termostat, sa deschida poarta de la garaj sau sa iti traga draperiile cand esti dezbracat.
Sunt destui pushtani pusi pe hakuiala just for fun fara vreun motiv.

Conexiunea pe fir e mai sigura.
S-ar mai putea folosi protocoale proprii pe radio 433/866Hz.

Editat de radurus, 10 februarie 2019 - 17:38.


#1460
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Mesaje: 22.912
  • Înscris: 19.08.2004
Sunt mai multe probleme care pot apărea, pe lângă hacking. Inclusiv deautentificare, impersonare AP etc.

Nu vad de ce ai merge pe WiFi când ai deja cabluri trase. Iar dacă nu ai, tehnologiile mai puțin cunoscute, cat și cele care necesita echipament dedicat sunt recomandate.

#1461
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006

View Postlaffin, on 10 februarie 2019 - 12:16, said:

Cu un singur input poti detecta mai multe butoane.
Aceluiasi ESP ii atasezi un MCP23016 si poti comanda pana la 128 relee (lol).

Ai dreptate partial.
O sa elaborez putin.
MCP este un multiplexor GPIO cu comunicatie i2c. Avand adresa pe 3 biti poti conecta pana la 8 dispozitive MCP pe acelasi bus de comunicatie.
Nu vei folosi toate GPIO pentru output relee (128) ci doar jumatate deoarece trebuie sa ai inputuri de la butoanele alea de unde dai comanda.

Ca sa mearga ok ar trebui MCP setate ca inputuri sa aiba conectate si INT out ca al tau ESP sa stie ca s-a apasat un buton... altfel ar trebui sa tii busul de comunicatie ocupat si sa faci poll pentru butoane apasate ca sa stii cand a fost activat vreunul.

Deci pentru sistemul tau cu 8 MCP-uri ai nevoie de:
2 pini comunicatie i2c
4 pini input INT de la MCP (cate un pin pentru fiecare MCP la care sunt conectate butoane)

Ca sa ajungi la camera unde vrei sa dai comanda la releu iti trebuie:
- un GND
- un VCC
- 2 fire de comanda pentru 2 relee
- 2 fire inapoi spre ESP de la butoane.
Deci ai 6 fire ocupate din cele 8.
Cele 2 ramase nu le poti folosi decat pentru semnale digitale (on/off) nicidecum pentru comunicatie sau semnal analogic.

Daca ai distante de la ESP pana la camere, mai ai si cadere de tensiune pe alimentarea releului.
Sarmele lungi capteaza paraziti si trebuie sa montezi protectii la intrarea in MCP.

Practica generala arata ca nu e recomandat a se folosi fire lungi pentru semnale la tensiuni/curenti mici. E mai potrivit urmatorul concept:
- controler local pentru fiecare nod
- alimentare acolo la nod.
- I/O si senzori conectati local pe distante scurte (0.2-2m)
- poti folosi senzori pentru orice iti trece prin minte (vezi cealalta postare a mea) cu conectare pe comunicatie i2c sau cu outputuri digitale in functie de cate resurse ai libere pe controler.
- controlerul comunica pe suport fizic sau radio cu un server de unde poti da comenzi remote si vedea ce transmit nodurile.

Ce avantaje ai?
Pai nodurile le poti alimenta local (ai nevoie de minisursa pentru fiecare) sau prin cablul acela ftp cu 12-24V (dintr-o sursa centrala cu backup) si plasezi convertoare DC-DC la fiecare nod (am eu cu 5-25V input, output reglabil si 0.8A curent maxim suportat).
Ele pot functiona independent.
Daca pica unul, este afectata doar camera pe care o deserveste.
Avand deja cablu ftp poti face controlul nodului pe lan cu poe.

Nu incerc sa te conving de nimic.
Problema este ca ideea ta nu prea e aplicata in practica dar nu te opreste nimeni sa o aplici si sa vezi ce e ok si nu e ok la ea.
La cat costa un ESP-01... ai putea impanzi toata casa.
Vezi dispozitivele SonOff (basic, RF, touch, pow). Tocmai mi-am comandat 2 basic (~5$ /buc) si unul RF (telecomamda inclusa la 12$). Sa vad la ce la folosesc...

Editat de radurus, 10 februarie 2019 - 18:36.


#1462
laffin

laffin

    Senior Member

  • Grup: Senior Members
  • Mesaje: 9.661
  • Înscris: 16.03.2007

View Postraduk, on 10 februarie 2019 - 16:29, said:

Dacă nu este secret, poți, te rog, să dai cîteva detalii? Mulțumesc anticipat.

Pai nu-i nimic iesit din comun, practic o sa am un ESP care citeste valorile senzorilor de temperatura ambientala eventual si cei din sapa, de la un broker mqtt si de acolo deschid niste relee care alimenteaza pompa, contactul pentru centrala termica si actuatoarele distribuitorului pe anumite zone.
Face acelasi lucru ca o unitate de comanda obisnuita, dar am ales sa o fac eu pentru a detine controlul si implementa partea logica cum vreau.

View Postradurus, on 10 februarie 2019 - 18:24, said:

La cat costa un ESP-01... ai putea impanzi toata casa.
Vezi dispozitivele SonOff (basic, RF, touch, pow). Tocmai mi-am comandat 2 basic (~5$ /buc) si unul RF (telecomamda inclusa la 12$). Sa vad la ce la folosesc...

Exact, asa am gasit si eu initial proiectul cu un esp in fiecare doza, dar am observat ca pentru cazul meu particular pot folosi foarte bine unul centralizat.
In primavara-vara asta o sa pun in practica tot ce am testat pana acum, voi mai vedea ce apare pe drum. In general exista rezolvare pentru orice problema.

O sa va tin la curent despre cum functioneaza in exploatare.

Editat de laffin, 10 februarie 2019 - 19:11.


#1463
nenea67

nenea67

    Member

  • Grup: Members
  • Mesaje: 265
  • Înscris: 24.02.2015
Salutare! Ma poate ajuta cineva si pe mine ca in acest cod sa declar un array care sa contina 9 culori (255,0,0 ; 255,0,64 ; 255,0,128 ; 255,0,191 ; 255,0,255 ; 191,0,255 ; 128,0,255 ; 64,0,255 ; 0,0,255 ) , care sa i-mi modifice culoarea scrisului" 26 o C" in functie de temperatura ? ( 10 grade = culoare 1 , ....90 grade culoare 9 ) .
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include "Ucglib.h"
#define ONE_WIRE_BUS 2
OneWire oneWire_Temp(ONE_WIRE_BUS);
DallasTemperature Temp(&oneWire_Temp);
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8);
void setup(void)
{
ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
}
void loop(void)
{
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR18_tr);
Temp.requestTemperatures();
ucg.setColor(255, 255, 255);
ucg.setPrintPos(45,30);
ucg.print("Temp : ");
ucg.setColor(255, 0, 255);
ucg.setPrintPos(35,90);
ucg.print((String)Temp.getTempCByIndex(0)+" C ");
ucg.setPrintPos(100,75);
ucg.print("o");
delay(500);
}

Fișiere atașate



#1464
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
My idea:
Initializezi o variabila pe 8bit unsigned ca colorset.
Initializezi 3 variabile de tip integer pe 8 bit unsigned: RedCol, GreenCol, BlueCol
Faci un case cu 9 variante pentru "colorset".
In fiecare case treci valorile pentru cele 3 culori (RedCol=255; GreenCol=0; BlueCol=0;)
Schimbi culorile doar schimband "colorset" (colorset=3 de exemplu), apoi sari in rutina "case" si abia apoi treci la comenzile pentru print pe lcd cand ai comanda ucg.setColor(RedCol, GreenCol, BlueCol) cand variabilele le ai deja setate.

Poti pune rutina "case" intrun void setcolor() pe care il apelezi imediat dupa ce schimbi variabila "colorset" in valoarea dorita.
Cu rutine "if" setezi "colorset" in functie de valoarea temperaturii (daca temperatura e mai mare de 20 colorset e albastru ... else .. verifici daca temperatura e mai mare de 40 colorset=galben.. else daca temperatura e mai mare de 60 colorset =rosu ....

Editat de radurus, 11 februarie 2019 - 18:18.


#1465
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Cred ca m-am incurcat la if-uri... (era mai mic decat 20... mai mic decat 40 samd)

#1466
nenea67

nenea67

    Member

  • Grup: Members
  • Mesaje: 265
  • Înscris: 24.02.2015
Salutare ! Dl. Radurus , ce i-mi spui dumneata e prea greu pentru mine , si nici pe net nu am gasit un ex concret , ceva sa inceapa cu : int color[]={ 1,2,3, etc ...

#1467
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Nici eu nu ma pricep la chestii complicate (ma uit la unele coduri ca la o limba straina) dar citind si cautand, am inteles cum pot sa fac un timer cu millis, o rutina "switch/case", o rutina "for" si am uitat de "if" sau if/else daca e cazul.

Nu gasesti un exemplu de cod de genul celui sugerat de mine.
E o solutie care mi-a venit pe moment in minte. Nu ma pricep la array dar nu e tarziu sa invat daca imi trebuie.

Editat de radurus, 12 februarie 2019 - 09:26.


#1468
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Am pregatit un cod cu ceea ce vrei tu.
Nu ma pricep momentan la array (vectori).
Citeste comentariile pe care le-am plasat. Am explicat ce fac comenzile alea.
S-ar putea sa nu functioneze ceva deoarece eu folosesc bibliotecile onewire si dallas diferit imi setez adresele senzorilor si rezolutia de citire, apoi intreb fiecare senzor separat cat e temperatura).

Nu uita sa setezi culoarea scrisului daca vrei sa printezi alte chestii pe ecran deoarece ramane in memorie ultimul set de culori dat.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include "Ucglib.h"
#define ONE_WIRE_BUS 2
OneWire oneWire_Temp(ONE_WIRE_BUS);
DallasTemperature Temp(&oneWire_Temp);
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8);

// initializare variabile
// alegem variabile uint8_t (unsigned integer 8-bit) deoarece vom avea valori 0-255. Nu are loc sa ocupam RAM-ul inutil cu variabile de dimensiuni mari (16, 32, 64 biti)

uint8_t set_de_culori = 0; // e bine sa ii dai o valoare initiala unei variabile, altfel trebuie sa ii dai o valoare in void setup sau in void loop inainte sa o folosesti


uint8_t culoare_rosu = 0; // definim variabile pentru culori si le initializam cu 0; 0,0,0 insemnand negru.
uint8_t culoare_verde = 0;
uint8_t culoare_albastru = 0;

float temperatura_sensor1; // trebuie sa initializam variabila pe 64 biti cu virgula deoarece va trebui sa o analizam inainte sa ii dam o culoare si sa o scriem pe ecran

void setup(void)
{
ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
}
void loop(void)
{
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR18_tr);
Temp.requestTemperatures();
// ucg.setColor(255, 255, 255); // asta e vechea ta comanda
set_de_culori = 1; setcolor (); // am setat setul de culori pe 1 (care e alb), sarim in void setcolor acolo in switch, se atribuiesc valorile pentru RGB, se executa acolo comanda ucg.setColor(culoare_rosu, culoare_verde, culoare_albastru) si ne intoarcem inapoi ca sa continuam.
ucg.setPrintPos(45,30);
ucg.print("Temp : ");
// ucg.setColor(255, 0, 255); // comanda veche comentata
temperatura_sensor1 = Temp.getTempCByIndex(0); // facem citirea temperaturii aici, atribuim valoarea lui temperatura_senzor1
define_color_by_temperature(); // sarim in subrutina unde evaluam valoarea temperaturii si stabilim culoarea scrisului si ne intoarcem inapoi
setcolor (); // sarim in subrutina unde setam cele trei valori ale RGB
ucg.setPrintPos(35,90);
// ucg.print((String)Temp.getTempCByIndex(0)+" C "); // comanda ta veche
ucg.print((String)temperatura_senzor1 +" C "); // folosim la print valoarea temperaturii pe care am citit-o. Anterior nu era nicio variabila... adica era volatila si temperatura era citita instant in RAM.

ucg.setPrintPos(100,75);
ucg.print("o");
delay(500);
}

void setcolor(void) // am creat o rutina separata pentru setarea grupului de culori pentru a fi mai usor sa fie apelata
{
    switch (set_de_culori)
    {
        case 0: // mai jos e setul de valori culori asociat cu setul0 (0,0,0, este negru)
            culoare_rosu=0;
            culoare_verde=0;
            culoare_albastru=0;;
            break:
        case 1: // mai jos e setul de valori culori asociat cu setul1 (255,255,255, este alb)
            culoare_rosu=255;
            culoare_verde=255;
            culoare_albastru=255;
            break:
        case 2: // mai jos e setul de valori culori asociat cu setul2 (0,0,255, este albastru)
            culoare_rosu=0;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 3: // mai jos e setul de valori culori asociat cu setul3 (0,200,255, este albastru deschis)
            culoare_rosu=0;
            culoare_verde=200;
            culoare_albastru=255;
            break:
        case 4: // mai jos e setul de valori culori asociat cu setul4 (0,200,200, este albastru-verde)
            culoare_rosu=0;
            culoare_verde=200;
            culoare_albastru=200;
            break:
        case 5: // mai jos e setul de valori culori asociat cu setul5 (0,200,0, este verde dar nu intens)
            culoare_rosu=0;
            culoare_verde=200;
            culoare_albastru=0;
            break:
        case 6: // mai jos e setul de valori culori asociat cu setul6 (255,255,0, este galben)
            culoare_rosu=255;
            culoare_verde=255;
            culoare_albastru=0;
            break:
        case 7: // mai jos e setul de valori culori asociat cu setul7 (255,127,0, este orange)
            culoare_rosu=255;
            culoare_verde=127;
            culoare_albastru=0;
            break:
        case 8: // mai jos e setul de valori culori asociat cu setul8 (255,0,0, este rosu)
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=0;
            break:
        case 9: // mai jos e setul de valori culori asociat cu setul9 (255,0,255, este violet)
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=255;
            break:
    }
ucg.setColor(culoare_rosu, culoare_verde, culoare_albastru); // dam aici comanda se setare a culorii pentru valoarea temperaturii
}

void define_color_by_temperature(void) // subrutina asta are scopul de a evalua valoarea temperaturii si a atribui valori lui set_de_culori in functie de anumite intervale ale temperaturii. Daca nu iti convin limitele puse de mine le schimbi dupa dorinta
{
if (temperatura_senzor1 < -10) // foarte rece este albastru
    {
    set_de_culori = 2;
    }
    else
    {
    if (temperatura_senzor1 < 0) // rece este albastru deschis
        {
        set_de_culori = 3;
        }
        else
        {
        if (temperatura_senzor1 < 15) // pana la valoarea asta e turcoaz
            {
            set_de_culori = 4;
            }
            else
            {
            if (temperatura _senzor1 < 25) // pana la valoarea asta e verde
                {
                set_de_culori = 5;
                }
                else
                {
                if (temperatura _senzor1 < 35) // pana la valoarea asta e galben
                    {
                    set_de_culori = 6;
                    }
                    else
                    {
                    if (temperatura _senzor1 < 45) // pana la valoarea asta e orange
                        {
                        set_de_culori = 7;
                        }
                        else // sau daca trece de  limita de mai sus e rosu
                        {
                        set_de_culori = 8;
                        }
                    }
                }
            }
        }
    }
}

Editat de radurus, 12 februarie 2019 - 11:31.


#1469
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Am recitit solicitarea ta si am refacut cele 2 void personalizate.
Culorile sunt facute albastru spre rece si rosu spre cald.

Mai trebuie modificat in loop o comanda.
set_de_culori=10 ca sa scrie cu alb textul.

void setcolor(void) // am creat o rutina separata pentru setarea grupului de culori pentru a fi mai usor sa fie apelata
{
    switch (set_de_culori)
    {
        case 0: // mai jos e setul de valori culori asociat cu setul0 (0,0,0, este negru)
            culoare_rosu=0;
            culoare_verde=0;
            culoare_albastru=0;
            break:
        case 1: // mai jos e setul de valori culori asociat cu setul1 albastru simplu
            culoare_rosu=0;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 2: // mai jos e setul de valori culori asociat cu setul2
            culoare_rosu=64;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 3: // mai jos e setul de valori culori asociat cu setul3
            culoare_rosu=128;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 4: // mai jos e setul de valori culori asociat cu setul4
            culoare_rosu=191;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 5: // mai jos e setul de valori culori asociat cu setul5 mov
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=255;
            break:
        case 6: // mai jos e setul de valori culori asociat cu setul6
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=191;
            break:
        case 7: // mai jos e setul de valori culori asociat cu setul7
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=128;
            break:
        case 8: // mai jos e setul de valori culori asociat cu setul8
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=64;
            break:
        case 9: // mai jos e setul de valori culori asociat cu setul9 rosu simplu
            culoare_rosu=255;
            culoare_verde=0;
            culoare_albastru=0;
            break:
        case 10: // mai jos e setul de valori culori asociat cu setul10 alb
            culoare_rosu=255;
            culoare_verde=255;
            culoare_albastru=255;
            break:        
    }
ucg.setColor(culoare_rosu, culoare_verde, culoare_albastru); // dam aici comanda de setare a culorii

void set_color_by_temperature(void) // subrutina asta are scopul de a evalua valoarea temperaturii, imparte la 10 si atribuie valoarea intreaga lui set_de_culori
// pentru interval 0-9.9 grade vom avea culoarea 1 ...
// pentru interval 80-89.9 grade com avea culoarea 9
// pentru 90-... grade vom avea tot culoarea 9
// daca temperaturile astea sunt legate de cazan/pufer, eu as sugera sa incepi de la 10-19.9 grade cu albastru dar e mai dificil atunci cu impartirea automata si trebuie revenit la varianta cu if/else pe intervale.

{
    set_de_culori = INT(temperatura_senzor1/10)+1;
    if (set_de _culori < 1) // ne asiguram ca daca avem temperaturi negative (eroare?) pana la -9 ramanem la setul1
    {
    set_de_culori = 1;
    }
    if (set_de_culori > 9) // ne asiguram ca daca avem peste 90 grade ramanem totusi la setul9
    {
    set_de_culori=9;
    }

}

Editat de radurus, 12 februarie 2019 - 13:47.


#1470
gmartau

gmartau

    Member

  • Grup: Members
  • Mesaje: 639
  • Înscris: 30.04.2008
Mai compact. Sper sa se compileze din prima. Nu am testat ca nu folosesc bibliotecile standard deoarece isi bat joc de toate tipurile de memorie. Observ ca softpedia distruge indentarea.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include "Ucglib.h"
#define ONE_WIRE_BUS 2
OneWire oneWire_Temp(ONE_WIRE_BUS);
DallasTemperature Temp(&oneWire_Temp);
// definire tip culoare RGB
typedef struct{ uint8_t r, g, b;} TRGB;
// declaratie tabel culori initializat
TRGB Colors[9] = { {0,0,255}, {64,0,255}, {128,0,255}, {191,0,255}, {255,0,255}, {255,0,191}, {255,0,128}, {255,0,64}, { 255,0,0 }};
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8);
void setup(void)
{
ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
}
void loop(void)
{
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR18_tr);
Temp.requestTemperatures();
ucg.setColor(255, 255, 255);
ucg.setPrintPos(45,30);
ucg.print("Temp : ");
ucg.setPrintPos(35,90);
// citire temperatura
float tmp = Temp.getTempCByIndex(0);
// stabilire index culoare
uint8_t idxColor;
if(tmp <= 10){
idxColor = 0;
}else if(tmp < 90){
idxColor = (int) tmp / 10 - 1;
}else{
idxColor = 8;
}
// setare culoare text
ucg.setColor(Colors[idxColor].r, Colors[idxColor].g, Colors[idxColor].b);
// tiparire text
ucg.print((String)tmp + " C ");
ucg.setPrintPos(100,75);
ucg.print("o");
delay(500);
}



#1471
nenea67

nenea67

    Member

  • Grup: Members
  • Mesaje: 265
  • Înscris: 24.02.2015
Multumesc mult Domnule "gmartau " .... asta voiam ..acum o sa incerc sa dezvolt ( pentru alt format de culori 0x00FF (565) ,pentru intreg spectrul de la albastru la rosu , pentru alt tip de lcd tft 3,5  ' ) . Multumesc si domnului radurus pentru bunavointa , o sa incerc si acest cod .

Editat de nenea67, 13 februarie 2019 - 07:51.


#1472
nenea67

nenea67

    Member

  • Grup: Members
  • Mesaje: 265
  • Înscris: 24.02.2015
Salutare! Domnule "gmartau" In biblioteca MCUFRIEND_kbv.h am culorile date sub forma : #define RED 0xF800 , cu functia  " unsigned COL(unsigned R, unsigned G, unsigned B) {
return ((R * 31 / 255) << 11) + ((G * 63 / 255) << 5) + (B * 31 / 255); } " scriu acum culorile asa : COL(255,0,0) .  Ce trebuie modificat in "// definire tip culoare " , "// declaratie tabel culori initializat "  , " // stabilire index culoare" si " // setare culoare text " pentru al folosi si aici ?

#1473
gmartau

gmartau

    Member

  • Grup: Members
  • Mesaje: 639
  • Înscris: 30.04.2008
Ai functia care din RGB codifica in 565 in momentul in care trebuie sa setezi culoarea pentru display. Folosesti functia de mai jos care e optimizata fata de ce ai gasit. Copiezi linia de mai jos inainte de linia "void setup(void)" ca sa fie definita functia.
uint16_t Color565(uint8_t r,uint8_t g,uint8_t b) { return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); }
Unde se seteaza culoarea textului pentru ecranul care asteapta o culoare 565 pui apelul functiei. Daca setarea culorii pentru noul ecran e similara cu cel vechi, va fi ca mai jos:
// setare culoare text
ucg.setColor(Color565(Colors[idxColor].r, Colors[idxColor].g, Colors[idxColor].b));



#1474
nenea67

nenea67

    Member

  • Grup: Members
  • Mesaje: 265
  • Înscris: 24.02.2015
Multumesc domnule " gmartau " .  Functioneaza .  Trebuie sa invat diferenta dintre  "uint8_t"  si  "uint16_t" .

#1475
roPopa

roPopa

    Active Member

  • Grup: Members
  • Mesaje: 1.279
  • Înscris: 21.01.2011
salutare
as dori sa "desenez" schema de circuit arduino + altele.
In ce program (free) ma sfatuiti sa lucrez pentru a trasa componentele/firele/ etc?
de ex as lucra cu circuito.io (arata bine si e usor de folosit) dar nu pot sa aranjez schema aia deloc. as vrea sa trag de componente sa le repozitionez, sa schimb culoarea firelor dar nu merge.
R

#1476
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Mesaje: 8.028
  • Înscris: 16.06.2006
Fritzing.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate