Does a 'bad' first post to this forum deserve/desire such a flogging?

I saw Code not working URGENT and thought I should ask the question. Has this first-time-poster been put off by the barrage of "you've done it wrong", not in terms of their code, but their posting of it. Or maybe it's a bot. I hope the latter. If the former, then I ask those that replied (all with the best of intentions) to think twice before doubling-down on the flogging.

If you look at the original poster's profile, you will see that he/she hasn't been seen on the site since 5:47 pm yesterday.

He/she joined at 5:37pm, posted the question at 5:47pm and left the site at 5:47pm.
They spent less than 1 minute reading 1 post (probably their own)

It seems likely to me that they have not seen any of the replies to their post.

Every post in response to the OP was on the money. I didn't notice any 'done it wrong', it was mostly failed to compile, not formatted, no wiring diagram. All requirements for us to debug.

Volunteers routinely go above and beyond to help questioners solve their project problems. Many have devoted thousands of hours to assisting others.

However, questioners often don’t realize that there are basic rules to follow when posting inquiries. Considerable effort has gone into forums to educate inexperienced users about what is expected of them.

When joining any forum, new users should, at a minimum, review existing posts to understand how questions are typically asked. Forums also provide “sticky” posts that clearly explain how to ask for help effectively.

Thanks @sonofcy @LarryD , I don't disagree. But If I were a first time poster (and ignored the readme) getting hit from all sides by all the volunteers within 10mins might make me think twice.

A positive attribute is to think about others and investigate rules of conduct before jumping in to a group.

Good. Think twice, read all responses again, see where improvement in the request can be made, and don't come out with 'URGENT'

Doesn't even sound that urgent to me, but anyone using a word in capitals in the topic is asking for it in my opinion.

I somehow doubt that the assignment was handed out today, and well, i am not a student, but it is nice of you to think that the student should not be discouraged from using this forum.

Personally i think that there isn't much wrong with the responses other than maybe a lot of them are very similar, basically,

  • we can't help you without the required information.
  • the information you provided is incorrect

and seriously if you look at the original post and the code within, i would say, rarely have i seen such a poor example of code that should work. Somehow if the post really was at quarter to six in the morning then this student should have a nap first.

It seems clear that the person posting the thread in question was at least attempting to follow this extremely detailed tutorial:

https://www.sciencebuddies.org/science-fair-projects/project-ideas/Elec_p105/electricity-electronics/automatic-pill-dispenser

But how the code posted could have been so hopelessly scrambled is hard to imagine.

Original, for the Uno R4:

/* automatic pill dispenser example code
for parts list, circuit diagram, and instructions see:

https://www.sciencebuddies.org/science-fair-projects/project-ideas/Elec_p105/electricity-electronics/automatic-pill-dispenser

This code assumes you are using the built-in RTC on an Arduino UNO R4. To modify the code for an external RTC, see:

https://www.sciencebuddies.org/science-fair-projects/references/how-to-use-an-arduino#step36

*/

// include libraries
#include <Servo.h>  
#include <LiquidCrystal.h>
#include <RTC.h>

Servo servo; // create servo object

// constant variables for pins
const int servoPin = 6;
const int buttonPin = 9;
const int ledPin = 7;
const int buzzerPin = 8;

// other variables
int angle = 0;
int angleIncrement = 45;  // default 45 degrees for 4 compartments, change for different number of compartments
int newAngle;
int buttonState;
int movementDelay = 50;
int debounceDelay = 1000;

// time variables
int year;
int month;
int day;
int hour;
int minutes;
int seconds;

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup(){ // setup code that only runs once
  pinMode(buttonPin, INPUT); // set button pin as input
  pinMode(ledPin,OUTPUT);    // set LED pin as output
  pinMode(buzzerPin,OUTPUT); // set buzzer pin as output
  digitalWrite(ledPin,LOW);  // make sure LED is off
  digitalWrite(buzzerPin,LOW);  // make sure buzzer is off
  servo.attach(servoPin);    // attach servo object to servoPin
  servo.write(angle);        // set servo to initial angle
  Serial.begin(9600);        // initialize serial for debugging

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // initialize the RTC and set the current date and time
  // you will need to manually adjust the time right before you upload the code
  RTC.begin();
  RTCTime startTime(12, Month::APRIL, 2024, 8, 59, 50, DayOfWeek::FRIDAY, SaveLight::SAVING_TIME_ACTIVE);
  RTC.setTime(startTime);
}

