|
Hi Brian,
My first computer was a main-frame at UC Berkeley on which I ran some SPSS factor analysis programs. My first "personal" computer was a little octal training device, followed by a Radio Shack Color Computer
My little career (ultimately at Adobe) unfolded around programming in PostScript, which, of course, is inside printers.
Later, on both Mac and PC, I had experience developing a massive Excel/VBA program to simulate multi-lender power-plant financing and construction.
The moment C# with WinForms came out, I knew this was the right stuff, for me.
The earlier books on C# by Chris Sells, and Jesse Liberty, were invaluable for me. Later, Jon Skeet's book became my first call. You can't go wrong with (the more advanced) books by Michaelis and Lippert, and Andrew Troelsen.
cheers, Bill
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Interesting thanks Bill.
I use to write programs using QuickBasic in the 1990's. I wrote some programsfor my work at a communications company which speeded up things and reduced the work load.
There are times when I wonder if I picked the right language to learn so it's good that you are happy in choosing C#.
I'll take note of your book suggestions.
A good book is indeed very valuable.
Brian
|
|
|
|
|
I started programming in 1966 - I kid you not. I learned C in my late 30s, C++ in my late 40s, and C# in my 60s. I am still learning, and not just programming. Never give up. It seems @BillWoodruff may be a year or so older than me.
|
|
|
|
|
I arrived in California on January 1, 1966, with long hair, and a guitar Programming didn't happen for me until the mid 80's .... orbital re-entry from Tralfamadore took more than a decade.
I suspect that, at 75, I am a bit more past my use-by date than Thee, but, I am unequivocally certain that you are wiser !
To me the ideal state is expressed in this quote from Dali:Quote: “Every morning when I wake up, I experience an exquisite joy —the joy of being Salvador Dalí— and I ask myself in rapture: What wonderful things is this Salvador Dalí going to accomplish today?” I would substitute "learn" for "accomplish."
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
I never managed to grow long hair, or play the guitar well. So I turned my attention to important life skills such as smoking and drinking. Now as I approach my 74th (a couple of weeks hence) I try to spend more time learning useful stuff that I missed in my younger days.
As to wisdom, thanks for the vote of confidence, but I know I am far from wise.
We all (or most of us) contribute what we can here, and no one person's worth is greater than another's, apart of course, from @OriginalGriff, who knows everything there is to know.
|
|
|
|
|
The one thing I do know is that I know nothing.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Ah yes, the most important thing we learn.
|
|
|
|
|
Of course, being both ne plus ultra, and, primo imter pares, you would have to say that
It is my pleasure to follow, best as I can, your deep footprints leading toward the shrine of Goddess Techne !
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
I didn't start programming until I brought a TRS-80 computer apart from usign programmable calculators around the early 1980's.
My first introduction to assembly language was to write the letter 'A' in the middle of the screen.
I had fun with disassemblers in finding out how computer programs worked and learn a few secrets of arcade games.
There were some great games in those days and you had to be skillful to fit you game in a 16k memory space for you had a large market to sell your game.
Typing in computer code from a computer magazine started to be a hobby of mine.
Brian
|
|
|
|
|
Interesting Richard.
There would not be a lot around in 1966 to program on. It must have been a very large mainframe computers and maybe you used hole punch cards in those days.
If your approx 70yrs old then you must have been started learning at about 17yrs old in 1966 and maybe learning C in 1988.
I'm just starting to learn C# so I have a lot of catching up to do; but in knowing the basics of computers such as loops, logic etc helps.
Brian
|
|
|
|
|
Yes, punched cards, paper tape, and programming by buttons on the front panel of the processor. I knew nothing about computers when I started my first job, but worked with a guy who taught me the basics. I only learned C# and .NET after I had retired, and there is still much I don't know about it.
|
|
|
|
|
Just to continue the theme, I was 60 last February, so we could easily form an "Old Codegers" society in this forum ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I was 60 last June. Started programming ~August '71 (I know the month, but unsure of the year). Always learning new things.
|
|
|
|
|
Hill Bill
Are you referring to the Wikipedia?
I prefer to have a off-line program to collect my replies and web addresses.
Brian
|
|
|
|
|
No, I was referring to the use of browsers' bookmark facility.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
I use to save things as bookmarks to my browser but then had a few problems and lost valuable bookmarks so I don't trust browser bookmarks. These days I tend to create shortcuts to a link and store them into a folder that I can backup. In doing this I can arrange the links into sub folders and give easy to identify names.
Brian
|
|
|
|
|
Set up a separate folder in your email client.
CC. yourself in those cases you send from other than "home".
As mail comes in, "move" it to the appropriate folder (I prefer manually; or you can set up incoming "rules").
Can archive the folder; delete it; etc. when appropriate.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Sounds like a good idea thanks Gerry.
I still would like a off-line program to collect the text but your idea is a good start.
Brian
|
|
|
|
|
plz help me , i want to draw a real time graph that read data from an arduino, this is the Code :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using ZedGraph;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
string DataFromCOM;
double[] x = new double[100];
double[] y = new double[100];
int i;
PointPairList listPointsOne = new PointPairList();
LineItem myCurveOne;
public Form1()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnConnect_Click(object sender, EventArgs e)
{
serialPort1.PortName = txtComPort.Text;
serialPort1.BaudRate = Convert.ToInt32(txtBaudrate.Text);
if (serialPort1.IsOpen) return;
serialPort1.Open();
btnConnect.Enabled = false;
btnDisconnect.Enabled = true;
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen==false) return;
serialPort1.Close();
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
updateports();
Z1test();
}
private void Z1test()
{
GraphPane myPane = Z1.GraphPane;
Z1.IsShowPointValues = true;
myPane.Title.Text = "Test";
myPane.XAxis.Title.Text = "RealTime";
myPane.YAxis.Title.Text = "Value";
i = 0;
}
private void updateports()
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
txtComPort.Items.Add(port);
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try {
while (serialPort1.BytesToRead > 0)
{
DataFromCOM = serialPort1.ReadLine();
if (DataFromCOM.Trim() != "")
{
int iDAT = Convert.ToInt32(DataFromCOM);
i++;
x[i] = i;
y[i] = iDAT;
}
}
}
catch { }
}
private void timer1_Tick(object sender, EventArgs e)
{
txtKQ.Text =DataFromCOM;
Z1.GraphPane.CurveList.Clear();
Z1.GraphPane.AddCurve(null, x, y, Color.Red, SymbolType.Square);
Z1.GraphPane.AddCurve(null, listPointsOne, Color.Red);
Z1.AxisChange();
Z1.Invalidate();
}
}
}
|
|
|
|
|
IlYes Del_SaVior wrote: this is the Code And what is the problem?
|
|
|
|
|
it doesn't draw .. i dont know where is the problem .
|
|
|
|
|
So start from the beginning and work out where the problem is.
Start by disabling the serial port, and adding random values in your tick handler. Does that do what you wanted - does the graph change each tick?
If it does, then start looking at the serial port.
If it doesn't, then look at the timer, and prove that's working at the interval you expect.
If it is, then look at your graphing package and work out why it's not updating.
If it isn't, then look at why.
Reduce the problem to smaller and smaller areas - it's one of the key parts of both design and debugging!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You need to use the debugger to find out what is happening. Check that you are receiving valid data from the serial port, check the drawing code is actually doing something, etc.
|
|
|
|
|
You need to confirm that you can RECEIVE independently of any charting; and that you can CHART, independent of any receiving. You have done neither. Charting depends (eventually) on receiving. Where to start?
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Hi,
I see several problems:
1.
as other have said already, you should divide and conquer; do not write all the code and then come to the conclusion it doesn't work. Instead chop the task into many smaller tasks and solve them one by one.
2.
NEVER use an empty catch; when an exception occurs, it does so because something is wrong; catching the exception and looking at it will tell you more. It is there to help you. You could display the Exception.Message with a MessageBox. It is better to display the entire Exception.ToString() result as that includes exact line numbers. And I prefer to log all exceptions to a text file, which doesn't disturb the timing aspects as much as interactive debugging. See A simple logging scheme[^]
3.
The DataReceived event will run code on another thread (proof: Asynchronous operations run on ThreadPool threads[^]) , and I trust ZedGraph (as any other WinForms Control) does not work well (or at all) on any thread that did not create it, normally called the GUI thread. So you will be getting cross-thread exceptions. Read more about it here: Invalid cross-thread operations[^]
4.
The DataReceived event fires when one of a few bytes got received, it does not care about lines of text, or whatever constitutes a "message". And (nowhere documented) as long as one DatReceived handler is running, no more such events will happen. Now what happens when you receive a few bytes not including a NewLine? The event may fire, get to your SerialPort.ReadLine() and wait there forever.
The solution here depends very much on the specifics of your peripheral. If data throughput is low and some delay is acceptable, a work-around might be to put some delay (say Thread.Sleep(100) ) just before the call to ReadLine(). And yes, that is an ugly hack, but it sometimes suffices.
You should take care of all of the above and then you may be successful!
|
|
|
|