Elektronika.lt
 2024 m. balandžio 18 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 04 18, 15:25. Visos datos yra GMT + 2 valandos.
 Forumas » Programavimas » Arduino pwm value to screen?
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 14
Pereiti prie 1, 2, 3, 4  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 17, 22:44 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki, reik pagalbos visiškai žaliam pradedančiam "programeriui".
Valdikliukas arduino uno. Interneto platybėse buvo rastas toks (mano manymu gan paprastas ir pradedančiam suprantamas) ledų pwm valdymui sketch-as. Įkėliau į arduiną - veikia. Dabar šiek tiek aš jį patobulinau - tiek geležį tiek sketch-ą: pajungiau i2c lcd ir DHT22 - datą ir laiką rodo, temperatųrą ir drėgmę - taip pat. Tiek dar ir pats sugebėjau pasidaryti, bet reikia pagalbos. Ant 10 pin-o pasijungiau dioduką per varžą - viskas vyksta pagal programą lyg ir - švelniai užsižiebia ir užgęsta. Ką padaryti, kad ekrane matyčiau ir PWM lygį%?

Tikriausia turėtų būti kažkas panašaus kaip čia:

Kodas:

int pct = map(10,0,255,0,100); //Calculate PWM percentage
lcd.setCursor(0,3);           // set cursor to column 0, row 4
lcd.print("Light intensity ");     // Light intensity
if (pct() < 10) lcd.print("0");   // kad butu 01 ir t.t.
lcd.print(pct);               
lcd.print("%");



Pats išeitinis kodas buvo toks:

Kodas:

* Author:   User "benjaf" at plantedtank.net forums
 * URL:      https://github.com/benjaf/LightController

// ----------------------- RTC Library -----------------------

#include <Wire.h>
#include "RTClib.h"
#include "ChannelManager.h"

// ----------------------- Constants -----------------------
const int MaxChannels = 2;   // Max number of channels, change if more or less are required
const int MaxPoints = 10;    // Max number of light intensity points, change if more or less are required

// ----------------------- Variables -----------------------
RTC_DS1307 RTC;
DateTime CurrentTime;

// ----------------------- Lights -----------------------
// Example:
//    Channels[0].AddPoint(8, 0, 0);
//   Channels[0].AddPoint(8, 30, 255);
//   Channels[0].AddPoint(11, 0, 255);
//  ...
//
// Explanation:
//  00:00 - 08:00 -> Light OFF
//  08:00 - 08:30 -> Increment light towards Fully ON
//  08:30 - 11:00 -> Light Fully ON
//
// Min intensity value: 0 (OFF)
// Max intensity value: 255 (Fully ON)
//
// If only 1 point is added, channel always maintains value of that point

Channel Channels[MaxChannels];
Point Points[MaxChannels][MaxPoints];

void InitializeChannels(int channels) {

   // Channel 0:
   int channelNo = 0;   // Currently editing channel 0
   int pin = 10;      // Channel 0 uses pin 10
   Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);   // Initialize channel and choose FadeMode
   Channels[channelNo].AddPoint(8, 0, 0);   // Add Point (can also use decimal values ranging from 0 to 1 if you prefer)
   Channels[channelNo].AddPoint(9, 0, 255);
   Channels[channelNo].AddPoint(19, 30, 255);
   Channels[channelNo].AddPoint(20, 0, 0);
   
   // Channel 1:
   channelNo = 1;   // Currently editing channel 1
   pin = 11;      // Channel 1 uses pin 11
   Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);
   Channels[channelNo].AddPoint(8, 0, 0);
   Channels[channelNo].AddPoint(8, 30, 150);
   Channels[channelNo].AddPoint(11, 0, 255);
   Channels[channelNo].AddPoint(11, 15, 0);
   Channels[channelNo].AddPoint(12, 30, 0);
   Channels[channelNo].AddPoint(12, 45, 255);
   Channels[channelNo].AddPoint(19, 30, 150);
   Channels[channelNo].AddPoint(20, 0, 0);
}

// ----------------------- Functions -----------------------
long lastUpdateTime = 0;

// Update light intensity values
void UpdateLights(DateTime currentTime)
{
   long now = Seconds(currentTime.hour(), currentTime.minute(), currentTime.second());   // Convert current time to seconds since midnight
   if(now != lastUpdateTime)     // Perform update only if there is a perceivable change in time (no point wasting clock cycles otherwise)
   {
      for(int channel = 0; channel < MaxChannels; channel++)          // For each Channel
      {
         analogWrite(Channels[channel].GetPin(), Channels[channel].GetLightIntensityInt(now));   // Get updated light intensity and write value to pin (update is performed when reading value)
      }
   }
   lastUpdateTime = now;
}