void loop(){  // code that loops forever
  updateLCD();  // display the current date and time on the screen (see function below)
  
  buttonState = digitalRead(buttonPin); // read button state (you can edit the code to advance the servo when you press the button, useful for debugging)
  Serial.println(angle);                // print the servo angle

  // detect certain times and rotate the servo mechanism ahead by one compartment. 
  // the example code rotates the servo once per minute when the seconds variable equals 0.
  // change to detect different times of day, for example (hours == 9 && minutes == 0 && seconds == 0) would detect 9:00:00 AM
  // use additional "else if" conditions to detect more than one time

  if(seconds == 0){               // check for seconds = 0 (one minute intervals)
    newAngle = angle + angleIncrement; // increase angle by increment
    if (newAngle<=180){           // if the new angle is less than or equal to 180, increase angle
    	while(angle < newAngle){    // increase angle until it reaches the new angle
      	angle = angle + 1;        // increase angle by 1
      	servo.write(angle);       // move the servo
        Serial.println(angle);    // print the angle
      	delay(movementDelay);     // delay to slow down movement
    	}
      // flash LED and buzzer
      flashLED(4,150);    // flashLED(number of flashes, delay in milliseconds), see function below
    }
    else{ // if the new angle is greater than 180, reset angle to 0
      while(angle>0){         // decrease angle until it reaches 0
        angle = angle - 1;    // decrease angle by 1
        servo.write(angle);   // move the servo
        Serial.println(angle);// print the angle
        delay(movementDelay); // delay to slow down movement
      }
    }
  }
}

void flashLED(int numFlashes, int flashDelay){  // alarm function to flash LED and sound buzzer
  lcd.clear();              // clear the LCD screen
  lcd.setCursor(0, 0);      // set cursor to top left
  lcd.print("Take medicine!");  // display message
  for (int i = 0; i<numFlashes; i++){  // loop to flash LED/buzzer numFlashes times
    digitalWrite(ledPin,HIGH);         // turn LED on
    digitalWrite(buzzerPin,HIGH);      // turn buzzer on
    delay(flashDelay);                 // delay
    digitalWrite(ledPin,LOW);          // turn LED off
    digitalWrite(buzzerPin,LOW);       // turn buzzer off
    delay(flashDelay);                 // delay
  }
  // wait for button press - the code will get stuck in this loop until you press the button
  while(digitalRead(buttonPin) == LOW){}; 
  delay(1000);    // delay before clearing screen
  lcd.clear();    // clear screen
}

void updateLCD(){    // function to update LCD screen
  // get current time from the RTC
  RTCTime currentTime;
  RTC.getTime(currentTime);
  // store current time variables
  year = currentTime.getYear();
  month = Month2int(currentTime.getMonth());
  day = currentTime.getDayOfMonth();
  hour = currentTime.getHour();
  minutes = currentTime.getMinutes();
  seconds = currentTime.getSeconds();

  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 0);
  // print month/day/year (rearrange for different date formats)
  // add leading spaces if month or day are less than 10 to keep spacing consistent
  // (always use 2 characters for month and day)
  if(month<10){   // print extra space if month is less than 10
    lcd.print(" ");
  }
  lcd.print(month);  // print the month
  lcd.print("/");
  if(day<10){        // print extra space if the day is less than 10
    lcd.print(" ");
  }
  lcd.print(day);    // print the day
  lcd.print("/");
  lcd.print(year);   // print the year

  // print time in hh:mm:ss format
  // add leading zeroes if minutes or seconds are less than ten to keep spacing consistent
  lcd.setCursor(0, 1);  // move cursor to second row
  if(hour<10){          // print leading space if hour is less than 10
    lcd.print(" ");
  }
  lcd.print(hour);      // print the hour
  lcd.print(":");
  if(minutes<10){       // print leading zero if minute is less than 10
    lcd.print("0");
  }
  lcd.print(minutes);   // print the minute
  lcd.print(":");
  if(seconds<10){       // print leading zero if second is less than 10
    lcd.print("0");
  }
  lcd.print(seconds);   // print the second
}

Every so often we get a new member that takes everything as a personal attack. Every so many years we get Big Sister’d for not being PC enuf without addressing that in order to be more learning supportive, we NEED to understand what they have and see their code of which none of that is an attack.

Is it flying monkey time again?

In your timezone.

I understand your concern... but...

About abusing the (screamed) word "URGENT?" I agree. Glad you see my point, and I understand not wanting to publicly call it out. Why should you? Ignore it, move on, and it goes away.

About over-stating status (lying)? Why should a that be made to feel welcome? Is my time so worthless? Again, ignore, move on, it will go away.

Does their exaggerated status demand attention before others? Hey, ignore it, move on, it will go away.

After the forum is filled with thousands of ignored, moved-on, ended without conclusion then what? You can see that on the ESP32 ghost-town-of-a-forum.

I fully understand the novice, showing up and not following the rules... I was one. I still am, on both counts. I got a lot more than a "talking-to" for not obeying. Crazy thing is, I agree with the decisions here, even though I do not agree with the cause.

The forum sign-up (when I signed up in 2021) puts you through CBTs for starting topics, replying, uploading images, formatting code and creating links... AND... all the rules. Anyone on this forum has had that information presented to them. "No excuses."

He wasn't put off and has reacted in the meantime. You could mark @JohnLincoln s answer as solution to close this thread.

The forum is a non-profit service; the "customer is always right" rule doesn't apply here. Forum volunteers are focused on solving the problems of those who come to them, not on how they'll like it.
The person formatted his post poorly, provided inaccurate and insufficient information, and didn't respond to other participants' questions, despite marking the matter as urgent. This demonstrated extreme disrespect for those who were trying to help him, and and took away people's time, which they could have used to help other, more careful participants.
if he leaves after this, the forum is unlikely to lose its reputation.

Anyone with a memory of the early days of this forum will remember some of the harsh comments that appeared regularly.

Walking on eggshells sometimes. No doubt deterred many first timers.

I'm guessing we shouldn't slam @morgie_fitz for editing her first post…

a7

PaulS didn’t suffer fools, he dropped hints not explanations and IIRC “idiot” was only ever implied, not spelled out. I thought it was hilarious since there was always a point and unstated exasperation. Sometimes it took me a while to figure out the bleeding obvious answer and those were the best.

And then the comedy went away, driven off by PC.

I'll be a bit careful here because he may still be around with another screen name but I did want to see if AI (DeepSeek) could recreate the essence of his persona with this task:

Its answer:

Well, I do remember a line of users code something like :

int myInt = 99999 ; // Arduino Uno

and the helpful hint the user received was "dream on".

Agreed.

I’m giving him or her the benefit of the doubt for the time being. But with Saturday morning approaching fast, I would have been monitoring replies more frequently, even with a possible time zone handicap.

I posted a potential solution over three hours ago and there may be others.

Who can forget and I shall not name the contributor whose reply in its entirety was often a quote of one line of the posted code and

Oops.

I stared at quite a number of those for longer than I'd like to admit.

Grrrr.

a7

I often find it difficult to know the best way to answer some queries

My preferred method would be to offer hints to lead the OP to a solution to reinforce their learning. In some cases "Oops" would be an appropriate answer. More usually I would reply something along the lines of "Have you spelt the name of the function correctly ?" or, as earlier today, "The digitalWright() function does not exist but the digitalWrite() function does"

However, we usually don't know how much the OP knows and how they will react. Some users don't want to learn, they just want a solution and it is often the case that until they have replied to the topic that we don't get any clues as to their approach

To me there is also an elephant in the room whereby I am usually not the only person replying to a topic and other people's answers may range from posting code that fixes the problem to something along the lines of "You are going about this the wrong way. What you should do is write a class so that you can define an array of objects of the same type" which goes way over the head of the OP

I should, of course, say that if I am not the first person to reply to a problem then I become the user with the alternative approach to solving the problem that may upset other people !