quiero que me den un codigo en el que yo pueda escribir
He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @2014sara.
En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.
De antemano, muchas gracias por cooperar.
/*----------------------------------------------------------------------
M5Stack Sentron emulation
Created 09 Mar 2019
by Davide Nardella
------------------------------------------------------------------------
This demo is only for M5Stack hardware.
You need to define M5STACK_WIFI or M5STACK_LAN (see platform.h)
----------------------------------------------------------------------*/
#include <Platform.h>
#include <Settimino.h>
//---------------------------------------------------------------------
// Defining USE_DISPLAY the display will be used for service messages
//---------------------------------------------------------------------
#define USE_DISPLAY
#ifdef USE_DISPLAY
#define stdout M5.Lcd
#else
#define stdout Serial
#endif
//**********************************************************************
// Connection Variables
//**********************************************************************
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE1 };
// Cabled Network (M5STACK_LAN defined in platform.h)
IPAddress Local(192,168,0,10); // Local Address
IPAddress Gateway(192, 168, 0, 1);
IPAddress Subnet(255, 255, 255, 0);
// WIFI Network (M5STACK_WIFI defined in platform.h)
// Following constants are needed only if you are connecting via WIFI
// The ssid is the name of my WIFI network (the password obviously is wrong)
char ssid[] = "SKYNET-AIR"; // Your network SSID (name)
char pass[] = "password"; // Your network password (if any)
// Remote Address
IPAddress PLC(192,168,0,12); // PLC Address
//**********************************************************************
// Process Variables
//----------------------------------------------------------------------
// We assume that DB100 contains 9 Reals starting from 0
// V1,V2,V3 Voltage
// C1,C2,C3 Current
// P1,P2,P3 Power
//**********************************************************************
int DBValues = 100; // DB containing Data
int OFSValues = 0; // Offset of first value
int SizeValues = 36; // 9 Reals = 36 Byte
//**********************************************************************
// Program Variables
//**********************************************************************
// Pages
#define VOLTAGE 1
#define CURRENT 2
#define POWER 3
#define SERVICE 4
#define PageSwitchTime 4000 // Change Page every 4s if no button was pressed
long Elapsed =0;
int PageColors[4] = {TFT_GREEN, // Voltage page text color
TFT_YELLOW, // Current page text color
TFT_WHITE, // Power page text color
TFT_WHITE}; // Error page text color
// Leading
int xl[3]={15, 15, 15};
int yl[3]={36, 108,180};
// Values
int xv[3]={84, 84, 84};
int yv[3]={10, 82, 154};
// Umes
int xu[3]={260,260,260};
int yu[3]={36, 108,180};
float V[3]={0.0,0.0,0.0}; // TENSION
float C[3]={0.0,0.0,0.0}; // CURRENT
float P[3]={0.0,0.0,0.0}; // POWER
S7Client Client;
int CurrentPage = -1; // To force the first switch
//----------------------------------------------------------------------
// Checks the elapsed time
//----------------------------------------------------------------------
bool IsElapsed(long Time)
{
long Delta=millis()-Elapsed;
if (Delta<0) // Check millis() rollover (after 49 days)
{
Elapsed=millis();
Delta=0;
}
return Delta>=Time;
}
//----------------------------------------------------------------------
// Mark current time
//----------------------------------------------------------------------
void MarkTime()
{
Elapsed=millis();
}
//----------------------------------------------------------------------
// Switches to a selected page
//----------------------------------------------------------------------
void SwitchTo(int Page)
{
if (Page!=CurrentPage) // Avoid unneeded redraw
{
PreparePage(Page,PageColors[Page-1]);
MarkTime();
CurrentPage=Page;
}
}
//----------------------------------------------------------------------
// Draw Sigma symbol (no font available to do it)
//----------------------------------------------------------------------
void DrawSigma(int x, int y, int Color)
{
M5.lcd.drawLine(x,y,x+18,y,Color);
M5.lcd.drawLine(x,y+1,x+18,y+1,Color);
M5.lcd.drawLine(x,y,x+9,y+9,Color);
M5.lcd.drawLine(x+1,y,x+10,y+9,Color);
M5.lcd.drawLine(x,y+18,x+9,y+9,Color);
M5.lcd.drawLine(x+1,y+18,x+10,y+9,Color);
M5.lcd.drawLine(x,y+18,x+18,y+18,Color);
M5.lcd.drawLine(x,y+17,x+18,y+17,Color);
}
//----------------------------------------------------------------------
// Prepares the page
//----------------------------------------------------------------------
void PreparePage(int Page, int Color)
{
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextColor(Color, TFT_BLACK);
if (Page==SERVICE)
{
M5.Lcd.setTextSize(2);
m5.Lcd.setCursor(0,0);
}
else
M5.Lcd.setTextSize(1);
switch (Page){
case VOLTAGE:
// Lead
M5.Lcd.drawString("L1", xl[0], yl[0], 4);
M5.Lcd.drawString("L2", xl[1], yl[1], 4);
M5.Lcd.drawString("L3", xl[2], yl[2], 4);
// Umes
M5.Lcd.drawString("V", xu[0], yu[0], 4);
M5.Lcd.drawString("V", xu[1], yu[1], 4);
M5.Lcd.drawString("V", xu[2], yu[2], 4);
break;
case CURRENT:
// Lead
M5.Lcd.drawString("L1", xl[0], yl[0], 4);
M5.Lcd.drawString("L2", xl[1], yl[1], 4);
M5.Lcd.drawString("L3", xl[2], yl[2], 4);
// Umes
M5.Lcd.drawString("A", xu[0], yu[0], 4);
M5.Lcd.drawString("A", xu[1], yu[1], 4);
M5.Lcd.drawString("A", xu[2], yu[2], 4);
break;
case POWER:
// Lead
DrawSigma(xl[0], yl[0], Color);
M5.Lcd.drawString("S", xl[0]+22, yl[0], 4);
DrawSigma(xl[1], yl[1], Color);
M5.Lcd.drawString("P", xl[1]+22, yl[1], 4);
DrawSigma(xl[2], yl[2], Color);
M5.Lcd.drawString("Q1", xl[2]+22, yl[2], 4);
// Umes
M5.Lcd.drawString("kVA", xu[0], yu[0], 4);
M5.Lcd.drawString("kW", xu[1], yu[1], 4);
M5.Lcd.drawString("kvar", xu[2], yu[2], 4);
break;
}
}
//----------------------------------------------------------------------
// Displays a single floating point value
//----------------------------------------------------------------------
void WriteValue(int x, int y, float Value)
{
char sValue[6]={0,0,0,0,0,0};
dtostrf(Value, 6, 1, sValue);
M5.Lcd.drawString(sValue, x, y, 7);
}
//----------------------------------------------------------------------
// Displays 3 values in accord to the current page
//----------------------------------------------------------------------
void DisplayValues()
{
M5.Lcd.setTextColor(PageColors[CurrentPage-1], TFT_BLACK);
switch (CurrentPage){
case VOLTAGE:
for (int c=0;c<3;c++)
WriteValue(xv[c],yv[c],V[c]);
break;
case CURRENT:
for (int c=0;c<3;c++)
WriteValue(xv[c],yv[c],C[c]);
break;
case POWER:
for (int c=0;c<3;c++)
WriteValue(xv[c],yv[c],P[c]);
break;
}
}
//----------------------------------------------------------------------
// Switches to next page
//----------------------------------------------------------------------
void NextPage()
{
int Page=CurrentPage+1;
if (Page>POWER)
Page=VOLTAGE;
SwitchTo(Page);
}
//----------------------------------------------------------------------
// Setup : Init Ethernet and Serial port
//----------------------------------------------------------------------
void setup() {
#ifdef M5STACK_LAN
M5.begin(true, false, true);
#endif
#ifdef M5STACK_WIFI
M5.begin(true, false, true);
#endif
// Open serial communications and wait for port to open:
Serial.begin(115200);
SwitchTo(SERVICE); // Service Page
#ifdef S7WIFI
//--------------------------------------------- ESPXX Initialization
stdout.println();
stdout.println("Connecting to ");
stdout.println(ssid);
WiFi.begin(ssid, pass);
WiFi.config(Local, Gateway, Subnet);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
stdout.println("");
stdout.println("WiFi connected");
stdout.println("Local IP address : ");
stdout.println(WiFi.localIP());
delay(3000); // Just to see the message
#else
//--------------------------------Wired Ethernet Shield Initialization
EthernetInit(mac, Local);
delay(1000);
stdout.println("");
stdout.println("Cable connected");
stdout.println("Local IP address : ");
stdout.println(Ethernet.localIP());
delay(3000); // Just to see the message
#endif
}
//----------------------------------------------------------------------
// Connects to the PLC
//----------------------------------------------------------------------
bool Connect()
{
int Result=1;
SwitchTo(SERVICE);
stdout.println("Connecting to ");
stdout.println(PLC);
while (Result!=0)
{
Result=Client.ConnectTo(PLC,
0, // Rack (see the doc.)
2); // Slot (see the doc.)
if (Result==0)
{
stdout.println("");
stdout.println("Connected, PDU Length = ");
stdout.println(Client.GetPDULength());
delay(300);
SwitchTo(VOLTAGE);
}
else
{
stdout.print(".");
delay(500);
}
}
return Result==0;
}
//----------------------------------------------------------------------
// Prints the Error number
//----------------------------------------------------------------------
void CheckError(int ErrNo)
{
int LastPage = CurrentPage;
SwitchTo(SERVICE);
stdout.print("Error No. 0x");
stdout.println(ErrNo, HEX);
// Checks if it's a Severe Error => we need to disconnect
if (ErrNo & 0x00FF)
{
stdout.println("SEVERE ERROR disconnecting");
Client.Disconnect();
}
else
{
delay(1000);
SwitchTo(LastPage);
}
}
//----------------------------------------------------------------------
// Main Loop
//----------------------------------------------------------------------
void loop()
{
// Connects (if needed)
if (!Client.Connected)
Connect();
int Result=Client.ReadArea(S7AreaDB,
DBValues, // DB containing Sentron Data
OFSValues, // Offset of first value
SizeValues, // Data Packet size
NULL); // Use internal buffer (PDU.DATA[]), small and faster
if (Result==0)
{
V[0]=S7.FloatAt(0); // Voltage L1
V[1]=S7.FloatAt(4); // Voltage L2
V[2]=S7.FloatAt(8); // Voltage L3
C[0]=S7.FloatAt(12); // Current L1
C[1]=S7.FloatAt(16); // Current L2
C[2]=S7.FloatAt(20); // Current L3
P[0]=S7.FloatAt(24); // Sigma S
P[1]=S7.FloatAt(28); // Sigma P
P[2]=S7.FloatAt(32); // Sigma Q1
DisplayValues();
}
else
CheckError(Result);
if (Result==0)
{
// Change page detection
if (M5.BtnA.wasPressed())
SwitchTo(VOLTAGE);
if (M5.BtnB.wasPressed())
SwitchTo(CURRENT);
if (M5.BtnC.wasPressed())
SwitchTo(POWER);
// Auto page switch to avoid display damage on long time
if (IsElapsed(PageSwitchTime))
{
NextPage();
}
}
delay(200);
M5.update();
}
Escribir qué?
Lee las normas del foro por favor, y explícate mejor, no uses el título para explicar.
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}