marți, 1 octombrie 2013

Prezentare "frumoasa" sketch/program in articol (II)

   In precedentul articol am prezentat cum afisez frumos un cod/program/sketch, apoi cum fac un text de dimensiuni mari sa fie afisat intr-o fereastra mica.
   Deoarece nu vreau sa instalez programe si alte "ajutoare", am mai cautat si am ajuns la concluzia ca am cautat prea departe, in sensul ca inclusiv programul Arduino IDE are facilitatea de a copia codul si a-l transforma in cod HTML, sketch-ul aratand intuitiuv (cu anumite culori, de exemplu):

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

   Acest tip de prezentare nu elimina problema textelor lungi, asa ca e vreu ceva de genul:
/*
original sketch made by niq_ro ( http://www.tehnic.go.ro )
Santuhalm, Romania, 30.7.2013
revised (1.3.3) sketch in 25.8.2013, Craiova

*/
int u1 = 0; // initial voltage value from sensor;
float u = 0.00; // initial calculated voltage value; 
int i1 = 0; // initial current value;
float i = 0.00; // initial calculated current value;
int t1 = 0; // initial temperature value;
float t = 0.00; // initial calculated temperature value; 

int voltagePin = A4; // divider from measuread voltge is put at analog input no.4
int currentPin = A3; // output from ACS712 is put at analog input no.3
int temperaturePin = A5; // output from LM335 is put at analog input no.5


// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
// LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
LiquidCrystal lcd(3, 4, 5, 6, 7, 8);


void setup() {                
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.setCursor(1, 0);
  lcd.print("indicator panou");
  lcd.setCursor(1, 1);
  lcd.print("ramura negativa");
  delay(2000);
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("versiune 1.3.3");
  lcd.setCursor(4, 1);
  lcd.print("by niq_ro");
  delay(2000);
 // lcd.clear();
 
}


void loop() {
  
float u2 = 0; 
float i2 = 0;
float t2 = 0;
  for (int x=1; x <= 5; x++)
  {
// calculate the value  
u1 = analogRead(voltagePin); // read value from voltage divider;
u = 105*u1/1023.0; // calculated value for input voltage;
u2 = u2 + u;

i1 = analogRead(currentPin); // read value from current sensor (ACS712);
i = 10.0*(5.0*i1/1023.0-2.5); // calculated value for input current using ACS712-20;
i2 = i2 + i;

t1 = analogRead(temperaturePin); // read value from temperature sensor (LM335);
t = 100.0*(5.0*t1/1023.0-2.980)+25.0;
t2 = t2 + t;

delay (200);
  }   

u = u2/5.0; // average and corrected voltage
i = i2/5.0 + 0.05; // average and corrected current
t = t2/5.0 - 8.0 ; // average and corrected temperature
 
// Print a message to the LCD.
  lcd.clear();
  
  // show the voltage value
  if (u >= 100.0) 
  {
    lcd.setCursor(0, 0);
    lcd.print("-");
    lcd.print(u,1);
    lcd.print("V");
  }
  else
  if (u >= 10.0) 
    {
    lcd.setCursor(1, 0);
    lcd.print("-");
    lcd.print(u,1);
    lcd.print("V");
    }
  else  
  if (u > 0.0) 
  { lcd.setCursor(2, 0);
    lcd.print("-");
    lcd.print(u,1);
    lcd.print("V");
  }  
    else
   { lcd.setCursor(3, 0);
    lcd.print(u,1);
    lcd.print("V");
   } 
  // show the current value
  if (i >= 10.0) 
    {
    lcd.setCursor(1, 1);
    lcd.print("+");
    lcd.print(i,1);
    lcd.print("A");
    }
  else  
  if (i > 0.0) 
  { lcd.setCursor(2, 1);
    lcd.print("+");
    lcd.print(i,1);
    lcd.print("A");
  }
  else
  if (i < -10.0) 
  { lcd.setCursor(1, 1);
    lcd.print(i,1);
    lcd.print("A");
  }
  else
  if (i < 0.0) 
  { lcd.setCursor(2, 1);
    lcd.print(i,1);
    lcd.print("A");
  }  
    else
  {  lcd.setCursor(3, 1);
    lcd.print(i,1);
    lcd.print("A");
  }
 
   // show the power value
float p=i*u;
  if (p < 0.0) p = -p;
  if (p >= 1000.0)
  {
  lcd.setCursor(11, 0);
  }
  else
  if (p >= 100.0)
  {
  lcd.setCursor(12, 0);
  }
  else
  if (p >= 10.0)
  {
  lcd.setCursor(13, 0);
  }
  else lcd.setCursor(14, 0);
  lcd.print(p,0);
  lcd.print("W");


   // show the temperature value
 if (t >= 100.0) 
    {
    lcd.setCursor(8, 1);
    lcd.print("+");
    lcd.print(t,1);
    lcd.write(0b11011111);
    lcd.print("C");
    }
  else  
  if (t >= 10.0) 
  { lcd.setCursor(9, 1);
    lcd.print("+");
    lcd.print(t,1);
    lcd.write(0b11011111);
    lcd.print("C");
  }
  else
  if (t >= 0.0) 
  { lcd.setCursor(10, 1);
    lcd.print("+");
    lcd.print(t,1);
    lcd.write(0b11011111);
    lcd.print("C");
  }
  else
  if (t < -10.0) 
  { lcd.setCursor(9, 1);
    lcd.print("+");
    lcd.print(t,1);
    lcd.write(0b11011111);
    lcd.print("C");
  }
  else
  { lcd.setCursor(10, 1);
    lcd.print(t,1);
    lcd.write(0b11011111);
    lcd.print("C");
  }  
delay(1000);
}

   Toata smecheria este in adaugarea urmatorului text, in sursa paginii (html):
 <pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: 200px; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">  
inaintea textului selectat si copiat ca HTML din Arduino IDE,
iar la final trebuie pus:
 </code>/<pre>  
 </p>  

   Un alt exemplu de sketch:
/*.............................................................
Sending Multiple Variables Using VirtualWire. Receiver
Author: Rodrigo Mompo Redoli
For http://controlrobotics.rodrigomompo.com
adapted sketch by niq_ro (Nicu FLORICA) from http://nicuflorica.blogspot.com
..............................................................*/
#include <VirtualWire.h>
#include <Time.h>  
// Sensors 
int Sensor1Data;
int Sensor2Data;
int Sensor3Data;
int Sensor4Data;
  
char StringReceived[22]; 
// other  
int led = 13; //pin for LED
int j=1; // count the messages
  
void setup() {
  // set the time for record time and value
   setTime(0,0,0,25,9,13); // set time to Saturday 8:29:00am Jan 1 2011

pinMode(led, OUTPUT); 

  // VirtualWire 
    // Initialise the IO and ISR
    // Required for DR3100

    // Bits per sec
    vw_setup(2000);
    vw_set_rx_pin(11);  
      
    // Start the receiver PLL running
    vw_rx_start();       

Serial.begin(9600);
Serial.println("Receptorul lui niq_ro e pregatit sa primeasca mesaje..."); 

  
} // END void setup
  
void loop(){
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
      
//Taking the data from the control base
    if (vw_get_message(buf, &buflen)) 
    {
      digitalWrite(led, HIGH);
Serial.print("Pachet date nr. "); // print a message
Serial.print(j); // number of message
Serial.print(": ");
 int i;
        // Message with a good checksum received, dump it. 
        for (i = 0; i < buflen; i++)
 {            
          // Fill Sensor1CharMsg Char array with corresponding 
          // chars from buffer.   
          StringReceived[i] = char(buf[i]);
     //     Serial.print(StringReceived[i]);
 }
  
      sscanf(StringReceived, "%d,%d,%d,%d,%d,%d",&Sensor1Data, &Sensor2Data,&Sensor3Data,&Sensor4Data); // Converts a string to an array
//Serial.print();
  if (hour()<10) Serial.print("0");
  Serial.print(hour());
  Serial.print(":");
  if (minute()<10) Serial.print("0");
  Serial.print(minute());
  Serial.print(":");
  if (second()<10) Serial.print("0");
  Serial.print(second());
Serial.print(" - ");
digitalWrite(led, LOW);        
Serial.print(Sensor1Data);
Serial.print(", ");
Serial.print(Sensor2Data);
Serial.print(", ");
Serial.print(Sensor3Data);
Serial.print(" & ");
Serial.println(Sensor4Data);
        // Turn off light to and await next message 
j=j++; // count the message         
    }
  
 memset( StringReceived, 0, sizeof( StringReceived));// This line is for reset the StringReceived
}


3 comentarii:

  1. Salut am testat acsul meu 712 cu scechul tau si are precizie buna felicitari bravo! recomand cu incredere .faci treaba buna!

    RăspundețiȘtergere
  2. salut ! ce valoare au rezistentele care masoarea voltajul ?

    RăspundețiȘtergere
    Răspunsuri
    1. sincer, nu mai stiu, am avut probleme cu hard-urile si nu mai am toate proiectele, dar dupa 105-ul ala din formula cred ca era un 100k cu 5k, avea cap scara mare putin peste 100V...

      Ștergere