barr_ceo

I mentioned in another threadf that you can build a touch-control panel, using capacitive touch, very cheaply.

 What I have in mind is a small panel, 4 x 6 inches or so, with pennies and a single wire to  each functioning as capacvitive touch sensors, servos operating the turnouts (and, a factory gate, in my case) all working through an Arduino. I'm be using an Arduino Uno because it's what I have on hand, but you could use a Nano  as well.

I'm just getting started on learning Arduino and C++ . I'm no expert, and and this is probably going to take a while... but when you consider you can buy ten 9G servos on Amazon for a little over a buck and a half each, and ten Arduino Nano's for $35.00 US... compare that to the cost of Tortoise motors. I need 5 for the first projewct I'm doing... My Einewinkle Chemicals quad T-Trak module - an Inglenook with a crossover and turnout access off the main line, and a gated entrance.  

Here's the track plan of the module:

kle%2002.jpg It's made with Kato Unitrack the standard for T-Trak in N scale. Each turnout will require a servo, and there's a gate across the track just above the double gap that will provide a physical barrier for the switcher to keep it from running out on ther mains That works a lot better in N scale than it does in 1:1!

 

Below is the video that insipred me.... I've been wanting touch panels for turnout control for some time, but the cost seemed a bit silly - I knew there had to be a better way then I saw this video on youtube, and realized that by combining servo and touch screen usage with an Arduino, I could get exactly what I want very cheaply.... if not entirely simply.

I'm just learning this, so hop on and we'll take this bumpy ride together!

Read my Journal / Blog...

!BARR_LO.GIFFreelanced N scale Class Digitrax & JMRI

 NRail  T-Trak Standards  T-Trak Wiki   T-Trak Wiki Pages

Reply 2
Photo Bud

Fascinating Idea

And the video is really great. Thanks for sharing this! Using 9g servos and a nano may be the way I go on the few turnouts that will need remote operation.

 

Bud (aka John), The Old Curmudgeon

Fan of Northern Pacific and the Rock Island

Reply 0
barr_ceo

First lesson...

OK, before we dive too deeply into this, a reading assignment:

This is the Arduino writeup on the Capacitive Touch library we'll be using. Before you start programming, you'll need to download and add this to your IDE (the Arduino programming environment - runs on Mac, Linux, and Windows)  and include it, as well as the servo library (which is included with the IDE)

https://playground.arduino.cc/Main/CapacitiveSensor/

Don't let it scare you.... it's a pretty detailed discussion of it, but what we're going to do is pretty simple and straightforward. (He says optimistically...)

Now, I'm going to load this in and play with it over the next couple of days, and I'd suggest you might want to as well if you have an Arduino handy.

This is the code for the demo of Capacitive Touch from the web site linked above. :

===============================

 
#include < CapacitiveSensor.h> 
/*
* CapitiveSense Library Demo Sketch
* Paul Badger 2008
* Uses a high value resistor e.g. 10 megohm between send pin and receive pin
* Resistor effects sensitivity, experiment with values, 50 kilohm - 50 megohm. Larger resistor values yield larger sensor values.
* Receive pin is the sensor pin - try different amounts of foil/metal on this pin
* Best results are obtained if sensor foil and wire is covered with an insulator such as paper or plastic sheet
*/
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10 megohm resistor between pins 4 & 2, pin 2 is sensor pin, add wire, foil
CapacitiveSensor cs_4_5 = CapacitiveSensor(4,5); // 10 megohm resistor between pins 4 & 6, pin 6 is sensor pin, add wire, foil
CapacitiveSensor cs_4_8 = CapacitiveSensor(4,8); // 10 megohm resistor between pins 4 & 8, pin 8 is sensor pin, add wire, foil
void setup()
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
long total2 = cs_4_5.capacitiveSensor(30);
long total3 = cs_4_8.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t"); // tab character for debug window spacing
Serial.print(total1); // print sensor output 1
Serial.print("\t");
Serial.print(total2); // print sensor output 2
Serial.print("\t");
Serial.println(total3); // print sensor output 3
delay(10); // arbitrary delay to limit data to serial port
}

=======================================

... and that's all there is to it. In fact, if we cut out all the comments it's even less intimidating.  Here's the same sketch, without comments:

========================================

#include < CapacitiveSensor.h> 
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
CapacitiveSensor cs_4_5 = CapacitiveSensor(4,5);
CapacitiveSensor cs_4_8 = CapacitiveSensor(4,8);
void setup()                    
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serial.begin(9600);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
long total2 = cs_4_5.capacitiveSensor(30);
long total3 = cs_4_8.capacitiveSensor(30);
Serial.print(millis() - start);
Serial.print("\t");
Serial.print(total1);
Serial.print("\t");
Serial.print(total2);
Serial.print("\t");
Serial.println(total3);
delay(10);
}

=========================================

Not much to it, is there?

 

OK....   Now I'm going to build this little thing, program my Arduino Uno with this sketch, and play with it. I've already got several pennies soldered to single wires for test purposes, and I'm probably going to play with a little bit of aluminum foil, too.

I'm also going to experiment with resistor values. In general, the higher the resistor value, the more sensitive the sensor is. My goal is to mount the sensors in a picture frame, and have them read through the glass. I don't want them reading proximity, because I'm hoping to use a small 4 x 6 or 5 x 7 picture frame as the touch panel. This means my fingers will be fairly close to sensors I don't want to trip, and therefore need the sensor to have a very limited range.... so I'll be starting with a 10 MOhm and probably working down from there until I find the value that triggers at no more than a few millimeters from the sensor.

Other things I'll be trying (after adding the servos into the mix) is seeing if I can put two sensors on one input.... which would let me run duplicate panels on each side of the module.

 

Oh, by the way,  in case it wasn't clear above... I'm controlling 5 sensors (one pin each, plus one (i hope) common pin)), and 5 servos (One data pin each, ) which comes to 11 pins, not counting the +5v and Ground.... this should... I think... all run off a single Arduino. You don't need 1 per turnout. It would still be a bargain even at that, but I'm hoping to do MUCH better.

Reply 1
eastwind

Thanks!

I'll be following along, probably silently, but still attentively.

Oh, while I've no experience with Arduinos, I'm pretty much an expert at C/C++, so if I can help there I'll be glad to, not that there aren't many others who could as well. 

You can call me EW. Here's my blog index

Reply 0
Tom Edwards edwardstd

Doing it in hardware vs. software

I love a good cheap circuit and so I'm a big fan of Arduinos and Raspberry Pis. That said, I'd rather minimize the wiring and soldering. For about three years I have had an old school DC track block "virtual" control panel running using an LCD screen showing an HTML page with the track blocks on it and radio buttons to control things. The web page can be viewed on the server's monitor (LCD panel attached to the Raspberry Pi) or on a mobile device like a smart phone or a tablet. The buttons can be activated by a mouse click or a touch.

Despite using a Pi and some relays to implement the system, I do like the Arduino for some things because the Pi can't always be trusted to do things every so many clock cycles. This is because it's operating system sometimes gets distracted and does things on it's own. I'll be monitoring this thread so keep up the good work!

Tom Edwards

N scale - C&NW/M&StL - Modeling the C&NW's Alco Line

HO scale - Running on the Minnesota Central (Roundhouse Model RR Club, St. James, MN)

12" to the foot - Member of the Osceola & St. Croix Valley crew (Minnesota Transportation Museum)

Blog Index

Reply 1
greg ciurpita gregc

computers can do more

i wonder if controlling servos couldn't be done with two pulse generators and switches routing those pulses to the servos.    An NE556 dual timer could be used to generate a 1ms and a 2ms  pulse, and SPDT switches used to route the pulses to a servo to push it in one direction or the the other.

it's a shame not to more fully utilize a processor once added.   Early in my career a PhD said how trivial it  is build a traffic lighte controller using a microprocessor.  It hadn't occurred to him that a processor could provide more intelligent control by sensing the number of cars and possibly recognizing traffic patterns.

in your track plan, instead of using an arduino to individually control each crossover or turnout, why not use it to align all the turnouts for a particular route?

push-button switches could be places at the end of each spur to align the 3 turnouts between that spur and the mainline.   three additional push-buttons could be added to align the cross-over and turnout on the left for either straight thru running on the mainline or one of the two cross-over positions.   A single arduino is more than capable of handling more complicated interlocks

kle%2002.jpg 

 

 

greg - LaVale, MD     --   MRH Blogs --  Rocky Hill Website  -- Google Site

Reply 1
Nick Santo amsnick

Capacitive touch sensors.

Good thoughts so far.  I got a couple of these a year or so ago and haven’t done anything with them for lack of time.  The price seemed right and they are a little professional looking for installation.  My fat belly won’t trigger them like the push button switches too!!!
 

E5952CD5.png 

Price seemed right on eBay.

Ill enjoy following along and maybe get a couple of moments to breadboard these and report back.

Nick

Nick

https://nixtrainz.com/ Home of the Decoder Buddy

Full disclosure: I am the inventor of the Decoder Buddy and I sell it via the link above.

Reply 1
barr_ceo

Sensors...

nysensor.jpg Yeah, I saw that one online too....   but I think I can do it for less than 1/100 of that price.

Here's my sensor:

It doesn't get any simpler or cheaper... I just cut one end off of a jumper wire, stripped it, and soldered it to a penny.

I made 10 of these to play with. Test results to come.

Reply 1
barr_ceo

i wonder if controlling

Quote:

i wonder if controlling servos couldn't be done with two pulse generators and switches routing those pulses to the servos. 

I'm sure you could...   but you'd be locked into only two positions for all servos collectively, and both the position and the rate would be hardwired into the controller. The device I'm working toward will have the servo positions at each end of travel individually tune-able, which will allow you to install them then adjust their throw individually. This is  an important factor, since one of my servos will be operating an industrial gate that will require much more movement than a simple turnout.

And I doubt you can buy 5 SPDT momentary contact toggles for less than $10 these days, so your system would probably end up costing more.

Quote:

in your track plan, instead of using an arduino to individually control each crossover or turnout, why not use it to align all the turnouts for a particular route?

This is an Inglenook switching "puzzle", not an interlocking. There aren't "routes". It's simply not necessary - simple turnout control is all that's needed or wanted. The mainline turnout will be rarely used. I may "interlock' the mainline turnout at the left end with the gate, so that setting the turnout for access to the siding opens the gate as well. 

It's quite likely that the switching puzzle part will be operated by completely inexperienced people, including children, at shows... and the KISS principle applies.

 

Reply 0
Will_Annand

Wonderful idea.

This sounds like a great idea.

I will be keeping an eye on this project.

It sounds like something I could use on my layout.

 

Reply 0
VSOTTO

Wow, what a fun project!  And

Wow, what a fun project!  And welcome to the rabbit hole of using Arduinos; believe me, it goes deep. 

If I may, a word of caution about using servos:  There is a limit to the number you can power directly from the Arduino.  This is because of the limited amount of current the Arduino can supply.  I've read the recommend limit is around 3-5.  It's better to use an external board to power the servos and use the Arduino.  I've used the PCA9685 board shown below with great results.  It allows you to run 16 servos using only 2 pins!  As an additional bonus, this frees other pins on your Arduino to connect more sensors. 

pca9685.jpg 

You can pick them up from China for around $2, or from a US supplier for about $5 if you don't want to wait for shipping.  As an aside, you can also daisy-chain up to 62 of them together to run up to 992 servos - all while using only 2 pins.  Complete overkill, I know, but nice to know it's available.  The downside is that there's a bit of a learning curve and the code is a little more complex.  But there's a great tutorial over at the adafruit website at https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all

I'll mention too, that I've migrated to using an Arduino Mega for my larger control projects.  It has 50+ i/o pins, but more important to me is that it has more memory and can store larger sketches. 

I look forward to seeing your experiments using two touch-pads connected to a single pin. 

Reply 0
barr_ceo

First experiments...

OK, I've played around with the pennies, and different resistors, monitoring things on the serial monitor, and with a 6.6 M Ohm resistor I'm getting what I think will be a workable range with the penny sensor, I'll have to get the picture frame I want to mount them in to be sure, but it's looking good,

With no contact and clear of the sensor, I'm reading values right around 480 (unspecified units), pretty consistaently... when I get within about 5mm, it starts to climb rapidly, maxing out about 800 just before contact....and popping up into the thousands when I actually touch the penny. I'm thinking a threshold of about 700 should be good. I'll program it as a variable "threshold" so that it can be changed easily.

I also tried connecting two sensors to a single pin....   in short, it works! The base "untripped" reading was a bit higher (around 650) but so was the triggered value. It was pretty clear more calibration would be necessary, and a bit of a "fudge factor" - you're not going to be able to just plug two sensors in to replace a single one, you'll probably have to adjust the code a bit, but two sensors are definitrly in the cards...   maybe even three. Hey, they're cheap...

Next up:   one/two sensors, one servo ; just getting it to toggle between two positions. That should be fairly straightforward. Once I get that working, I'll try expanding it to the 5 sensors and servos I need for my module.

I'm not too worried about the power requirements in this case, because i'll only be operating a single servo at a time,  Now if I get into putting a yard together, then yes, I'll probably look at that servo shield that was mentioned, Or if I decide to add dwarf signals indicating turnout position and I need to free uo some pins to run LEDs.. That might be fun to do too.

For  a home layout, I could see using the Mega... but this is a single T-Trak module, and can be used as either part of a larger layout, or as a stand-alone switching puzzle. I think I'm going to have just enough pins to run the whole thing on the Uno.

Reply 2
Tom

Lots of possibilites

Looks pretty simple to do and easy to add to the fascia to control things. Thanks for sharing this and will be following along.

Tom

Reply 0
barr_ceo

Things have been busy... I've

Things have been busy...

I've had my second cataract removed, and just got word that there is finally a vacancy available in the Assisted Living facility, so I'll be moving into that in the middle of January 2020. I've not given up on this project, but I will be getting settled there for a bit. I'm NOT giving up model railroading, either... I'm doing T-Trak, so that's all going with me. I'm hoping to start a model railroad group there at the center, since we can set up and tear down a T-Trak layout in a matter of minutes, and the modules are small enough to keep in individual rooms. More to come after I get unpacked and working on the code again!

Reply 0
Kenj01

Arduino

Hi,

Have you looked at using the Arduino for control of signals.  I am currently developing such a system (based on some others very smart work) and building the signals for it.

 

Reply 0
barr_ceo

Arduino and signals

Yes, I have looked into Arduino based signalling. I'm planning on adding signals to my modules, using a Nano and sensors. T-Trak is two tracks for the mainline, so it's going to be optimized for that. It's important to note that, as T-Trak is a true modular layout system, my criteria for a signalling setup is a bit different. The "problem" is that the modules can be assembled in different sequences each time the layout is set up. Ideally, the signalling system should be completely self-contained (requiring only power and communication connections to be made)  and flexible enough to deal with the multiple possible setup configurations, without reprogramming each time.

It should lso be able to communicate between control points, and provide for "tumble down" indications on signals in sequence. I believe I've found a system that will do all this, using one Arduino Nano per control point, and Loconet-style cables between signals.

This series of videos explains the system and the installation. I want to eventually do some modifications to it, allowing it to control servos for semaphore signals as well as the Atlas-style signal lights. The Atlas signals are lovely little things, but their control boards are outrageously priced in comparison to an Arduino, and won't run servos. 

There are several videos in thisseries...   the code gets updated throughout, so look at the latest one for the most current versions.

 

Reply 0
barr_ceo

The rest of the story...

I'm finally beginning to get settled in and comfortable in my new digs, and thanks to the corona virus situation, taking a deep breath and looking for things to keep me busy while the assisted living center is on medical lockdown...  the turnout control project is moving back up the to-do list, so I hope to be able to post some news on progress before too long.

 

Reply 0
Marc

And with stalling motors ....???

Look great, I'm in the way to learn a little bit about Arduino control, but I didn't like the use of servos, the price didn't occur for me in the choice, just my taste and feeling.

So, a simple question, and I suppose is yes, this touch panel could it be used with an Arduino to move stalling motors like Totoise or Hankscraft

But I suppose I need some other board to make the interface between the Arduino and the motors?

On the run whith my Maclau River RR in Nscale

Reply 0
barr_ceo

From what little i know so far...

Yes, you can control stall motors with an Arduino.... but not directly. You have to use an additional motor control board, because the stall motors typical run on 12V, and draw more than an Arduino can supply. Motor control boards typically offer 2 or 4 motor control. (Haven't done much reading about them, because I'm not interested in doing it that way...)

Servos draw nothing when not moving. They run on 5 volts, which can come direct from the Arduino, and if only running one at a time, the Arduino can easily handle the 5 servos I need. If I needed more, there are servo boards available for that (see upthread) The Arduino sketch would have to be significantly different as well, since you  would have to "tell the motor control board to tell the motor" instead of just "tell the servo" directly.

And cost definitely is a factor for me on my very limited budget, considering the combined price for the Arduino, and servos for all 4 turnouts and gate will total less than a single Tortoise.... not to mention that that many Tortii would about double the weight of the module. ( A T-Trak quad, 1" foam top, 1/4" plywood frame)

Reply 0
Don C

Combining sketchs and making them work

EW,

If your interested.

I am not a programmer but I can work my way though a sketch with some understanding. I am good with the hardware, pcbs, wiring and the like.

We use arduinos for the club layout, a n-scale freelance thing,  Essentially a folded dogbone with continuous running with an upper level section for switching.  We currently use an ATMega 2560 for block detection back to JMRI using Dr. Geoff Bunza's sensor sketch. We also use servos for turnouts running from a pair of Pro Minis to throw the turnouts from JMRI or Digitrax switch commands, using loconet to talk to them, again from Dr. Bunza's accessory decoder sketch. There is only 2 club members into n-scale and it is not practical to have one of us sitting at the computer console to control switches with the other running trains. The layout has about 7.5 scale miles of main track allowing for a number of trains at the same time.

What we would like to accomplish is servo control via JMRI, Loconet, and "manual input" (with JMRI updates to keep in sync).  The manual input would be from toggle switches, or capacitive switches. Testing would have to be done at home as the park where the culb is, is locked up, can't get to the club because of this Coronavirus thing. I have parts on order to create a test environment here at home, i.e breadboards for the hardware, a Rasp-pi 4 and monitors to run it all.

If this is something you would be interested in helping me with I would be entirely grateful. If you are I will provide you with more particulars.

Thanks, Don C

I think I should start my own blog for this, first one.

Reply 0
Kenj01

Arduino and Signals

Hi,  I use CT Coils ($1.70ea) to sense train and Turnout throw position (HIGH or LOW) as inputs for signals.  The Arduino uses a logic table to determine what state the lights should be at.  If you wanted to bother you could simply substitute a new logic table for each combination of modules, the killer would be how often you change combinations.  The wiring nightmare would be the connecting of lights.

A simpler solution might be to use one Arduino UNO per module with the only external sensor connections being to other module track for train detection and Turnout logic (and this could be a pre-programmed arrangement).

Reply 0
scenicsRme
Kenj01 wrote:

Arduino and Signals

Hi,  I use CT Coils ($1.70ea) to sense train and Turnout throw position (HIGH or LOW) as inputs for signals.  The Arduino uses a logic table to determine what state the lights should be at.  If you wanted to bother you could simply substitute a new logic table for each combination of modules, the killer would be how often you change combinations.  The wiring nightmare would be the connecting of lights.

A simpler solution might be to use one Arduino UNO per module with the only external sensor connections being to other module track for train detection and Turnout logic (and this could be a pre-programmed arrangement).



 Could you please explain how you use CT Coils to sense train and turnout position please (to a non electronic engineer)?
Reply 1
barr_ceo
OK, I know it's been a while, but I haven't given up on this project, and Jimmy of the DIY and Digital Youtube channel just showed something in his latest video that blew me away, and smashed the doors open to Arduino wanna-bes everywhere...
 
AI is the latest Big Thing, right? And OpenAI's ChatGPT has been getting a lot of press... but did you know it can write Arduino sketches?
 
I have NOT had a chance to test this yet... but if it works, it's broken a 2 year logjam on this code I've bee ruminating over. The following is the ChatGPT generated Arduino sketch for operating four servos from four separate capacitive touch switches. (I literally made mine by soldering a single wire to a penny! ( See previous posts in this thread... )
 
----------------------------------
ChatGPT:  Certainly! Here's an expanded version of the Arduino sketch that works with four servos and four touch sensors. It assumes you have connected the first touch sensor to digital pin 2, the second touch sensor to digital pin 3, the third touch sensor to digital pin 4, and the fourth touch sensor to digital pin 5. The first servo is connected to PWM-enabled pin 9, the second servo is connected to PWM-enabled pin 10, the third servo is connected to PWM-enabled pin 11, and the fourth servo is connected to PWM-enabled pin 12.
#include <Servo.h>
const int touchPin1 = 2;    // Digital pin connected to the first touch sensor
const int touchPin2 = 3;    // Digital pin connected to the second touch sensor
const int touchPin3 = 4;    // Digital pin connected to the third touch sensor
const int touchPin4 = 5;    // Digital pin connected to the fourth touch sensor
const int servoPin1 = 9;    // PWM-enabled pin connected to the first servo motor
const int servoPin2 = 10;   // PWM-enabled pin connected to the second servo motor
const int servoPin3 = 11;   // PWM-enabled pin connected to the third servo motor
const int servoPin4 = 12;   // PWM-enabled pin connected to the fourth servo motor
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
bool server1Position = false;   // Current position of the first servo
bool server2Position = false;   // Current position of the second servo
bool server3Position = false;   // Current position of the third servo
bool server4Position = false;   // Current position of the fourth servo
void setup() {
  pinMode(touchPin1, INPUT);
  pinMode(touchPin2, INPUT);
  pinMode(touchPin3, INPUT);
  pinMode(touchPin4, INPUT);
  servo1.attach(servoPin1);
  servo2.attach(servoPin2);
  servo3.attach(servoPin3);
  servo4.attach(servoPin4);
}
void loop() {
int touchValue1 = digitalRead(touchPin1);
int touchValue2 = digitalRead(touchPin2);
int touchValue3 = digitalRead(touchPin3);
int touchValue4 = digitalRead(touchPin4);

if (touchValue1 == HIGH) {
server1Position = !server1Position; // Toggle first server position
if (server1Position) { // Rotate first servo to position 1 (example: 90 degrees)
servo1.write(90);
} else {
// Rotate first servo to position 2 (example: 0 degrees)
servo1.write(0);
}
delay(500); // Adjust delay as needed to debounce the touch sensor
}

if (touchValue2 == HIGH) {
server2Position = !server2Position; // Toggle second server position
if (server2Position) { // Rotate second servo to position 1 (example: 90 degrees)
servo2.write(90);
} else {
// Rotate second servo to position 2 (example: 0 degrees)
servo2.write(0);
}
delay(500); // Adjust delay as needed to debounce the touch sensor
}

if (touchValue3 == HIGH) {
server3Position = !server3Position; // Toggle third server position
if (server3Position) { // Rotate third servo to position 1 (example: 90 degrees)
servo3.write(90);
} else {
// Rotate third servo to position 2 (example: 0 degrees)
servo3.write(0);
}
delay(500); // Adjust delay as needed to debounce the touch sensor }
if (touchValue4 == HIGH) {
server4Position = !server4Position; // Toggle fourth server position
if (server4Position) { // Rotate fourth servo to position 1 (example: 90 degrees)
servo4.write(90);
} else {
// Rotate fourth servo to position 2 (example: 0 degrees)
servo4.write(0);
}
delay(500); // Adjust delay as needed to debounce the touch sensor
}

 
 
Reply 1
barr_ceo
Well, frack. The CODE container didn't preserve the formatting.
 
It's getting late... I'll punch it up tomorrow
Reply 0
Ted Becker rail.bird
Couldn't help myself, I enjoy a challenge so I deciphered the garbled code.  Found  a typo,  "server"  is substituted for  "servo"  in a few places.
 
 I'm assuming this is still using pennies as the sensors.   The touchPins are being read as digital inputs which are not going to work very well as capacitive sensors .
 
I have some suggestions on the code if you are interested.
 
 


Ted Becker

Granite Falls, WA

Reply 0
Reply