// Convert HH:mm:ss -> Seconds since midnight
long Seconds(int hours, int minutes, int seconds) {
   return ((long)hours * 60 * 60) + (minutes * 60) + seconds ;
}

// ----------------------- Setup -----------------------
void setup() {
   // Initialize channel schedules
   InitializeChannels(MaxChannels);
   
   // Clock
   Wire.begin();
   RTC.begin();
   //RTC.adjust(DateTime(__DATE__, __TIME__));  // Set RTC time to sketch compilation time, only use for 1 (ONE) run. Will reset time at each device reset!
}

// ----------------------- Loop -----------------------
void loop() {
   // Get current time
   CurrentTime = RTC.now();
   
   // Update lights
   UpdateLights(CurrentTime);
}
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 18, 20:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Tikrai būtų labai šaunu, jei kas nors paprotintų Question Embarassed
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 18, 22:28 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Saulix rašo:
Tikrai būtų labai šaunu, jei kas nors paprotintų Question Embarassed


Citata:
int pct = map(10,0,255,0,100); //Calculate PWM percentage
lcd.setCursor(0,3); // set cursor to column 0, row 4
lcd.print("Light intensity "); // Light intensity
if (pct() < 10) lcd.print("0"); // kad butu 01 ir t.t.
lcd.print(pct);
lcd.print("%");


Tavo "pct" yra kintamasis, o ne funkcija. Kompiliatorius klaidos nemeta?
Siaip ilgas kodas ten zemiau, tad neskaiciau. Taip pat neaisku ka daro ta funkcija map(). Ir ar isvis ten funkcija?
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 18, 23:00 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ne, tai kompiliatorius tai aišku, kad mes klaidą. Šios pabaigos net nedėjau į sketch-ą.
Šiaip tai visiškai neturu žalio supratimo, kaip ir iš kur pasiimti pwm lygį, kuris bus 10 pin.
O tas map, tai gal owm reikšmes 0-255 perskaičiuoja į 0-100.

Šitam visam ilgam kode, tarkim čia:
Kodas:
Channels[channelNo].AddPoint(8, 0, 0);
   Channels[channelNo].AddPoint(8, 30, 150);

pwm reikšmė nuo 8:00 iki 8:30 pakyla nuo 0 iki 150 (t.y nuo 0 iki ~50%). Štai šį kitimą aš ir norėčiau ekrane natyti, tik nežinau kaip Question
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 18, 23:20 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Saulix rašo:
Ne, tai kompiliatorius tai aišku, kad mes klaidą. Šios pabaigos net nedėjau į sketch-ą.
Šiaip tai visiškai neturu žalio supratimo, kaip ir iš kur pasiimti pwm lygį, kuris bus 10 pin.
O tas map, tai gal owm reikšmes 0-255 perskaičiuoja į 0-100.

Šitam visam ilgam kode, tarkim čia:
Kodas:
Channels[channelNo].AddPoint(8, 0, 0);
   Channels[channelNo].AddPoint(8, 30, 150);

pwm reikšmė nuo 8:00 iki 8:30 pakyla nuo 0 iki 150 (t.y nuo 0 iki ~50%). Štai šį kitimą aš ir norėčiau ekrane natyti, tik nežinau kaip Question


Tau reikia ieskoti kas yra tu f-ju viduj.
Pradziai susirask kur yra aprasyta struktura, o joje bus funkcija AddPoint(). Toliau is ten ieskok kur aprasyta ta fuinkcija ir kaip ji veikia.
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 18, 23:23 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
OK. Dabar bent jau aišku į kur žiūrėti.
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:02 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
A kita vertus AddPoint yra aprašyta chanelmanager.cpp faile:
Kodas:

// Add Point to first available position (wrapper function)
void Channel::AddPoint(int h, int m, float intensity)
{
   Point p = Point(h, m, intensity);

ir jeigu prie visų serialprint-ų parašau papildomą eilutę:
Kodas:

    Serial.print(Intensity());

gaunu klaidą: "error: 'Intensity' was not declared in this scope"

vienžo - man čia misija neįmanoma.... Embarassed
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Saulix rašo:
A kita vertus AddPoint yra aprašyta chanelmanager.cpp faile:
Kodas:

// Add Point to first available position (wrapper function)
void Channel::AddPoint(int h, int m, float intensity)
{
   Point p = Point(h, m, intensity);

ir jeigu prie visų serialprint-ų parašau papildomą eilutę:
Kodas:

    Serial.print(Intensity());

gaunu klaidą: "error: 'Intensity' was not declared in this scope"

vienžo - man čia misija neįmanoma.... Embarassed


Tai kad intensity yra kintamasis, o kodel tu nori isvesti funkcijos (kuri neegzistuoja) rezultata?
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:15 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
O tai ką nan reikia išvesti?
Ekrane norėčiau matyti, kaip kinta intensity realiu laiku.
Noriu taip pat, kaip dht22 temperatūrąvir drėgmę taip ir intensity matyt realiy laiku.
Rašiau kad žalias esu arduine ir nežinau ką išvesti žinau tik tai ką noriu rezultate matyti.
Tai ką man reikia išvesti?
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:19 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Saulix rašo:
O tai ką nan reikia išvesti?
Ekrane norėčiau matyti, kaip kinta intensity realiu laiku.
Noriu taip pat, kaip dht22 temperatūrąvir drėgmę taip ir intensity matyt realiy laiku.
Rašiau kad žalias esu arduine ir nežinau ką išvesti žinau tik tai ką noriu rezultate matyti.
Tai ką man reikia išvesti?


As tau nesakysiu konkreciai, kitaip pazinojimo dziaugsmas nebus toks saldus Smile
Inzinieriai shortcut'u neturi. Viskas visada gaunama sunkesniu keliu.

    1. intensity yra kintamasis, o ne funkcija, todel tau ir reikia ten isvesti kaip kintamaji.
    2. Nezinau kaip ten ta funkcija veikia, bet panasu, kad AddPoint() f-joje intensity bus perduodamas tik viena karta. Gal tau to ir reikia - neaisku.
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:26 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Na gerai - tame ilgajame kode yra tokius reikaliux:
Kodas:
analogWrite(Channels[channel].GetPin(), Channels[channel].GetLightIntensityInt(now));   // Get updated light intensity and write value to pin (update is performed when reading value)

Jei iš čia parašytau:
Serial.print(GetLightlntensitylnt());
Suveiktų?

Gaila dabar neprieinu prie PC, negaliu pasimėginti (tapšnoklį baksnoju ir dėl to iš anksto atsiprašau už klaidas).
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 00:46 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Saulix
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Pasimėginau - neveikia Embarassed
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 06:48 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Saulix rašo:
Pasimėginau - neveikia Embarassed


Funkcijai nieko neperdavei, tai ji nieko ir negrazino Smile Pavyzdyje ten perduoda parametra kintamuoju "now".
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 13:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
darius_p
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Citata:
Channels[channelNo].AddPoint(8, 0, 0);
Channels[channelNo].AddPoint(8, 30, 150);


Tai 3 parametras ir yra tavo PWM reikšmė. Jis fiksuotas 0 ir 150. Tai po kiekviena tokia eilute gali ir išvesti alia print("0"). Atitinkamai ir kitose vietose, kur keičiamas PWM.

Jeigu nori matyti rėžius ne 0-255, tai gali panaudoti tą "pct = map(X,0,255,0,100); " Vietoje X įrašai PWM reikšmę ir perskaičiuos proporcingai į 0-100%. Tada print(pct);
 Arduino pwm value to screen?
PranešimasParašytas: 2016 01 19, 13:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
darius_p
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Citata:
Jei iš čia parašytau: Serial.print(GetLightlntensitylnt());


Serial.print( Channels[channel].GetLightIntensityInt(now) );
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2, 3, 4  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

„Deinavos baldai“ — šeimos baldai

FS 22 Tractors
Farming Simulator 19 Mods, FS 22 Maps, FS22 Mods
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS22 Trucks
VAT calculator
VAT number check, What is VAT, How much is VAT
Paskola internetu
Vartojimo paskola, paskola automobiliui, paskola būsto remontui
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS22 Mods
FS22 Harvesters, FS22 Tractors Mods, FS22 Maps Mods
FS22 Mods
FS22 Maps,
FS22 Harvesters,
FS22 Tractors
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
Sims 4 Mods
Sims 4 CC Clothes,
Sims 4 Hair CC,
Sims 4 Skill Cheat
Optic sight
Binoculars for hunting elk,
Best compact binoculars,
Riflescope hunting
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
Farming Simulator 2019 Mods, FS22 Mods, FS22 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama